programming languages language programming-languages naming-conventions special-characters method-names

programming-languages - languages - is css a programming language



Uso de caracteres especiales en nombres de funciones. (4)

La indicación previa de "@" a un nombre de método (o cualquier identificador) en C # le permite nombrar ese método con una palabra clave normalmente reservada.

void null() {} // Invalid token ''null'' in class, struct, or interface member declaration void @null() // compiles

No hagas esto Es principalmente para código generado por máquina, como conjuntos de datos. Página de MSDN sobre el tema.

En Ruby, una convención estándar es usar un signo de interrogación al final de un nombre de método para indicar que el método devuelve un resultado booleano:

[].empty? #=> true

Otra convención estándar es terminar un nombre de método con un signo de exclamación si el método es destructivo (es decir, modifica los datos originales):

mylist.sort! # sort mylist in-place

Recientemente he visto estas mismas convenciones utilizadas en el esquema. Lo que me hace preguntarme, ¿qué otros idiomas usan / apoyan esta convención? ¿Hay otros caracteres especiales que se usan comúnmente para nombrar por estos u otros idiomas?


La respuesta es, por supuesto, específica del idioma (y la cultura del lenguaje).

Por ejemplo, dependiendo del idioma, todos los siguientes son apropiados: empty-p, empty ?, empty, is_empty o isEmpty. (Estos ejemplos son, por supuesto, no incluidos).

Los ejemplos en la pregunta original provienen de Ruby, ¿de dónde se usa? y! para finalizar los nombres de los métodos se aceptan, cuando corresponda. Esta aceptación proviene de 1) fácilmente accesible como terminadores de símbolos en la gramática 2) uso de? y! En la biblioteca estándar. Sin embargo, hay que tener en cuenta que! no se usa universalmente para implicar "efectos secundarios" y generalmente solo está presente en formas alternativas : guardar / guardar, ordenar / ordenar, etc. Hay un número abrumador de métodos que realizan efectos secundarios que no tienen el efecto! prefijo.

Personalmente, si estuviera diseñando un lenguaje, lo permitiría,! y ''para que sean válidos los caracteres finales sin comillas en los nombres de símbolos. A pesar de que algunos idiomas permiten el escape completo de símbolos, como Scala, estos símbolos generalmente se evitan porque es un dolor tener que citarlos para su uso.

// in Scala, esp. with Java-compat, the last form is generally used although // the first two are perfectly valid -- do what makes sense in the language foo.`empty?` foo.empty_? foo.isEmpty

Cuando en Roma...

  • Scala - `empty?` O empty_? (no es común)
  • C / C ++ / JS / Java / Python / Perl - ¿no? o! en identificadores; JS / Java permite $; $ es un sigilo en Perl
  • C / C ++ / Perl / JS: ¿Manos arriba en el aire?
  • C # - IsEmpty (método o propiedad) o Vacío (propiedad)
  • Python - is_empty o isEmpty por Guido-guide (aunque usualmente el protocolo __len__: if not len(foo): "empty!" )
  • Java - isEmpty por guía de idioma
  • Ruby - especial perdiendo? y! (citando?)
  • JS: acceso de identificador indirecto: obj ["¿vacío?"] (No es común para esto)
  • "Lisp" (convencional): empty-p para predicado; variaciones en el lector / cotización

Me alegra ver las correcciones y / o adiciones, es solo una gota en un cubo.


No soy un gran fanático de los caracteres especiales en los nombres de las funciones, pero luego también moriré, con una barra de apio húmedo para aliviar el dolor, cualquiera que encuentre poniendo espacios en los nombres de los archivos :-)

El ? la variante se puede hacer fácilmente con algo como isEmpty() y el ! variante con sortInPlace() .

El inglés es un idioma muy adaptable, incluso sin la puntuación.

En cualquier caso, mis idiomas de elección (C y Java) usan puntuación para todo tipo de cosas. Tenerlos en identificadores también haría del análisis léxico una pesadilla.


Si cuenta Javascript como un idioma, muchos marcos parecen utilizar el carácter ''$'' para indicar "Selector"; Por ejemplo, uno podría usar $("id-of-some-item") en Prototype.js o $("#id-of-some-item") en jQuery para seleccionar una etiqueta que se escribió <div id="id-of-some-item"> . El uso de estas funciones de selección es en realidad bastante complicado y poderoso (si está interesado, consulte la documentación de respaldo en prototypejs.org y jquery.com), pero se reducen a hacer algo que considero semánticamente similar a lo que ha hecho. indicado.

Nuevamente, esto es asumiendo que cuenta Javascript como un idioma.