Ocasionalmente, el nombre más lógico para algo (por ejemplo, una variable) es una palabra clave reservada en el idioma o entorno de elección. Cuando no hay un sinónimo igualmente apropiado, ¿cómo se nombra?
Me imagino que hay mejores prácticas heurísticas para este problema. Estos podrían ser proporcionados por los creadores o gobernadores de lenguajes y entornos de programación. Por ejemplo, si python.org (o Guido van Rossum) dice cómo tratarlo en Python, esa sería una buena guía en mi libro. También sería bueno un enlace de MSDN sobre cómo tratarlo en C #.
Alternativamente, las pautas proporcionadas por los principales influyentes en la ingeniería de software también deberían ser valiosas. ¿Quizás Google / Alphabet tiene una buena guía de estilo que nos enseña cómo lidiar con eso?
Este es solo un ejemplo: en el lenguaje C #, "predeterminado" es una palabra clave reservada. Cuando uso una enumeración, me gustaría nombrar el valor predeterminado "predeterminado" (análogo a las declaraciones "cambiar"), pero no puedo.
(C # distingue entre mayúsculas y minúsculas, y las constantes de enumeración deben escribirse en mayúscula, por lo que "Predeterminado" es la opción obvia aquí, pero supongamos que nuestra guía de estilo actual dicta que todas las constantes de enumeración deben estar en minúsculas).
Podríamos considerar la palabra "defaultus" ", pero esto no se adhiere al Principio de Menos Asombro . También deberíamos considerar "estándar" e "inicial", pero desafortunadamente "predeterminado" es la palabra que transmite exactamente su propósito en esta situación.
clazz
es prácticamente un estándar de facto. Esencialmente es parte de la convención de nomenclatura de la plataforma. Hacer cualquier otra cosa sería una violación de las expectativas de que otros puedan haber leído su código, por lo que solo debe hacerse si es absolutamente necesario.Respuestas:
Para una opción de enumeración, debe usar mayúsculas y minúsculas como
Default
. Como C # distingue entre mayúsculas y minúsculas, no colisionará con la palabra clave reservada. Consulte las Pautas de nomenclatura de .net .Dado que todos los miembros públicos deberían ser mayúsculas y minúsculas en .net, y todos los nombres reservados son minúsculas, realmente no debería encontrar esto, excepto con las variables locales (incluidos los parámetros). Y los locales suelen tener nombres o frases como nombres, por lo que es bastante raro que el nombre más natural colisionaría con una palabra clave. P.ej.
defaultValue
normalmente sería un nombre más natural quedefault
. Entonces, en la práctica, este no es un gran problema.En C # puede usar el
@
prefijo " " para escapar de palabras clave reservadas para que puedan usarse como identificadores (como@default
). Pero esto solo debe usarse si realmente no tiene otra opción, es decir, si está interactuando con una biblioteca de terceros que utiliza palabras clave reservadas como identificador.Por supuesto, otros idiomas tienen diferentes sintaxis y palabras clave y, por lo tanto, diferentes soluciones a este problema.
SQL tiene muchas palabras clave, pero es muy común simplemente escapar de identificadores, como
[Table]
. Algunos incluso lo hacen para todos los identificadores, independientemente de si entran en conflicto con una palabra clave o no. (¡Después de todo, se podría introducir una palabra clave en conflicto en el futuro!)Powershell (y muchos otros lenguajes de script) prefijan todas las variables con un sigilo como $, lo que significa que nunca colisionarán con palabras clave.
Lisp no tiene palabras clave en absoluto, al menos no en el sentido convencional.
Python tiene una convención oficialmente reconocida en PEP-8 :
Algunos lenguajes como Brainfuck o Whitespace evitan la definición de palabras, evitando el problema con elegancia.
En resumen, no hay una respuesta independiente del idioma a su pregunta, ya que depende en gran medida de la sintaxis y las convenciones del idioma específico.
fuente
#define
, pero el operando de la mano derecha siempre se interpretaría como un identificador de mayúsculas y minúsculas. Eso permitiría resolver muchos tipos de conflictos de nomenclatura (incluida, para los idiomas que no distinguen entre mayúsculas y minúsculas, la importación de símbolos que son idénticos, excepto las mayúsculas y minúsculas).Añadiría un guión bajo (predeterminado_)
Pros:
Por qué no me gustan otras soluciones:
Sinónimo:
Anexar / anteponer una palabra:
Cambio de letras (clazz en lugar de clase):
Agregar un número (predeterminado1):
Anexar / anteponer una carta:
Escapar de una palabra clave (@default (c #), `default` (scala))
¿Cuándo no lo usaría?
fuente
klass
una variable dondeclass
es una palabra reservada. Nunca he vistodefawlt
pero es la misma idea. Preferiríadefault_
(y probablementeclass_
si no pisotear cualquier convención establecida al hacerlo)."Predeterminado" probablemente no sea un valor de enumeración útil. Representa un comportamiento que puede cambiar según el contexto donde se usa.
Dicho esto, si su idioma distingue entre mayúsculas y minúsculas, utilice un caso diferente para la palabra. (Predeterminado vs predeterminado)
O mejor aún, haga un esfuerzo adicional para escribir algunas letras más y llamarlo DefaultValue.
fuente
enum ErrorHandlingLevel { Default = 0, ... }
vsenum ErrorHandlingLevel { None = 0, ... }
. En el segundo ejemplo, el hecho de queNone
es el valor predeterminado puede darse a conocer estableciendo el valor de enumeración en 0, utilizando xmldoc o explícitamente en el código. Obtiene el beneficio adicional de saber lo que significa cuando un objeto estáErrorHandlingLevel
configuradoNone
. Compare eso con la inspección de un objeto con elErrorHandlingLevel
valor predeterminado.Recomiendo encarecidamente NO cambiar la convención de nomenclatura localmente (o agregar caracteres sin sentido) con el propósito de desambiguación (como se ha sugerido en otras publicaciones). Crea confusión si la intención no es obvia y puede plantear preguntas sobre por qué se llamó así. Se puede resolver sin ella.
En todos los casos, debería ser posible usar una palabra con significado sinónimo o hacer que el nombre sea más específico (o incluso detallado). Incluso cuando puede introducir la repetición de contexto, puede ser una mejor solución.
Por ejemplo, supongamos que tiene una enumeración
Mode
que debería exponer un valor predeterminado como en su caso. Nombrarlodefault_mode
puede no parecer el mejor debido a la repetición, pero evita la ambigüedad al transmitir el significado deseado.fuente
Tendrá que usar palabras diferentes o modificadas, eso está claro.
Entonces esto generalmente significa
Otro factor para determinar es cómo unir las múltiples palabras y las opciones suelen ser
Mi sugerencia es usar un prefijo o sufijo y guiones bajos / guiones, por ejemplo
local_default
tiene la ventaja de que todos los locales están alineados y, por lo tanto, se destacan rápidamente, pero la desventaja de que siempre debe leer la segunda parte para obtener el nombre único.default_local
tiene la ventaja inversa de que el nombre único de la variable se ve rápidamente, pero los locales no siempre se agrupan visualmente tan fácilmente.Un par de ejemplos para el enfoque de dominio_específico que he visto son: en
vehicle_model
lugar demodel
cuál era una palabra reservada;room_table
para una tabla SQL comotable
es una palabra reservada.Las otras dos opciones que he visto usar en idiomas o scripts son:
fuente
words_with_underscores-or-dashes
referido con dos nombres:snake_case
cuando se usa el guión bajo ykebab-case
cuando se usa el guión. Encontré este último divertido.Obviamente, haga lo que pueda para evitar esa situación. He estado escribiendo software desde fines de la década de 1970 y las veces que realmente tuve que esquivar una palabra reservada son menos de diez, probablemente más cerca de cinco.
Hay muchas cosas que puede hacer, como duplicar la primera o la última letra (
reservedd
) o agregar un guión bajo o al final (reserved_
). Lo apropiado dependerá en gran medida de las convenciones que utilice el lenguaje que está escribiendo, especialmente con respecto a los guiones bajos iniciales o finales. También trate de no hacer cosas con un caso que los humanos puedan leer mal (por ejemplo, usarReserved
cuando difiere dereserved
).Una vez que haya elegido algo, póngalo en sus pautas de codificación, asegúrese de que las personas lo sepan y de que se use de manera consistente. Incluso voy tan lejos como para agregar un comentario recordatorio para que los lectores no piensen que es un error tipográfico y saben que lo volverán a ver:
fuente
classs
?)En C #, puede anteponer el nombre de un identificador con @ . Esto le dice al compilador que trate el nombre como el nombre de un identificador y no como una posible palabra clave.
fuente