Pregunta

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

¿Cuáles son los factores involucrados también?

  • ¿La especificación del idioma limita esto?
  • ¿A qué lo limita el compilador?
    • ¿Es diferente en máquinas de 32 bits frente a 64 bits?
¿Fue útil?

Solución

Para C # no creo que haya un límite estricto especificado . (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 va mucho más allá de los límites de legibilidad e incluso un nombre sensible generado por máquina.

Para Java, sección 3.8 de la especificación estados:

  

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

Otros consejos

PHP parece estar limitado solo por el límite de memoria del script.

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;
}

?>

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

int a123456789a123...;

Y repetido. Con 512 caracteres, VS me da el error "Identificador demasiado largo". 511 está bien sin embargo. (Cuenta de caracteres marcada en Word.)

Otro ejemplo:

int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;

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

Visual Studio solo coloreará los primeros 511 caracteres (1023 para VB) del identificador y mantendrá el resto en negro.

en C # tiene una longitud de 511 caracteres.

Los nombres de los símbolos comunes de 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 exclusivo superior en cada dimensión individual de una matriz. Este límite depende de la implementación, pero no será menor que 1024. (Se alienta a los implementadores a hacer que este límite sea lo más grande 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 la longitud.

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

En D no sé que este sea el caso, pero sospecho que es algo loco como > 100MB. Podría ser algo que no tiene memoria. Esto se basa en saber que yo y otras personas nos hemos topado con una limitación de formato de archivo de objeto de aproximadamente 11kB para nombres de símbolos y que esto se ha solucionado.

En Java, creo que no se da un límite de longitud. Consulte esto en el Tutorial de Sun Java en línea :

  

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top