Skip to content

Instantly share code, notes, and snippets.

@josejuan
Created October 10, 2014 07:07
Show Gist options
  • Save josejuan/9c87628a9418cbceadc7 to your computer and use it in GitHub Desktop.
Save josejuan/9c87628a9418cbceadc7 to your computer and use it in GitHub Desktop.
"I prefer passing simple data to passing functions (codata). Simpler
to reason and to test with *Check."
Yo aún no lo se, en función del problema a resolver quizás deba pasar
una función o no. En todo caso, esperaré que mi función tenga las más
propiedades deseables posibles.
"I prefer functions with small domains."
Yo no, yo prefiero funciones con grandes dominios.
---------------------
Obviamente, en ambos casos hablamos de funciones con propiedades deseables.
También, obviamente, hablamos de que las soluciones adoptadas son correctas
(por ejemplo "no matamos moscas a cañonazos").
¿Porqué prefiero una función con dominios grandes? ¡porque para resolver un
problema Z tendré que escribir menos código! (más fácil de mantener, revisar,
etc...). ¿De testear?, en general sí será más difícil, pero no tanto como
puede parecer.
Si tenemos que ordenar un conjunto, podemos decir que es mejor
Sort( [Int] )
que
Sort( [a], (a -> a -> Ordering) )
(ver `qsort` de stdlib de C)
Pero en ese caso su dominio es mucho menor, debiendo escribir muchas más
funciones para cubrir tooooodo el dominio que *debemos* resolver
SortInt( [Int] )
SortString( [String] )
...
Cuando usamos métodos virtuales (interfaces, typeclass, ...) realmente
es *LO MISMO* que pasar como argumento la función, si tenemos
interface ISortable { Sort }
cuando hacemos
myInstanceOf_XType.Sort()
realmente es lo mismo que
Sort( myInstanceOf_XType, XType.Compare )
y la hora de hacer test, "perse", no tendremos ventajas de un método
frente a otro, puesto que si para los tests estoy usando XType, tanto
me da usar una representación o la otra.
PD: por aclarar la réplica, si en la exclamación "prefiero" se dice en sentido
platónico (ej. me resulta feo pasar un callback pero lo pasaré siempre que
crea que es lo correcto) entonces sólo indica una preferencia y gusto personal.
Mi réplica va dirigida a que esa "preferencia" no debería condicionar la mejor
elección a la hora de codificar la función ¡aunque requiera callbacks!.
:)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment