Comentarios
mucho más rápido que ' IThinkTheyAreBothAboutTheSame '. Estoy ' bastante seguro de que se puede probar científicamente. 🙂
@John Isaacks: Me ' me entristece informar (como proponente del caso subyacente) que un estudio concluyó que " la carcasa de camello conduce a una mayor precisión entre todos los sujetos, independientemente del entrenamiento " .
IWonderWhetherReadingEnglishWrittenInOneStyleVersusAnotherMakesMuchDifference. InTheEnd, IFindThatNeitherIsVeryGoodAtBeingEasyToRead. Se_atornilla_horriblemente_con_longitud_de_línea_y_hace_incluso_lo_lo_más simple_complicado. Me_wonder_whether_there_be_language_support_in_the_future_for_quoted_variable_names. " Esto tendría mucho más sentido en mi opinión que camelCase o underscore_separators ".
Respuesta
Estoy de acuerdo en que depende del idioma que estés usando hasta cierto punto; el código tiende a verse más ordenado cuando los nombres de los símbolos siguen el mismo formato regimen como las bibliotecas de valores y las incorporaciones del lenguaje.
Pero cuando hay una opción, prefiero los guiones bajos a las mayúsculas y minúsculas, por una simple razón: encuentro que ese estilo es más fácil de leer. Aquí «s un ejemplo: ¿cuál te parece más legible? Esto:
aRatherLongSymbolName
o esto:
a_rather_long_symbol_name
Encuentro la versión de subrayado mucho más fácil leer. Mi cerebro puede ignorar los guiones bajos mucho más fácilmente de lo que puede detectar los límites de minúsculas / mayúsculas en caso de camello, especialmente cuando los límites están entre glifos que se parecen a otros glifos del caso opuesto, o números (I/l
, O/0
, t/I
, etc.). Por ejemplo, esta variable booleana almacena un valor que indica si se ha construido un Igloo con el permiso de planificación adecuado (sin duda, un caso de uso común para todos nosotros):
isIllicitIgloo
Encuentro esta versión mucho mucho más fácil de leer:
is_illicit_igloo
Quizás incluso peor que un nombre de símbolo difícil de leer es un nombre de símbolo fácil de leer mal. Los buenos nombres de símbolos se autodocumentan, lo que para mí significa que debería poder leerlos y comprender su significado de un vistazo. (Estoy seguro de que todos leemos los códigos impresos en la cama por placer, pero de vez en cuando también nos apresuramos). A menudo encuentro con los nombres de los símbolos en mayúsculas y minúsculas que es fácil leerlos mal y tener una impresión equivocada. de la semántica de un símbolo.
Comentarios
Respuesta
Creo que debería utilizar la convención de nomenclatura adoptada por su plataforma. underscore_case se verá extraño en el código C #, como camelCase en Ruby =)
Comentarios
Respuesta
Honestamente, no importa si todos los miembros del equipo usan El mismo esquema. Lo más probable es que uno u otro sea más natural para usted, aunque la importancia real es la legibilidad del código a largo plazo y luego es crucial que todos se adhieran a las mismas reglas de nomenclatura.
Comentarios
Respuesta
Basado en la respuesta de John Isaacks:
«Sinceramente, el código es más fácil de leer» ¿Opinión o hecho?
Decidí investigar un poco y encontré este documento . ¿Qué tiene que decir la ciencia sobre el tema?
- La carcasa de camello tiene una mayor probabilidad de corrección que guiones bajos. (las probabilidades son un 51,5% más altas)
- En promedio, el caso de camello tardó 0,42 segundos más , que es Un 13,5% más.
- El entrenamiento no tiene un impacto estadísticamente significativo en cómo el estilo influye en la corrección.
- Aquellos con más entrenamiento fueron más rápidos en identificadores en el estilo de caso de camello.
- Entrenar en un estilo, afecta negativamente el tiempo de búsqueda para otros estilos.
En mi publicación de blog sobre el tema, reviso el artículo científico y llegar a la siguiente conclusión.
Solo la lentitud del caso camel ( 2) es realmente relevante para la programación, descartando los otros puntos como irrelevantes debido a los IDE modernos y la mayoría de los usuarios de camelCase en el estudio. La discusión (junto con una encuesta) se puede encontrar en la publicación del blog.
Tengo curiosidad por saber cómo este artículo podría cambiar la opinión de uno. 🙂
Comentarios
Respuesta
Copia a los tipos más inteligentes
En el caso de los lenguajes de programación, copiar el estilo del desarrollador del lenguaje.
Por ejemplo, codifico C exactamente como se hace en K & R.
Luego cuando alguien intenta iniciar una codificación aburrida estilo de conversación, puedo decirles «mencione eso con Dennis Ritche y háganme saber lo que dice».
Comentarios
Answer
En general, prefiero camelCase. Sin embargo, eso se debe a que la mayor parte de mi carrera he trabajado en lenguajes y entornos donde las guías de estilo normalmente recomiendan camelCase. (Java, ECMAScript, C ++). Usted, siendo una persona de PHP, probablemente tenga la preferencia opuesta.
Dicho esto, cuando va más allá de tresOrFourWords, o si usa iniciales comoXmlForExample, deja de ser tan legible.
Es por eso que emacs nos da el modo de gafas.
Comentarios
Responder
camelCase
Este es uno de los pocos lugares en los que siempre elegiré» capacidad de escritura «en lugar de legibilidad. CamelCase es más fácil de escribir, y ser más amable con mis dedos gana sobre una ligera mejora de legibilidad para mí.
asumiendo, por supuesto, que el proyecto no se basa en una base de código existente con un estándar diferente.
Comentarios
- No ' no estoy de acuerdo con eso, usted escribe el código solo una vez, pero tiene que leerlo varias veces después
Respuesta
Es una pregunta interesante, he pensado en esto muchas veces. Pero creo que no hay una respuesta definitiva.
Seguir las convenciones «culturales» es una buena elección. «Cultural» en este caso significa convenciones establecidas en el equipo / empresa y básicamente llevan las convenciones del idioma / plataforma también. Ayuda a otros a leer / usar su código fácilmente y no requiere esfuerzos ni tiempo adicionales para entender su código.
A veces es interesante romper las notaciones aceptadas. Uno de mis pequeños proyectos (en Python) Usé underscored_names
para funciones de utilidad / métodos «protegidos», y methodNames
de estilo Java para métodos. Mi equipo estaba contento con él 🙂
Respuesta
Depende del lenguaje de programación.
Considero usar el caso en el mismo barco de usar o no la notación húngara:
- Python: subrayado_case, sin notación húngara
- C ++: camelCase, notación húngara
Comentarios
Respuesta
¡Ambos!
Hago mucho desarrollo en CakePHP y uso CamelCase
o $underscored_vars
, de la siguiente manera (incluso fuera de los proyectos CakePHP):
- nombres de archivo –
/lowercased_underscored.php
Típico, pero vale la pena mencionarlo.
- clases –
class CamelCase extends ParentObject
. Tenga en cuenta que, al usar CamelCase
, el carácter inicial no está en minúsculas. Me parece que camelCase
parece realmente raro.
- variables –
$are_variables_underscored === TRUE;
- variables que contienen instancias –
$CamelCase = new CamelCase();
- claves de matriz –
$collection["underscored_keys"];
- constantes – creo todos pueden estar de acuerdo en que las constantes deben ser
ALL_CAPS_AND_UNDERSCORED
.
- métodos –
$CamelCase->foo_method_underscored();
- métodos estáticos –
CamelCase::just_like_regular_methods();
Comentarios
Respuesta
Yo personalmente prefiero underscore_case
porque lo encuentro más legible, pero estoy de acuerdo con los otros respondedores que señalan que la coherencia con el código base existente es mucho más importante.
Sin embargo, tengo un contraejemplo para aquellos que dicen » siga la convención de su lenguaje y sus bibliotecas «.
En el pasado escribimos código C en Windows usando underscore_case
, y lo llamábamos PascalCase
Funciones de Win32:
if (one_of_our_conditions_is_true()) { call_one_of_our_functions(); CallSystemFunction(); }
La distinción visual entre los nombres de nuestras funciones y los nombres de las funciones de Microsoft fue una ayuda más que un obstáculo, ya que mostró claramente cuando el código iba a «tierra del sistema».
Además, pude cambiar las reglas de resaltado de sintaxis de mi editor para mostrarlas en diferentes colores, lo que dio más pistas visuales al intentar entender secciones de código desconocidas (o incluso el mío).
Respuesta
Realmente me gustan los guiones-simplemente-normales-como-son-fáciles-de-escribir-y-fáciles de Dylan -to-read.
Me gusta
result-code := write-buffer(file-stream, some-string)
Pero supongo que como este lenguaje es bastante oscuro, esto es algo fuera de tema. .. 🙁
Comentarios
Responder
Me enseñaron a usar camelCase en la universidad. He usado algunas convenciones diferentes en los últimos años, pero prefiero camelCase sobre cualquier otra cosa. Creo que recuerdo haber leído en alguna parte que camelCase es en realidad el más fácil de leer y comprender.
Comentarios
Responder
Como la mayoría de la gente ha mencionado: utilice el estándar existente. Si es un proyecto nuevo, utilice el estándar para el lenguaje y los marcos que utilizará.
Y no se confunda, no se trata de legibilidad (que es subjetiva), se trata de ser coherente y profesional. Cualquiera que haya trabajado en una base de código con numerosos «estándares» lo entenderá.
Respuesta
A veces uso una combinación: nombre_función_módulo. Todas las funciones (no estáticas) de mis módulos comienzan con una abreviatura de módulo.
Por ejemplo, una función para enviar el contenido de un búfer en el bus I2C:
i2c_BufferSend()
La alternativa i2c_buffer_send
no muestra una separación lo suficientemente grande entre el prefijo y el nombre de la función. i2cBufferSend
se mezcla en el prefijo demasiado (hay bastantes funciones I2C en este módulo).
i2c_Buffer_send
podría haber sido una alternativa, sin embargo.
Mi respuesta es que te adaptas a lo que funciona mejor para tu proyecto (tu lenguaje, tu arquitectura SW, …), y quería señalar que mezclar estos estilos podría ser útil.
myGeneralOpinionIsThatNamesAreMuchHarderToReadInCamelCase. Yo_respeto_el_hecho_que_alguno_podría_pensar_otro_convenio_pero_yo_do_no_really_entiende_porqué.
Comentarios
Responder
Personalmente , Prefiero camelCase, pero en algunas fuentes creo que los guiones bajos son más fáciles de leer.
Sugeriría que si necesita usar prefijos para diferenciar conjuntos de variables, debe usar un lenguaje que le permita crear espacios de nombres u objetos o algo que contenga esa información.
myName = 7 bobsName = 8 // :( me.name = 7 bob.name = 8 // :D
Asimismo, si necesita diferenciar tipos, ¿por qué no utilizar un lenguaje que los permita?
var intThingy = 7; // :( int thingy = 7; // :)
Una vez que lo tengas claro, y no estés usando el nombre como metadatos, no tendrás suficientes nombres largos para importa mucho si prefiere esa pulsación de tecla adicional o no.
Comentarios
Respuesta
Al principio, estoy de acuerdo con dafmetal . Es de suma importancia que no mezcle diferentes estilos de programación. Hacer esto en uno y el mismo archivo es lo peor que puede hacer en mi humilde opinión. En diferentes archivos, distrae, pero no es fatal.
Lo siguiente que debe hacer es nombrar reglas que sean populares para el lenguaje en el que está escribiendo. Mi código C ++ para instnace, se ve diferente a algo para Python obviamente (PEP8 es una buena guía aquí)
También puede usar diferentes convenciones de nomenclatura para referirse a diferentes cosas, por mucho que probablemente use UPPER_CASE para constantes (esto solo se aplica a ciertas idiomas, por supuesto), puede usar this_style para nombres de variables locales, mientras que usa camelCase para variables de instancia / miembro. Sin embargo, es posible que esto no sea necesario cuando tiene cosas como self
o this
.
Actualización
Tomemos un caso en el que la plataforma Foo no recomienda ninguna convención de nomenclatura y es decisión del líder del equipo elegir una. Usted es el líder del equipo, ¿por qué elegiría camelCase o por qué underscore_case?
Realmente no hay ventajas para uno sobre el otro. Este asunto es muy subjetivo y una vez acordado, no hará ninguna diferencia. Siempre existen estas guerras religuas sobre estas pequeñas cosas. Pero una vez que se ha adaptado a cualquiera de los dos, las discusiones parecen ser completamente superfluas.
Para citar a Alex Martelli sobre un asunto muy similar:
Claro, me canso, en Ruby, de escribir el tonto «final» al final de cada bloque (en lugar de simplemente anular la sangría), pero luego puedo evitar escribir el igualmente tonto «:» que Python requiere en el inicio de cada bloque, por lo que es casi un lavado :-). Otras diferencias de sintaxis como «@foo» versus «self.foo», o el mayor significado del caso en Ruby vs Python, son en realidad igual de irrelevantes para mí.
Otros sin duda basan su elección de lenguajes de programación en estos temas, y generan los debates más candentes, pero para mí eso es solo un ejemplo de una de las leyes de Parkinson en acción ( la cantidad en debate sobre un tema es inversamente proporcional a la importancia real del tema ).
Fuente
Si es el líder del equipo, elija uno. Dado que uno no tiene ninguna ventaja sobre el otro, puede lanzar los dados o elegir lo que más le guste.
Respuesta
Leí hace varios años que los programadores que no hablan inglés como primer idioma tienden a encontrar el subrayado más fácil de entender que el caso camel, pero no puedo encontrar la referencia y no tengo idea de si es cierto.
Respuesta
Para los lenguajes de programación que he usado, como Java, Python, C ++, he adoptado un formato claro:
- ClassNamesArePascalCase
- methodNamesAreCamalCase
- variable_names_are_underscore
- CONSTANT_VARIABLES_ARE_CAPITAL_VARIABLES
Esto me permite discernir inmediatamente con qué estoy tratando. He descubierto que es útil mantenerlo para mí, y debería ser fácil de seguir para alguien más que lea el código. Creo que, como otros mencionaron, la coherencia es lo más importante. Así que encuentro mi formato para ser lo suficientemente simple de mantener, al tiempo que proporciona distinciones claras entre los tipos de nombres. Podría imaginar interface_Names_Are_Like_This y Abstract_Classes_Are_Like_This como posibles extensiones, pero parece ser más complicado de seguir y tal vez no tan útil como una distinción.
También me ha resultado útil ser estricto y nombrar cosas en PascalCase como un analizador HTML como HtmlParser en lugar de HTMLParser o HTMLparser. Porque creo que es más fácil recordar la regla estricta y mantiene los límites de las palabras más claros (desafortunadamente requiere errores ortográficos como HTML o SQL). De manera similar con camelCase, htmlParserMethod en lugar de HTMLParserMethod o HTMLparserMethod.
ACTUALIZACIÓN :
Desde entonces he encontrado utilidad para expandir estas reglas para incluir variables privadas.- _private_variable_names_are_prefixed_with_an_undercore – _PRIVATE_CONSTANT_VARIABLES_ARE_PREFIXED_WITH_AN_UNDERSCORE
En Java, esto significa que los campos privados están, por definición, en un espacio de nombres diferente que las variables locales, lo que significa que puede omitir el iv id7
en «014 campos. Otros formatos He visto prefijos con «m
«, pero esos formatos también usan camelCase para los nombres de las variables. Esto también me permite hacer una distinción entre los campos a los que solo se debe acceder internamente por la clase (y haciéndolo super claro cuando «sucede fuera de la clase object._field_x
se destaca).
Si fuera por mí, no haría cumplir ni insinuaría el uso de cualquier estilo en particular porque, como programadores, podríamos leer un símbolo IfItIsInCamelCase o in_underscore_space o incluso in_SomeOtherStyle y entender lo que significa. Tener que pasar una pequeña cantidad de tiempo analizando el símbolo no es una gran sobrecarga en el esquema general de las cosas.
Ahora, el argumento principal para una convención, supongo que es que usted sabe de antemano cuál es el formato de una función / nombre de variable y no necesita buscarlo, es LoadXMLFile, loadXMLFile , LoadXmlFi le, load_xml_file? Ahora, contrarrestaría ese argumento diciendo «¡Obtenga un IDE que admita la finalización automática de estilo intellisense!» (aunque no siempre es posible).
Al final, sin embargo, realmente no importa qué estilo uses porque al compilador / intérprete realmente no le importa. Lo importante es que el nombre sea útil:
NumberOfPrisonersReleasedByAccident manufacturer_name distance_EarthToMoon
Tres estilos diferentes, pero sabes exactamente lo que hace cada uno.
Comentarios