Un'introduzione a Kotlin

introduzione

Da quando Apple ha rilasciato il linguaggio di programmazione Swift per iOS, molti sviluppatori Android hanno voluto una lingua simile per lo sviluppo Android. Se sei uno di quegli sviluppatori, amerai Kotlin, una lingua JVM che è molto simile a Swift.

Kotlin è un linguaggio tipizzato staticamente, sviluppato da JetBrains, la cui sintassi è più espressiva e concisa di quella di Java. Con funzioni come funzioni di ordine superiore, espressioni lambda, overloading dell'operatore, modelli di stringhe e molto altro, Kotlin ha molto più da offrire rispetto a Java. Poiché Java e Kotlin sono altamente interoperabili, possono essere utilizzati insieme nello stesso progetto.

Se sei un programmatore competente in Java, sarai in grado di imparare Kotlin in pochissimo tempo. In questo tutorial ti mostrerò come usare i costrutti più usati di Kotlin.

Prerequisiti

Per seguire insieme a me, avrai bisogno di:

  • una buona conoscenza di Java.
  • l'ultima versione del compilatore Kotlin. In alternativa, è possibile utilizzare il parco giochi online.

1. Classi

Per creare una classe in Kotlin, devi usare il classe parola chiave. Ad esempio, ecco come si crea una classe vuota chiamata Persona:

"java class Person

"

Aggiunta di proprietà

Di solito una classe ha proprietà e funzioni membro (chiamate anche metodi). Aggiungiamo due proprietà al Persona classe, nome di tipo Stringa e età di tipo Int.

java var name: String = "" var age: Int = 0

Come puoi vedere, la sintassi per la creazione delle variabili è leggermente diversa da quella di Java. Per creare una variabile in Kotlin, devi usare il var parola chiave. Tuttavia, se si desidera che la variabile sia una variabile di sola lettura / assegnazione una sola volta, utilizzare il comando val parola chiave.

Per motivi di sicurezza nulla, Kotlin fa anche una distinzione tra le variabili che possono essere nullo e variabili che non potranno mai essere nullo. Nel nostro esempio precedente, entrambe le variabili nome e età non può mai essere nullo. Se sono nulli, il compilatore genera un errore.

Per creare una variabile che può contenere nullo, è necessario aggiungere un ? dopo il tipo di variabile. Per esempio:

java var college: String? = null

Ora che abbiamo una classe, la creazione di un'istanza è semplice:

java var jake = Persona ()

No, Kotlin non ha il nuovo parola chiave. Una volta che l'istanza è stata creata, puoi accedere alle sue proprietà nello stesso modo in cui faresti in Java:

java jake.name = "Jake Hill" jake.age = 24 jake.college = "Stephen's College"

Utilizzando i costruttori

Inizializzare le singole proprietà della nostra istanza nel modo in cui abbiamo appena fatto non è una buona pratica di codifica. Un modo migliore per farlo sarebbe utilizzando un costruttore. La sintassi di Kotlin per creare un tale costruttore è molto compatta:

"java class Person (nome var: String, var age: Int, var college: String?)

"

In effetti, se non hai nient'altro da aggiungere alla tua classe, non hai bisogno delle parentesi graffe. Il seguente codice funziona bene:

"java class Person (nome var: String, var age: Int, var college: String?)

var jake = Persona ("Jake Hill", 24, "Stephen's College") "

Potrebbe già essere ovvio per te che non è possibile aggiungere codice personalizzato a questo costruttore. Questo costruttore, che fa parte dell'intestazione della classe, è chiamato il costruttore principale.

Per aggiungere altri costruttori alla tua classe, noti come costruttori secondari, dovresti usare il costruttore parola chiave. I costruttori secondari dovrebbero delegare al costruttore principale usando il Questo parola chiave. Aggiungiamo un costruttore secondario alla nostra classe che inizializza il valore di una proprietà chiamata e-mail:

"java class Person (nome var: String, var age: Int, var college: String?)

var email: String = "" costruttore (nome: String, età: Int, college: String ?, email: String): questo (nome, età, college) this.email = email "

Per creare un'istanza usando il costruttore secondario, scrivi qualcosa come questo:

java var jake = Persona ("Jake Hill", 24, "Stephen's College", "[email protected]")

Aggiunta di funzioni membro

In Kotlin, le funzioni vengono create usando il divertimento parola chiave. Aggiungiamo una semplice funzione membro chiamata isEligibleToVote che restituisce a booleano valore:

"java fun isEligibleToVote (): Boolean // Se l'età è maggiore o uguale a 18 // return true

età di ritorno> = 18 "

Si noti che il tipo del valore restituito è indicato alla fine dell'intestazione della funzione. Puoi chiamare questo metodo nello stesso modo in cui faresti in Java:

java jake.isEligibleToVote ()

Creazione di estensioni

Kotlin ti consente di estendere una classe aggiungendo funzioni aggiuntive senza modificare la sua definizione originale. Tali funzioni sono note come estensioni. I nomi di queste funzioni dovrebbero essere preceduti dai nomi delle classi che estendono.

Ad esempio, per aggiungere un'estensione chiamata isTeenager al Persona classe, scrivi il seguente codice al di fuori della classe:

"java fun Person.isTeenager (): Boolean

// Se l'età rientra nell'intervallo // 13-19 restituisce l'età effettiva di ritorno in 13 ... 19 "

Questa funzione è particolarmente utile quando si desidera estendere classi che non appartengono alla base di codice del progetto. Ad esempio, il seguente snippet di codice aggiunge un'estensione containsSpaces al Stringa classe:

java fun String.containsSpaces (): Boolean return this.indexOf ("")! = - 1

Creazione di classi derivate

È importante tenere a mente quanto segue quando si crea una classe derivata:

  • Devi usare a : invece di Java si estende parola chiave.
  • L'intestazione della classe base dovrebbe avere il Aperto annotazione.
  • Se la classe base ha un costruttore che accetta parametri, la classe derivata deve inizializzare tali parametri nell'intestazione stessa.

Creiamo una classe di nome Dipendente da cui deriva Persona:

"java open class Person (nome var: String, var age: Int, var college: String?) ...

class Employee (nome: String, age: Int, college: String ?, var company: String): Person (nome, età, college)

"

Sovrascrivere le funzioni degli utenti

In Kotlin, devi dichiarare esplicitamente che una funzione membro può essere sovrascritta usando il Aperto annotazione nell'intestazione del metodo nella classe base. Nella classe derivata, le funzioni di apertura possono essere sovrascritte usando il oltrepassare annotazione.

Ad esempio, per ignorare il isEligibleToVote metodo, si aggiunge il seguente snippet di codice al Dipendente classe:

java override fun isEligibleToVote (): Boolean // Restituisce sempre true return true

Creare metodi statici

Kotlin non ti consente di creare metodi statici. Tuttavia, ti consente di creare funzioni a livello di pacchetto che non appartengono a nessuna classe.

Il principale il metodo è forse il metodo statico più conosciuto. Se vuoi aggiungere il principale metodo per un pacchetto chiamato com.tutsplus.code.tutorial, allora il tuo codice sarà simile a questo:

"pacchetto java com.tutsplus.code.tutorial

fun main (args: Array)

"

2. Funzioni

Hai già imparato a creare semplici funzioni negli esempi precedenti. La sintassi che hai usato per creare quelle funzioni era molto simile a quella di Java. Kotlin, tuttavia, ti consente di fare molto di più con le funzioni.

Creazione di funzioni di espressione singola

Se una funzione restituisce il valore di una singola espressione, allora puoi usare il comando = operatore dopo l'intestazione della funzione seguito dall'espressione per definire la funzione.

Ad esempio, per aggiungere un metodo al Persona classe che ritorna vero se la persona è un ottuagenario, scriveresti:

java fun isOctogenarian (): Boolean = age in 80 ... 89

Come puoi vedere, questa sintassi abbreviata è più compatta e leggibile.

Funzioni di ordine superiore e Lambda Expressions

Le funzioni di ordine superiore sono funzioni che possono restituire funzioni o accettare funzioni come parametri. Un'espressione lambda, d'altra parte, è solo una funzione che non ha nome. Di solito, le espressioni lambda e le funzioni di ordine superiore vengono utilizzate insieme.

Considera il seguente esempio che dimostra la sintassi di un'espressione lambda:

java x, y -> x + y

Questa è un'espressione lambda semplice che prende due parametri, X e y, e restituisce la loro somma. Come avrai intuito, i parametri della funzione sono elencati prima del -> l'operatore e il corpo della funzione iniziano dopo il -> operatore. Questa espressione lambda può essere assegnata a una variabile e utilizzata come segue:

java val sumLambda: (Int, Int) -> Int = x, y -> x + y val actualSum = sumLambda (3,4)

Si noti che il tipo della variabile che contiene l'espressione lambda specifica i tipi dei suoi parametri e il suo valore di ritorno.

Creare una funzione di ordine superiore in grado di accettare l'espressione lambda di cui sopra come parametro è altrettanto facile. Ad esempio, per creare una funzione che raddoppia il risultato dell'espressione lambda, scrivi:

java fun doubleTheResult (x: Int, y: Int, f: (Int, Int) -> Int): Int return f (x, y) * 2

Puoi chiamare questa funzione come segue:

java val result1 = doubleTheResult (3, 4, sumLambda)

In alternativa, puoi passare l'espressione lambda direttamente alla funzione di ordine superiore:

java val result2 = doubleTheResult (3, 4, x, y -> x + y)

Le espressioni lambda sono spesso utilizzate con array. Ad esempio, si consideri il seguente array di Int valori:

numeri java val: matrice = arrayOf (1, 2, 3, 4, 5)

Se si desidera quadrare il valore di ciascun elemento nell'array, è possibile utilizzare il carta geografica funzione con un'espressione lambda come segue:

"java val squaredNumbers = numbers.map (x -> x * x)

// Il risultato sarà un nuovo array che contiene // 1, 4, 9, 16, 25 "

3. Gamme

Le espressioni Range sono usate molto frequentemente in Kotlin. Li hai già usati durante la creazione del isTeenager e isOctogenarian metodi.

Per creare un intervallo, tutto ciò di cui hai bisogno è il ... operatore.

"java val r1 = 1 ... 5

// Questo intervallo contiene il numero 1, 2, 3, 4, 5 "

Per creare un intervallo in ordine decrescente, utilizzare il giù verso funzione invece.

"java val r2 = 5 downTo 1

// Questo intervallo contiene il numero 5, 4, 3, 2, 1 "

Se non vuoi che il passo sia 1, puoi specificare un valore personalizzato usando il passo funzione.

"java val r3 = 5 downTo 1 step 2

// Questo intervallo contiene il numero 5, 3, 1 "

Vedrai più espressioni di intervallo più avanti in questo tutorial.

4. Costrutti condizionali

Se

In Kotlin, Se è un'espressione che restituisce valori diversi a seconda che la condizione sia stata soddisfatta. Il seguente esempio illustra come funziona.

"java var age = 20 val isEligibleToVote = if (age> 18)" Yes "else" No "

// isEligibleToVote sarà ora impostato su "Sì" "

quando

Il quando espressione è equivalente a Java interruttore. Tuttavia, è molto più versatile. Ad esempio, considera il seguente esempio.

"java val età = 17

val typeOfPerson = when (age) 0 -> "New born" in 1 ... 12 -> "Child" in 13 ... 19 -> "Teenager" altro -> "Adulto"

// typeOfPerson sarà ora impostato su "Teenager" "

Come potete vedere, quando non può prendere solo valori singoli ma anche espressioni come condizioni.

5. Costruire a ciclo

per ... in

In Kotlin puoi usare il per ... in loop per scorrere in loop array, raccolte e qualsiasi altra cosa che fornisce un iteratore. La sua sintassi è quasi identica a quella di Java, tranne che per l'uso di nel operatore invece di Java : operatore. L'esempio seguente mostra come eseguire il ciclo di un array di Stringa oggetti.

"java val names = arrayOf (" Jake "," Jill "," Ashley "," Bill ")

for (nome in nomi) println (nome) "

Con l'aiuto delle espressioni di intervallo, puoi fare in modo che questo ciclo si comporti come uno stile C tradizionale, per ciclo continuo.

"java for (i in 0 ... 9) println (i)

// si comporta esattamente come // per (int i = 0; i<10;i++)"

mentre e fare mentre

La sintassi di mentre e fare mentre i loop in Kotlin sono identici alla sintassi utilizzata in Java. Ad esempio, il seguente codice Kotlin scorre su un array di Stringa oggetti che usano a mentre ciclo continuo:

"java val names = arrayOf (" Jake "," Jill "," Ashley "," Bill ") var i = names.size ()

while (i> 0) println (names [-i]) "

6. Modelli di stringa

Kotlin ti permette di incorporare variabili ed espressioni in stringhe avvolgendole in un paio di parentesi graffe, precedute da un $ simbolo. Per esempio:

"java val name =" Bob "println (" Il mio nome è $ nome ") // Stampa" Il mio nome è Bob "

val a = 10 val b = 20 println ("La somma è $ a + b") // Stampa "La somma è 30" "

Conclusione

In questo tutorial, hai imparato le basi del linguaggio di programmazione Kotlin. Anche se abbiamo coperto diversi costrutti qui, Kotlin ha molto altro da offrire. Infatti, a partire da giugno 2015, Kotlin è ancora disponibile solo come anteprima. È probabile che vedremo diversi miglioramenti e nuove funzionalità nei prossimi mesi.

Se vuoi sapere come usare Kotlin in Android Studio, dai un'occhiata a Come usare Kotlin nei tuoi progetti Android. Per saperne di più sulla lingua di Kotlin, ti consiglio di visitare la documentazione di Kotlin.