Open sanuzzi opened 6 years ago
Fíjense cómo les quedaron las condiciones:
maximoEntreDosUsuariosDespuesDeUnBloque bloque arg1 arg2
| unNúmero > otroNúmero = arg1
| otherwise = arg2
minimoEntreDosUsuariosDespuesDeUnBloque bloque arg1 arg2
| unNúmero > otroNúmero = arg1
| otherwise = arg2
peorBloqueDeUnUsuario usuario arg1 arg2
| unNúmero > otroNúmero = arg1
| otherwise = arg2
Todo esto se repite:
... arg1 arg2
| unNúmero > otroNúmero = arg1
| otherwise = arg2
¿No podrían ahorrarse esa repetición de las guardas de alguna forma?
En definitiva, para cada caso, lo único que les importa es un número y en base a eso podría existir una lógica externa que se quede con uno o con otro en base a dicho número.
Por otro lado, el primer y segundo caso preguntan algo casi idéntico, esperaría que uno pueda reutilizar directamente el otro al multiplicar por -1 o algo similar.
Se sigue repitiendo, abstraigan a algo mejor. Por ejemplo, lo que dijo víctor, "máximoSegún"
Regalo... máximoSegún criterio lista = fromJust (find (esElMejorDeTodos criterio lista) lista)
esElMejorDeTodos criterio lista elMejor = all (\unoPeor -> criterio elMejor >= criterio unoPeor) lista
quienEsMenosRico bloqueAAplicar usuarios = mínimoSegún (billeteraDeUnUsuarioDespuesDeUnBloque bloqueAAplicar) usuarios
Presten atención a su código:
billeteraMasRica ... = maximum (map(...) lista)
quienesMasRico ... = fromJust (find (...) lista)
billeteraMenosRica ... = minimum (map(...) lista)
quienEsMenosRico ... = fromJust (find (...) lista)
buscarPeorBloqueDeUnUsuarioEnUnaBlockChain ... = fromJust (find (...) blockChain)
¿Se nota la repetición de lógica? Es más, las condiciones también repiten en algunos casos.
Es más, lo del peor bloque define mucha más lógica, que podría eliminarse en buena parte si tuviesen mejores abstracciones.
Hagan una abstracción mejorada para saber el máximo de un conjunto según un criterio, y también saber el mínimo reutilizando el máximo con alguna variación que le apliquen al criterio.
Luego, reutilicen esos 2 para todo lo que deban definir.