Considere el siguiente problema: dada una lista de longitud tres de tuplas (String, Int), ¿hay un par de elementos que tengan la misma parte "Int"? (Por ejemplo, [("bob",5),("gertrude",3),("al",5)]
contiene un par tal, sino [("bob",5),("gertrude",3),("al",1)]
no lo hace.)¿Qué hace un buen nombre para una función de ayuda?
Así es como me gustaría implementar una función de este tipo:
import Data.List (sortBy)
import Data.Function (on)
hasPair::[(String,Int)]->Bool
hasPair = napkin . sortBy (compare `on` snd)
where napkin [(_, a),(_, b),(_, c)] | a == b = True
| b == c = True
| otherwise = False
coincidencia de patrones para unir nombres a la "Int He usado "parte de las tuplas, pero quiero ordenar primero (para agrupar miembros similares), así que puse la función de coincidencia de patrones dentro de una cláusula where
. Pero esto me lleva a mi pregunta: ¿cuál es una buena estrategia para elegir nombres para funciones que viven dentro de where
, cláusulas? Quiero poder pensar en esos nombres rápidamente. Para este ejemplo, "hasPair" parece una buena opción, ¡pero ya está tomada! Encuentro que el patrón aparece mucho: el nombre aparentemente natural para una función auxiliar ya está ocupado por la función externa que lo llama. Así que, en ocasiones, llamé a tales funciones auxiliares cosas como "op", "foo" e incluso "ayudante"; aquí he elegido "servilleta" para enfatizar su naturaleza de usarlo una vez, tirarlo de la basura.
Entonces, queridos lectores de Stackoverflow, ¿qué llamarían "servilleta"? Y, lo que es más importante, ¿cómo abordas este problema en general?
'go' es el camino :) –
Una métrica general - _use nombres descriptivos cortos, si se esfuerza por ser adecuadamente descriptivo, simplemente haga que short_. Por cierto 'servilleta 'como está escrito actualmente no es muy robusto (la lista debe tener exactamente tres miembros), si lo piensas un poco más, tal vez sugiera un mejor nombre. –
@stephen Sí, me di cuenta de eso de 'servilleta' mientras la escribía. Sin embargo, ¿diría usted que esto es cierto en general: si le resulta difícil nombrar una función, es probable que su diseño necesite mejoras? Si es cierto, es un concepto bastante poderoso ... – gcbenison