¿Tiene sentido usar "ys" en lugar de "ies" en los identificadores para facilitar la funcionalidad de buscar y reemplazar? [cerrado]

9

Aunque gramaticalmente incorrecto, al escribir identificadores para funciones, variables, etc., ¿tiene sentido agregar simplemente una "s" a plurales de palabras que terminan en Y? Mi razón para esto sería que si necesita buscar y reemplazar, por ejemplo, reemplazando "compañía" por "proveedor", "compañía" coincidiría con las formas en singular y plural (" compañía y" compañía s "), mientras que si el plural se deletreara correctamente, tendría que hacer dos búsquedas separadas.

SHNC
fuente
8
¿Qué pasa con los niños, ratones, cuchillos, lobos, hombres, mujeres, esposas y dientes? Todo es válido para evitar las temidas "dos búsquedas separadas" .
Tulains Córdova
3
Soy partidario de wolfys sobre wolfies yo mismo ...
Jimmy Hoffa
2
¿Realmente planea renombrar identificadores muy a menudo en su flujo de trabajo? Parece un poco exagerado asumir toda la capacidad cognitiva de los nombres mal escritos en el código solo para admitir una función que nunca podría usarse.
Kent A.
10
Créame, no desea aplicar una operación de buscar y reemplazar en una base de código grande para una palabra como "empresa" sin una restricción de "solo palabras completas". Por lo tanto, tendrá que usar dos búsquedas separadas, tampoco.
Doc Brown
2
Dos. Separar. Búsquedas
Tulains Córdova

Respuestas:

24

Cualquier búsqueda y reemplazo de este tipo debe realizarse con cuidado y cada cambio debe verificarse manualmente para, por ejemplo, evitar "acompañar" en un comentario que se convierte en "proveedor" con el cambio de su compañía / proveedor. Como tal, dos búsquedas separadas de "compañía" y "compañías" no deberían crear una sobrecarga significativa en comparación con el tiempo dedicado a inspeccionar y aprobar cada cambio.

Por lo tanto, escribir mal las palabras para lograr una sola búsqueda ofrece los aspectos negativos de verse mal y ser más difícil de leer de lo necesario, sin ofrecer ningún beneficio obvio.

David Arno
fuente
11
Y, con la mejora de las herramientas de refactorización, la búsqueda y el reemplazo globales basados ​​solo en el texto se están convirtiendo en la forma menos confiable de cambiar el nombre de un identificador.
Kent A.
Esto no sería un problema usando una búsqueda de "palabras completas", como lo menciona Doc Brown.
SHNC
66
@ user3047082, la búsqueda de palabras completas tampoco coincidiría con "compañías", lo que hace que la pregunta sea bastante inútil ...
David Arno
6

Supongo que está hablando de cambiar el nombre de los archivos de código fuente. Con los IDE actuales, esto siempre debe hacerse con las herramientas de refactorización del IDE. Si su IDE no tiene esto, considere cambiar a otro IDE. La mayoría de las herramientas de refactorización IDE también mantienen un historial de refactorización, lo que le brinda la capacidad de "deshacer" rápidamente si no le gustan los resultados del refactorizador. Al usar buscar / reemplazar, es posible que no tenga la capacidad de deshacer todo el conjunto de cambios (a menos que pueda usar sus herramientas de control de revisión y volver a la versión previamente comprometida). Además, al usar herramientas de refactorización, es más seguro cambiar inadvertidamente algo que no pretendía cambiar.

javabeano
fuente
3
Quien marcó esta respuesta como de baja calidad: si bien no responde estrictamente a la pregunta que se le hizo, aborda la imagen más amplia de por qué uno querría usar un esquema de nomenclatura y una mejor manera de realizar la misma tarea. Voté "se ve bien" en la revisión de la bandera y agregué un voto a favor.
Gracias @Snowman. Es naturaleza humana, cuando se encuentra en un área desconocida, formular una pregunta basada en su propia mentalidad (sin experiencia). Sí, aunque no respondí la pregunta real, mi suposición de lo que realmente se estaba preguntando se basó en otras pistas en la pregunta. Los plurales que más he encontrado son de herramientas de generación de código, por ejemplo, XSD-to-POJO, Hibernate / JPA ingeniería inversa de la base de datos, etc. Esencialmente, si estos plurales están en el código y al autor no le gustó la elección de plurales, entonces probablemente no fueron escritos por el autor y es más probable que se generen automáticamente.
javabeano
-9

¡Si! ¡Si! ¡Si! Tiene mucho sentido hacer eso. Y lo he estado haciendo por años.

Divulgación 1: el inglés no es mi lengua materna.

Divulgación 2: mi conocimiento de la gramática inglesa es considerablemente mejor que el del hablante nativo promedio.

Divulgación 3: cuando se trata de comunicarse con los humanos, soy una gramática vehemente nazi.

Y ahora que estas revelaciones están fuera del camino, permítanme decir que la gramática inglesa no tiene lugar en el código. Verá, por eso se llama código y no prosa . Se supone que tiene cierta semejanza con un lenguaje entendido por los humanos, con el propósito de facilitar la lectura, pero aparte de eso, lo que más necesitamos del código no son las cualidades de la prosa; son otras cualidades más técnicas, como precisión , inequívoca y brevedad . Es por eso que la sintaxis C de if( x != y ) y++;es mucho más preferible que la IF X IS NOT EQUAL TO Y THEN ADD 1 TO Y END-IF.sintaxis de Cobol. La supuesta conveniencia de compiladores que entienden el lenguaje natural es una falacia, y no creas en mi palabra, mira lo que ol'Edsger tiene que decir al respecto:Edsger W. Dijkstra, Sobre la necedad de la "programación del lenguaje natural" .

Otra cualidad que es importante es la computabilidad de los identificadores . El hecho de que una propiedad llamada Colorsiempre se pueda leer a través de un método llamado getColor()y escrito a través de un método llamado setColor()es de suma importancia. Estos identificadores son computables a partir del nombre de la propiedad, por lo que no tiene que saberlos de memoria. Si un programador eligiera un par de métodos llamados getColor()por un lado, pero colorize()por otro lado, sus colegas considerarían legítimamente este sabotaje. Así de importante es la computabilidad del identificador.

Además, se pueden escribir herramientas de programación (y muchas de ellas se han escrito, por ejemplo, Hibernate ) que pueden calcular estos nombres. Sin la computabilidad del nombre del identificador, tendría que usar una sintaxis adicional (por ejemplo, en Hibernate, anotaciones adicionales) para especificar con precisión a cada herramienta cómo crear cada nombre de identificador o qué nombre ad hoc le ha dado a cada entidad.

Por lo tanto, la computabilidad del identificador es importante, mientras que al mismo tiempo la gramática inglesa es irrelevante (ya que no estamos haciendo programación en lenguaje natural) para poder calcular el nombre de una colección de entidades agregando siempre "s" al nombre de una sola instancia tiene mucho sentido, no importa el hecho de que viola la sensibilidad del idioma inglés de la mayoría de las personas (incluido el mío).

Y nos guste o no, esta es la tendencia del futuro. El idioma nativo de la mayoría de los programadores en el planeta ya no es el inglés, y la tendencia es continuar muy fuerte en esta dirección. (Además, ni siquiera estaría dispuesto a apostar dinero en la sugerencia de que el inglés es el idioma nativo de la mayoría de los programadores que trabajan en los Estados Unidos en este momento). Estas son personas que, en gran medida, cuando intentan calcular el nombre de una colección del nombre de una sola instancia de "empresa", simplemente agregará una "s", y la forma "empresas" ni siquiera se les pasará por la cabeza. Para un gran porcentaje cada vez mayor de programadores en el mundo, el conocimiento de las peculiaridades del idioma inglés no agrega ningún valor a su trabajo, solo lo hace un poco más difícil.

Mike Nakis
fuente
77
1. Los índices e índices son plurales válidos de índice. Está equivocado al creer que solo uno es correcto, por ejemplo, consulte oxforddictionaries.com/definition/english/index . 2. Una X privada, que puede leerse a través de getX y escribirse a través de setX no es privada; Es un valor público. 3. El código es un documento de diseño. Informa a un compilador sobre cómo generar "código de máquina", pero lo que es más importante, describe ese diseño de una manera que otras personas puedan leer fácilmente. La legibilidad es uno de los dos aspectos más importantes del código (la comprobabilidad es el otro).
David Arno
3
El código está escrito por dos razones: para que los humanos lean y para que las computadoras lo ejecuten. Algunos dirían que el código fuente está escrito principalmente para que los humanos lo lean, ya que la mayor parte se compila inmediatamente en código de bytes antes de que la computadora lo ejecute. Entonces, si bien las computadoras pueden no preocuparse por la gramática adecuada, los humanos ciertamente lo hacen.
Eric King
3
Si bien el inglés puede no ser su idioma nativo, podría ser la próxima persona que lea su código. Probablemente también confundirá a otros de su lengua materna que hayan aprendido inglés.
Andy
2
o solo vas a lastimar a aquellos que toman dos veces Companyscuando debería ser Companies. Después de todo, el punto completo del código que usualmente escribimos es, de hecho, acercarlo al lenguaje natural.
Andy
2
Lo que sea, encuentro ese papel lleno de mierda. El código está entre el lenguaje natural y el bytecode. Si no fuera por facilitar la comprensión humana del código, no habría ninguna razón no solo para ingresar bytecode directamente.
Andy