La función principal en kotlin:
fun main(args : Array<String>) { println("Hello, world!") }¿Por qué se pasa un Array?
La firma de main se basa en lo que espera la máquina virtual de Java:
El método
maindebe declararsepublic, static, and void. Debe especificar un parámetro formal (§8.4.1) cuyo tipo declarado sea matriz de String . Por lo tanto, cualquiera de las siguientes declaraciones es aceptable:public static void main(String[] args) public static void main(String... args)
Esto es en lo que el compilador de Kotlin compila su función principal. A partir de Kotlin 1.3, el Array<String> explícito se puede omitir, pero seguirá estando disponible en el código de bytes.
Collections no estaban allí en JAVA 1. Por lo tanto, Array era la opción predeterminada. Además, los argumentos proporcionados desde la línea de comandos están en formato de cadena, por lo que usamos Array<String> . Kotlin, para mantener la interoperabilidad con JAVA, siguió la misma convención. Pero, con la actualización a Kotlin 1.3, eso también se ha omitido. Ahora puede usar la función main() sin pasar args:Array<String> .
La matriz contiene los argumentos de la línea de comandos pasados a su programa.
También puede omitirlo, si no desea usarlos, es decir, también puede simplemente escribir:
fun main() { println("Hello, world!") } Ya es demasiado tarde para vincular el JLS para Test.main aquí ( s1m0nw1 ya lo hizo ; me preparé y me fui ;-))
Sin embargo, quiero agregar algo con respecto a la elección de String (es decir, mi opinión de por qué se eligió String ): es probablemente el denominador más común para todos los posibles argumentos de la línea de comandos. Any Object / es demasiado amplio; solo puede pasar números o cadenas en la línea de comando a un programa (las tuberías se manejan de manera diferente). Pero tener un tipo de número es demasiado estrecho, por lo que el único tipo aceptable que queda es String que puede representar ambos. Todavía necesita analizar números si quiere usarlos, pero eso es mejor que interpretar una cadena de números ;-)