¿Cómo main
no podría usarse como identificador mientras se usa como identificador para declarar el método "principal"?
Para un idioma tan clásico:
public class Foo{
public static void main(String[] args){
}
}
main
no es una palabra clave y probablemente nunca sería una palabra clave en Java por obvias razones de compatibilidad retro.
Sobre la pregunta, ¿es main
un buen identificador?
Primero: válido para un compilador no significa necesariamente bueno.
Por ejemplo, la java1234
opción que se propone también es un identificador válido, pero eso realmente debería evitarse.
main
tiene un significado muy particular e importante: se utiliza como método de punto de entrada de clases y jarras ejecutadas por la java
línea de comando.
Usar main
un nombre de método que no cumpla con los criterios que usará la java
línea de comando sería engañoso mientras lo usa como nombre de variable o un nombre de clase podría tener sentido.
Por ejemplo, definir la clase que representa el punto de entrada de una aplicación como la Main
clase de la aplicación es aceptable y usarla también como nombre de variable, como por ejemplo:
public class Main {
public static void main(String args[]){
Main main = new Main();
// ...
}
}
De manera general, en Java, varios caracteres o "palabras" se consideran identificadores válidos para el compilador, pero se desaconseja su uso en el código del cliente (pero el código generado puede hacer eso: clases anidadas, por ejemplo) como no legibles y / o realmente engañoso.
Por ejemplo, esto podría ser válido para el compilador:
public class Object { // 1
public void foo() {
...
}
}
public class BadChosenIdentifier {
public static void main() { // 2
new BadChosenIdentifier().toString(new Object());
}
public void toString(Object java1234) { // 3, 4
String _result$ = java1234 + " -> to avoid"; // 4
System.out.println(_result$);
}
}
Pero no queremos:
- nombrar
Object
nuestra clase como se define enjava.lang
(1).
- para nombrar un método
main()
si no cumple los criterios que utilizará eljava
línea de comando (2).
- sobrecargar el
Object.toString()
método (3).
- para nombrar nuestras variables con
_
, $
o cualquier personaje sorprendente / poco significativo que vaya en contra de las convenciones de nomenclatura compartidas (4).