pascalcase name examples naming-conventions

naming conventions - name - Gramaticamente correctos identificadores de doble sustantivo, versiones plurales



naming convention examples (8)

¿Cuáles son las reglas generales que debo seguir?

  1. Hazlo claro , tanto para pensadores visuales como auditivos.
  2. Hazlo específico pero preciso .
  3. Haga que pase la prueba de " sala llena de gente" o "llamada de emergencia" .

Para ilustrar con el ejemplo de SetsUnion:

  • "SetsUnion" está a la derecha; Es fácil confundirlo con un error tipográfico y hablarlo (incluso en tu cabeza) lo confundirá con "Set''s Union" (o peor).

  • El plural también está implícito, por lo que la segunda ''s'' es redundante. SetUnion es mejor pero sigue siendo ambiguo.

  • UnionOfSets es más claro y debería ser el estándar mínimo.

  • Pero todo esto, hasta ahora, es inútilmente vago (a menos que esté trabajando con teoría matemática pura).
    El término realmente debería ser específico . Por ejemplo, "Red cars", "Programmers que pasaron demasiado tiempo en esoterica", etc.
    Estas son todas las uniones de conjuntos, pero te dicen algo útil. ;-)

.
Finalmente, Phil Factor tenía el derecho de hacerlo . Parafrasear:

¿Se puede gritar un (término) a través de una sala abarrotada y hacer que un oyente lo introduzca, y que lo utilice correctamente?

Intente gritar "SetsUnion" o incluso "UnionOfSets" en un bar irlandés repleto. ;-)

Considere los compuestos de dos nombres, que en inglés natural aparecerían con mayor frecuencia en la forma " nombre de nombre ", por ejemplo, "dirección de la luz", "salida de un filtro". Cuando programamos, normalmente escribimos "LightDirection" y "FilterOutput".

Ahora, tengo un problema con los sustantivos plurales. Hay dos casos:

1) singular de plural

por ejemplo, "unión de (dos) conjuntos", "intersección de (dos) segmentos"

¿Qué es correcto, SetUnion y SegmentIntersection o SetsUnion y SegmentsIntersection?

2) plural de plural

Hay dos subcasas:

(a) Muchos elementos, cada uno con muchos elementos relacionados, por ejemplo, "salidas de filtros"

(b) Muchos elementos, cada uno con un único elemento relacionado, por ejemplo, "direcciones de vectores"

¿Debo usar FilterOutputs y VectorDirections o FiltersOutputs y VectorsDirections?

Sospecho que correcta es la primera versión (FilterOutupts, VectorDirections), pero creo que puede llevar a ambigüedades, por ejemplo

  • FilterOutputs: ¿muchas salidas de un solo filtro o muchas salidas de muchos filtros?
  • LineSegmentProjections: ¿proyecciones de muchos segmentos o muchas proyecciones de un solo segmento?

¿Cuáles son las reglas generales que debo seguir?


¿Qué pasa con la unión ()?

Además, la "unión de conjuntos" se convierte en "unión de conjuntos" (la unión de los dos conjuntos es ...); Estoy seguro de que no soy la única persona que está de acuerdo con CamelCase pero no con CamelsCaseMinusApostrophes. Si necesita un apóstrofe para que tenga sentido, no lo use. Set.Union () se lee exactamente como "unión de set (s)".

Las matemáticas también dirán "la unión (serie) de A y B", o raramente "unión (serie) de A y B". "La unión de los sets de A y B" no tiene sentido!

La mayoría de las personas también verán Vector[] vectors y Directions[] vectorDirections y asumirán que los vectores [i] corresponden a vectorDirections [i]. Si las cosas realmente se vuelven ambiguas, uso algo como vector_by_index y vectorDirection_by_index. Luego puede tener Map<Filter,Output> output_by_filter o Map<Filter,Output[]> outputs_by_filter , lo que hace que sea muy obvio cuál es la clave (esto es muy importante en Objective-C, donde no es obvio qué tipo de teclas o los valores son).

Si realmente quieres, puedes agregar una s y obtener vectors_by_index, pero luego la consistencia te da el tonto outputss_by_filter.

Lo correcto es, por supuesto, algo así como struct FilterState {Filter; Salida [] salidas; }; FilterState [] filterStates ;.


1) Yo usaría SetUnion y SegmentIntersection porque creo que en este caso la pluralidad está implícita de todos modos y se ve mejor de esa manera.

2) de nuevo, usaría FilterOutputs y VectorDirections, por la misma razón. siempre puede usar MultipleFilterOutputs si desea ser más específico.

Pero en última instancia, es totalmente de su preferencia personal.


A menos que se vea afectado por un sistema convencional (ruby on rails, cakePHP, etc.), ¿por qué no usa OutputsOfFilters, UnionOfSets, etc.? Puede que no sean convencionales, pero pueden ser más claros.

Por ejemplo, es bastante claro que ProjectionOfLineSegments y ProjectionsOfLineSegment son cosas diferentes o incluso ProjectionsOfLineSegments ...


Creo que, si bien las convenciones generales de nomenclatura y la coherencia son importantes, pero en un algoritmo muy estricto / complicado, la claridad debería triunfar sobre las convenciones. Si ayuda, use veryLongAndDescriptiveIdentifiers.


El uso de formas plurales de sustantivos puede hacer que sean más difíciles de leer.

Cuando tiene una serie de cosas, generalmente se almacenan en una estructura de datos: una matriz, una lista, un mapa, un conjunto, etc., que generalmente se denomina colección o tipo de datos abstractos . La interfaz para una colección de elementos suele ser parte del entorno de programación (por ejemplo, Colecciones en java y .net, STL en C ++) y los desarrolladores entienden que involucra cantidades de elementos.

Puede evitar la pluralización de sus nombres y hacer que el hecho de que se trate con cantidades múltiples sea explícito, e indicar cómo se accede a ellos incorporando el nombre de la colección. Por ejemplo,

  • VectorDirectionList: se enumeran los vectores y sus direcciones, por ejemplo, algún tipo de tipo de par. Funciona particularmente bien si tiene una Dirección de vectores, combinando un Vector y una Dirección.
  • VectorDirectionMap: si las direcciones del vector se asignan desde el vector.

Debido a que es un tipo de colección, se entiende que tratar con múltiples objetos es endémico de un tipo de colección. Luego lo coloca en la misma clase que SetUnion: una unión siempre involucra al menos 2 conjuntos, y una VectorDirectionList deja claro que puede haber más de una VectorDirection.

Estoy de acuerdo en evitar los homónimos en los que la palabra tiene más de una clase de palabra, por ejemplo, Filter, (y en realidad, Set, aunque en mi opinión Set no se usaría realmente en un nombre de clase como verbo, por lo que lo interpreto como un nombre). ) Originalmente escribí esto usando FilterOutput como ejemplo, pero no se leía bien. El uso de un compuesto para el filtro puede ayudar a desconcertar, por ejemplo, ImageFilterOutputs (o aplicando mi propio acceso, esto sería ImageFilterOutputList).

Evitar formas plurales con nombres de clase parece natural cuando se considera que una instancia de una clase es siempre un elemento: "una instancia". Si usamos un nombre en plural, obtenemos una discrepancia (una instancia que intenta dar a entender que son varias cosas), en sí misma es una sola cosa, incluso si hace referencia a muchas otras cosas. La denominación de la colección anterior se basa en esto: tiene una instancia que es una lista, un mapa, etc., por lo que no hay discrepancias.

Supongo que está hablando de construcciones de lenguaje de programación, aunque el mismo pensamiento se aplica a las tablas / vistas. Se entiende que estos implican cantidades de artículos y, por lo tanto, los nombres de las tablas suelen ser singulares (Cliente, Pedido, Artículo) aunque almacenan varias filas. Las tablas de mapeo de muchos a muchos son generalmente compuestos de las entidades que están relacionadas, por ejemplo, relacionando órdenes con artículos - Artículo de pedido. En mi experiencia, usar plurales para nombres de tablas hace que el SQL sea difícil de leer.

En resumen, evitaría los plurales ya que dificultan la lectura. Seguro que habrá casos en los que son inevitables, donde el uso de la forma plural es más legible que crear un nombre enorme de entidades y colecciones anidadas, pero estos son la excepción a la regla.


Hay un malentendido gramatical detrás de esta pregunta. Cuando giramos una frase de forma:

1. X of Y

dentro

2. Y X

la Y cambia el rol gramatical de un sustantivo en el posesivo (1) a un adjetivo en el atributivo (2). Entonces, mientras uno puede pluralizar tanto X como Y en (1), uno solo puede pluralizar X en (2), porque Y en (2) es un adjetivo, y los adjetivos no tienen un número gramatical .

Por lo tanto, por ejemplo, SetsUnion no está de acuerdo con el inglés. Usted es libre de usarlo si le conviene, pero está presentando indiscutibilidad y le aconsejo que no lo haga.

Posdata

En particular, considere otras dos construcciones posesivas, primero la construcción pasada de moda usando el pronombre posesivo "su", singular:

3a. Y, its X

el equivalente en plural:

4a. Ys, their X

y sus contracciones, con 4b mucho menos común que 3b:

3b. Y''s X 4b. Ys'' X

Aquí, SetsUnion sugiere que es una representación del tipo posesivo singular (3) Set''s Union (= Set, its Union ), donde se pretende comunicar el plural de los Sets, their Union posesivos (4) Sets, their Union (contraída a la Sets'' Union menos común) Sets'' Union ).

Así que es activamente engañoso.


Sugeriría singular para la primera palabra: SetUnion , VectorDirections , etc.

Haga una búsqueda rápida de clase en su IDE, para: Cadenas *, Conjuntos *, Vectores *, Colecciones *

De todos modos, sea lo que sea que elijas, sé coherente en toda la aplicación.