37

¿Alguien sabe cuál es la longitud máxima del nombre de un método en el lenguaje de programación de su elección? Iba a hacer de esto una pregunta específica para C#, pero creo que sería bueno saberlo a través del espectro.Nombre máximo del método Longitud

¿Cuáles son los factores que intervienen, así:

  • ¿El límite de especificación del lenguaje esto?
  • ¿A qué lo limita el compilador?
    • ¿Es diferente en las máquinas de 32 bits frente a las de 64 bits?
+7

Me gustaría saber por qué necesita la respuesta a este – Tim

+6

Lol, la curiosidad en su mayoría. Un colega y yo estábamos escribiendo algunos métodos de prueba de la unidad y uno era particularmente detallado (muy por debajo de cualquier límite), pero nos intrigó sobre cuál era la longitud máxima permitida. – Josh

+0

OK - solo comprobando - Me imaginé que era algo así. La única vez que me encontré con algo como esto fueron los estúpidos mensajes de advertencia en VC6 para compilaciones de depuración que tenían STL: los nombres de los símbolos tenían más de 256 caracteres o algo así, por lo que se truncarían. – Tim

Respuesta

32

para C# no creo que hay un límite duro especificada. (La sección 2.4.2 de la especificación C# 5 no da un límite, por ejemplo). Roslyn v2.2.0.61624 parece tener un límite de 1024 caracteres; esto está más allá de los límites de la legibilidad e incluso de un nombre sensible generado por la máquina.

para Java, section 3.8 of the spec estados:

Un identificador es una secuencia de longitud ilimitada de letras Java y Java dígitos, el primero de los cuales debe ser una letra Java .

+0

Su respuesta parece contradecir las respuestas de Kirill Osenkov y DLeh del 511. Sería bueno si tuviera una referencia para su reclamo de C#, ya que creo que está equivocado aquí ... –

+0

@SerjSagan: Acabo de intentarlo y es más grande que 511, aunque hay * es * un límite. Yo diría que aún es más grande que los límites de legibilidad y nombres sensibles generados por máquina. Voy a editar con el límite preciso en este momento ... –

18

PHP parece estar limitado solo por el límite de memoria del guión.

Con 128Mb pude crear una clase (y método) con 4 millones de caracteres.

<?php 
ini_set('memory_limit', '128M'); 
$i = 1024 * 1024; 

while ($i < 10000000) 
{ 
    $className = str_repeat('i', $i); 
    eval("class $className { public function $className() { echo '$i<br>'; } }"); 
    new $className(); 
    $i *= 2; 
} 

?> 
+1

¡Eso es locura! – Josh

3

Los nombres de los símbolos de Common Lisp son cadenas; las cadenas tienen un límite de longitud de array-dimension-limit

El valor de array-dimension-limit es un entero positivo que es el límite superior exclusivo en cada dimensión individual de una matriz. Esta cota depende de la aplicación, pero no será menor que 1024. (Los ejecutores se les anima a hacer que este límite tan grande como sea posible sin sacrificar el rendimiento.)

En la práctica esto puede ser bastante grande

Welcome to Clozure Common Lisp Version 1.3-dev-r11583M-trunk (DarwinX8664)! 
? array-dimension-limit 
72057594037927936 
? 

Welcome to Clozure Common Lisp Version 1.3-dev-r11583M-trunk (DarwinX8632)! 
? array-dimension-limit 
16777216 
? 

Esta respuesta ignora el nombre del paquete del nombre del método; esto podría duplicar el largo.

0

En D No sé si este es el caso, pero sospecho que es algo loco como> 100MB. Podría ser una cosa que no se recuerda. Esto se basa en saber que yo y otras personas hemos encontrado una limitación de formato de archivo de objeto de aproximadamente 11 kB para los nombres de símbolos y que esto se ha corregido.

0

En Java, creo que no se da un límite de longitud. See this from the online Sun Java Tutorial:

Los nombres de las variables distinguen mayúsculas de minúsculas. El nombre de una variable puede ser cualquier identificador legal: una secuencia de longitud ilimitada de letras y dígitos Unicode, que comienza con una letra ...

Al igual que los anteriores, supongo que la longitud depende de la memoria disponible.

4

en C# tiene 511 caracteres de longitud.

+2

El IDE puede imponer algunos límites en las líneas, pero la especificación C# no impone ningún límite. – Josh

+3

El compilador, no el IDE. El IDE coloreará solo los primeros 511 caracteres del nombre y mantendrá el resto en negro. –

12

C# aplicación de Microsoft es 511, la aplicación VB.NET es 1023.

Visual Studio sólo colorear el primer 511 (1023 para VB) caracteres del identificador y mantener el resto negro.

+0

Su respuesta parece contradecir la respuesta de John Skeet. Sería bueno si tuviera una referencia para su reclamo de C# de 511 –

12

que acabo de hacer una prueba en C# Visual Studio 2010 (x64): hice un identificador:

int a123456789a123...; 

y repetidas. Con 512 caracteres, VS me da el error "Identificador demasiado largo". 511 está bien sin embargo. (Recuento de cuadros carácter en Word.)

Otro ejemplo:

int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511; 
+1

. De hecho, terminé de leerlo. Me siento mal por mi empleador. – Boyang

+0

Murió leyéndolo –

0

Interesante! En Java, como otros dijeron, no hay límite (¡nunca pensé en la longitud!), Pero creo que debes evitar tener un nombre de método largo ya que esto podría afectar la legibilidad e incluso el mapeo mental (cualquier otro desarrollador que mire el código puede olvidar o quiero olvidar el nombre del método!).

Creo que "clean code" en pocas palabras se refiere al uso de nombres pronunciables descriptivos. También podría argumentar que un nombre descriptivo largo es mejor que uno corto, supongo que un equilibrio de sonido. tis mi humilde vista.

2

en progreso (OpenEdge) el límite es 32 caracteres.

Cuestiones relacionadas