Introduzione a Kotlin: Hello World
Faccio un nuovo progetto Kotlin, poi faccio "new File/Class" ed inizio a testare l'IntelliSense di JetBrains (che si chiama "Smart code completion"), provando a cercare di fare l'Hello World! scrivo questo codice:
fun main(args : Array<String>) {
println("Hello World!")
}
La cosa che mi sorprende è l'utilizzo di un Generics per l'array e non la classica notazione delle parentesi quadre ([]). Poi noto che InteliJ mi consiglia di convertire il codice in Expression Body, facendo diventare così il codice:
fun main(args : Array<String>) = println("Hello World!")
Mi piace! Noto che a differenza del C# dove si usa lo stesso operatore della Lambda (=>
) qui si usa l'uguale, In quanto indica "questa funzione è uguale a quest'altra", non male come idea (e penso che Kotlin sia ispirato al C#, visto che il C# dalla versione 6.0 li sta introducendo a manetta le Expression Body).
Noto, un po' dopo che attualmente sto scrivendo codice fuori da una classe in stile C++ o Python, quindi deduco che in Kotlin non tutto è un oggetto (in questo caso la funzione main è detta top level)...
Adesso cerco di dichiarare una variabile, tramite l'autocomplete scopro che ha la forma keyword var + nome + : + tipo
, in stile Swift, e immagino che il tipo sia opzionale, ma noto amaramente che né il tipo primitivo int né la classe wrapper Integer si possono usare! ed al terzo tentativo azzecco con la bellezza della keyword Int!
var s1 : int // sbagliato
var s2 : Integer // sbagliato
var s3 : Int
Deduco quindi che in Kotlin, hanno unificato i tipi base, con le classi Wrapper del Java (e della JVM).
Per provare l'inferenza del tipo (quindi per provare la mia ipotesi che in Kotlin specificare il tipo è opzionale) cerco una funzione per leggere dalla console. Normalmente, nella mia esperienza noto se per scrivere su console la funzione inizia con write per leggere da console la funzione inizia con read e che se per scrivere su console si usa qualcosa che inizia con print, per leggere si usa qualcosa che inizia con scan. Ed invece no! In Kotlin non funzione così: per scrivere si usa println() (o print(), se non si vuole mandare a capo il testo) e per leggere readLine()!
fun main(args : Array<String>) {
println("Hello World!")
var s1 = readLine()
}
La mia teoria è confermata. Kotlin ha l'inferenza del tipo, bene o male c'è l'ha.