Une introduction à Kotlin

introduction

Depuis que Apple a publié le langage de programmation Swift pour iOS, de nombreux développeurs Android ont souhaité un langage similaire pour le développement Android. Si vous êtes un de ces développeurs, vous allez adorer Kotlin, un langage JVM remarquablement similaire à Swift..

Kotlin est un langage à typage statique, développé par JetBrains, dont la syntaxe est plus expressive et concise que celle de Java. Avec des fonctionnalités telles que les fonctions d'ordre supérieur, les expressions lambda, la surcharge d'opérateurs, les modèles de chaîne, etc., Kotlin a bien plus à offrir que Java. Comme Java et Kotlin sont hautement interopérables, ils peuvent être utilisés ensemble dans le même projet..

Si vous êtes un programmeur compétent en Java, vous pourrez apprendre le kotlin très rapidement. Dans ce tutoriel, je vais vous montrer comment utiliser les constructions les plus fréquemment utilisées par Kotlin..

Conditions préalables

Pour suivre avec moi, vous aurez besoin de:

  • une bonne compréhension de Java.
  • la dernière version du compilateur Kotlin. Alternativement, vous pouvez utiliser le terrain de jeu en ligne.

1. cours

Pour créer une classe dans Kotlin, vous devez utiliser le classe mot-clé. Par exemple, voici comment créer une classe vide appelée La personne:

"java class Person

"

Ajout de propriétés

Une classe a généralement des propriétés et des fonctions membres (également appelées méthodes). Ajoutons deux propriétés à la La personne classe, prénom de type Chaîne et âge de type Int.

java nom var: String = "" âge: Int = 0

Comme vous pouvez le constater, la syntaxe de création des variables est légèrement différente de celle de Java. Pour créer une variable dans Kotlin, vous devez utiliser le var mot-clé. Cependant, si vous voulez que votre variable soit une variable en lecture seule / assign-once, utilisez la commande val mot clé à la place.

Par souci de sécurité nulle, Kotlin fait également une distinction entre les variables pouvant être nul et des variables qui ne peuvent jamais être nul. Dans notre exemple précédent, les deux variables prénom et âge ne peut jamais être nul. S'ils sont nuls, le compilateur va générer une erreur.

Pour créer une variable pouvant contenir nul, vous devez ajouter un ? après le type de la variable. Par exemple:

java var college: String? = null

Maintenant que nous avons une classe, en créer une instance est simple:

java var jake = Personne ()

Non, Kotlin n'a pas le Nouveau mot-clé. Une fois que l'instance a été créée, vous pouvez accéder à ses propriétés de la même manière qu'en Java:

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

Utiliser des constructeurs

Initialiser les propriétés individuelles de notre instance comme nous venons de le faire n'est pas une bonne pratique de codage. Une meilleure façon de faire serait d'utiliser un constructeur. La syntaxe de Kotlin pour créer un tel constructeur est très compacte:

"java class Person (nom var: String, âge var: Int, var college: String?)

"

En fait, si vous n'avez rien d'autre à ajouter à votre classe, vous n'avez pas besoin des accolades. Le code suivant fonctionne très bien:

"java class Person (nom var: String, âge var: Int, var college: String?)

var jake = Person («Jake Hill», 24 ans, «Stephen's College») "

Vous comprenez peut-être déjà qu'il est impossible d'ajouter du code personnalisé à ce constructeur. Ce constructeur, qui fait partie de l'en-tête de la classe, s'appelle le constructeur principal..

Pour ajouter plus de constructeurs à votre classe, appelés constructeurs secondaires, vous devez utiliser le constructeur mot-clé. Les constructeurs secondaires doivent déléguer au constructeur principal en utilisant le ce mot-clé. Ajoutons à notre classe un constructeur secondaire qui initialise la valeur d'une propriété nommée email:

"java class Person (nom var: String, âge var: Int, var college: String?)

var email: String = "" constructeur (nom: String, âge: Int, collège: String ?, email: String): this (nom, âge, collège) this.email = email "

Pour créer une instance à l'aide du constructeur secondaire, vous écrivez quelque chose comme ceci:

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

Ajout de fonctions membres

En Kotlin, les fonctions sont créées à l'aide du amusement mot-clé. Ajoutons une fonction membre simple nommée isEligibleToVote qui retourne un Booléen valeur:

"java fun isEligibleToVote (): Boolean // Si l'âge est supérieur ou égal à 18 // retourne la valeur true

âge de retour> = 18 "

Notez que le type de la valeur de retour est indiqué à la fin de l'en-tête de la fonction. Vous pouvez appeler cette méthode de la même manière qu'en Java:

java jake.isEligibleToVote ()

Créer des extensions

Kotlin vous permet d'étendre une classe en lui ajoutant des fonctions supplémentaires sans modifier sa définition d'origine. Ces fonctions sont appelées extensions. Les noms de ces fonctions doivent être précédés des noms des classes qu’elles étendent..

Par exemple, pour ajouter une extension appelée isTeenager au La personne classe, vous écrivez le code suivant en dehors de la classe:

"java fun Person.isTeenager (): Boolean

// Si l'âge se situe dans la plage // 13-19, l'âge de retour réel est indiqué dans 13… 19 "

Cette fonctionnalité est particulièrement utile lorsque vous souhaitez étendre des classes qui n'appartiennent pas à la base de code de votre projet. Par exemple, l'extrait de code suivant ajoute une extension contientEspaces au Chaîne classe:

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

Création de classes dérivées

Il est important de garder à l'esprit les éléments suivants lors de la création d'une classe dérivée:

  • Vous devez utiliser un : au lieu de Java s'étend mot-clé.
  • L'en-tête de la classe de base devrait avoir le ouvrir annotation.
  • Si votre classe de base a un constructeur qui prend des paramètres, votre classe dérivée doit initialiser ces paramètres dans l'en-tête même..

Créons une classe nommée Employé qui dérive de La personne:

"java open class Person (nom var: String, âge var: Int, collège var: String?) …

employé de classe (nom: String, âge: Int, collège: String ?, société var: String): Personne (nom, âge, collège)

"

Fonctions de membre prioritaires

En Kotlin, vous devez indiquer explicitement qu’une fonction membre peut être remplacée à l’aide de la touche ouvrir annotation dans l'en-tête de la méthode dans la classe de base. Dans la classe dérivée, les fonctions ouvertes peuvent être remplacées à l'aide de la commande passer outre annotation.

Par exemple, pour remplacer le isEligibleToVote méthode, vous ajoutez l'extrait de code suivant à la Employé classe:

java override fun isEligibleToVote (): Boolean // Retourne toujours vrai retourne vrai

Création de méthodes statiques

Kotlin ne vous permet pas de créer des méthodes statiques. Cependant, cela vous permet de créer des fonctions au niveau paquet qui n'appartiennent à aucune classe..

le principale méthode est peut-être la méthode statique la plus connue. Si vous voulez ajouter le principale méthode à un paquet nommé com.tutsplus.code.tutorial, alors votre code ressemblerait à ceci:

"package java com.tutsplus.code.tutorial

amusant principal (args: Array)

"

2. fonctions

Vous avez déjà appris à créer des fonctions simples dans les exemples précédents. La syntaxe utilisée pour créer ces fonctions était très similaire à celle de Java. Kotlin, cependant, vous permet de faire beaucoup plus avec les fonctions.

Création de fonctions à expression unique

Si une fonction renvoie la valeur d’une seule expression, vous pouvez utiliser le = opérateur après l'en-tête de la fonction suivi de l'expression pour définir la fonction.

Par exemple, pour ajouter une méthode à la La personne classe qui retourne vrai si la personne est un octogénaire, vous écrivez:

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

Comme vous pouvez le constater, cette syntaxe abrégée est plus compacte et lisible..

Fonctions d'ordre supérieur et expressions lambda

Les fonctions d'ordre supérieur sont des fonctions qui peuvent renvoyer des fonctions ou accepter des fonctions en tant que paramètres. Une expression lambda, par contre, est juste une fonction qui n’a pas de nom. Habituellement, les expressions lambda et les fonctions d'ordre supérieur sont utilisées ensemble.

Prenons l'exemple suivant qui illustre la syntaxe d'une expression lambda:

java x, y -> x + y

Ceci est une expression lambda simple qui prend deux paramètres, X et y, et retourne leur somme. Comme vous l’auriez peut-être deviné, les paramètres de la fonction sont listés avant la -> l'opérateur et le corps de la fonction commence après la -> opérateur. Cette expression lambda peut être affectée à une variable et utilisée comme suit:

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

Notez que le type de la variable qui contient l'expression lambda spécifie les types de ses paramètres et sa valeur de retour..

La création d'une fonction d'ordre supérieur pouvant accepter l'expression lambda ci-dessus en tant que paramètre est tout aussi simple. Par exemple, pour créer une fonction qui double le résultat de l'expression lambda, vous pouvez écrire:

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

Vous pouvez appeler cette fonction comme suit:

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

Alternativement, vous pouvez passer l'expression lambda directement à la fonction d'ordre supérieur:

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

Les expressions lambda sont souvent utilisées avec des tableaux. Par exemple, considérons le tableau suivant de Int valeurs:

java val numbers: Array = arrayOf (1, 2, 3, 4, 5)

Si vous voulez mettre en carré la valeur de chaque élément du tableau, vous pouvez utiliser le carte fonction avec une expression lambda comme suit:

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

// Le résultat sera un nouveau tableau contenant // 1, 4, 9, 16, 25 "

3. gammes

Les expressions de plage sont très fréquemment utilisées dans Kotlin. Vous les avez déjà utilisés lors de la création du isTeenager et isOctogenarian les méthodes.

Pour créer une plage, tout ce dont vous avez besoin est la opérateur.

"java val r1 = 1… 5

// Cette plage contient le nombre 1, 2, 3, 4, 5 "

Pour créer une plage dans l’ordre décroissant, utilisez la commande vers le bas fonction à la place.

"java val r2 = 5 downTo 1

// Cette plage contient le nombre 5, 4, 3, 2, 1 "

Si vous ne voulez pas que l'étape soit 1, vous pouvez spécifier une valeur personnalisée en utilisant le étape une fonction.

"java val r3 = 5 downTo 1 step 2

// Cette plage contient le nombre 5, 3, 1 "

Vous verrez plus d'expressions de plage plus loin dans ce tutoriel..

4. Constructions conditionnelles

si

À Kotlin, si est une expression qui renvoie des valeurs différentes selon que la condition a été remplie ou non. L'exemple suivant illustre comment cela fonctionne.

"java var age = 20 val isEligibleToVote = si (age> 18)" Oui "sinon" Non "

// isEligibleToVote sera désormais défini sur "Oui" "

quand

le quand expression est équivalente à Java commutateur. Cependant, il est beaucoup plus polyvalent. Par exemple, considérons l'exemple suivant.

"java val age = 17

val typeOfPerson = quand (âge) 0 -> “Nouveau-né” dans 1… 12 -> “Enfant” dans 13… 19 -> “Adolescent” autre -> “Adulte”

// typeOfPerson va maintenant être réglé sur “Teenager” "

Comme vous pouvez le voir, quand peut non seulement prendre des valeurs simples mais aussi des expressions en tant que ses conditions.

5. Constructions en boucle

pour… dans

À Kotlin, vous pouvez utiliser le pour… dans boucle pour parcourir des tableaux, des collections et tout ce qui fournit un itérateur. Sa syntaxe est presque identique à celle de Java, à l’exception de l’utilisation de la dans opérateur au lieu de Java : opérateur. L’exemple suivant montre comment parcourir en boucle un tableau de Chaîne objets.

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

pour (nom dans les noms) println (nom) "

À l'aide d'expressions de plage, vous pouvez faire en sorte que cette boucle se comporte comme un style C traditionnel., pour boucle.

"java pour (i in 0… 9) println (i)

// se comporte exactement comme // pour (int i = 0; i<10;i++)"

tandis que et faire pendant

La syntaxe de tandis que et faire pendant Les boucles en Kotlin sont identiques à la syntaxe utilisée en Java. Par exemple, le code Kotlin suivant passe en boucle sur un tableau de Chaîne objets utilisant un tandis que boucle:

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

tandis que (i> 0) println (noms [-i]) "

6. Modèles de chaîne

Kotlin vous permet d’incorporer des variables et des expressions dans des chaînes en les enveloppant dans une paire d’accolades, précédées du préfixe $ symbole. Par exemple:

"java val name =" Bob "println (" Mon nom est $ name ") // Imprime" Mon nom est Bob "

val a = 10 val b = 20 println (“La somme est $ a + b” ") // Affiche« La somme est 30 ""

Conclusion

Dans ce tutoriel, vous avez appris les bases du langage de programmation Kotlin. Même si nous avons couvert plusieurs constructions ici, Kotlin a beaucoup plus à offrir. En fait, à compter de juin 2015, Kotlin n’est encore disponible qu’en avant-première. Il est probable que plusieurs améliorations et nouvelles fonctionnalités apparaissent dans les mois à venir..

Si vous voulez savoir comment utiliser Kotlin dans Android Studio, consultez la section Comment utiliser Kotlin dans vos projets Android. Pour en savoir plus sur la langue Kotlin, je vous recommande de consulter la documentation Kotlin.