JavaRush /Blog Java /Random-FR /Y a-t-il une différence entre Kotlin et Java ?
Paul Soia
Niveau 26
Kiyv

Y a-t-il une différence entre Kotlin et Java ?

Publié dans le groupe Random-FR
Salut tout le monde. Je veux vous dire quelques notions de base sur le langage Kotlin, qui seront utiles aux débutants. Il se trouve qu'il sera désormais difficile de se lancer dans le développement Android avec un seul langage - la plupart des nouveaux projets commencent à être écrits en Kotlin, la plupart des projets prêts à l'emploi sont écrits en Java. Y a-t-il une différence entre Kotlin et Java ?  - 1En ce moment, j'ai 4 projets en cours : deux en Kotlin et deux en Java (un grand principal et trois petits à usage interne). Lorsque l'entreprise a décidé d'écrire de nouveaux projets en Kotlin, cette décision m'a semblé étrange. Pourquoi mélanger différentes langues ? Laisser quelqu'un d'autre écrire en Kotlin, pourquoi en avons-nous besoin ? Mais il n’y avait pas d’issue, alors j’ai décidé d’essayer une nouvelle langue et j’ai commencé à l’étudier. Le premier code, bien sûr, a été entièrement écrit dans le style Java, ce qui a encore accru le malentendu : pourquoi ai-je besoin d’un nouveau langage ? Mais au fur et à mesure que je l'utilisais, j'ai trouvé de plus en plus d'avantages et maintenant (j'écris en Kotlin depuis presque 2 ans) je peux dire que Kotlin est plus pratique dans le développement Android. Je souhaite montrer quelques nuances qui ne seront pas évidentes pour quelqu'un qui a décidé de commencer à apprendre Kotlin après Java. Permettez-moi également de vous rappeler qu'Android utilise Java 8, la version actuelle étant la 14. Donc, d'abord - Variables : Java :
Int a = 1;
String s = "test";
Kotlin :
val a = 1
var b = 2
val c: Int
val d = "test"
Il existe deux types de variables dans Kotlin : val (lecture seule) et var (lecture-écriture). Il est recommandé d'utiliser val autant que possible. Il n'est pas nécessaire de déclarer le type d'une variable si la variable a déjà été initialisée. Deuxièmement - if/else, instructions switch : à quelle fréquence utilisez-vous cette chaîne d'instructions en Java :
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
Ou comme ceci :
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
Dans Kotlin, l'opérateur when est utilisé pour de telles expressions (bien que if/else puisse également être utilisé) :
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
Ici, nous avons non seulement parcouru la chaîne de conditions, mais nous avons également immédiatement attribué l'expression entière à la variable de résultat, ce qui nous a permis d'économiser pas mal de lignes de code. Mais quand même, si vous n'avez que deux options dans une branche, je vous recommande d'utiliser l'habituel if..else. Le moment où la construction sera plus courte ne comprendra que trois options. Passons à autre chose - Constructeurs . C'est un conte de fées ici. Comparez simplement le code en Java et Kotlin. Java:
public class Person {

    private String firstName;
    private String lastName;
    private int age;

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Kotlin :
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
Il peut sembler que quelque chose soit resté inachevé dans le code Kotlin. Mais non, ce sont deux codes identiques dans des langues différentes. Voyons cela un peu. Dans Kotlin, le constructeur peut être écrit directement dans le corps du nom de la classe (mais si vous le souhaitez, vous pouvez le faire à l'ancienne, comme en Java). Nous avons donc écrit trois variables, en Java nous avons créé un constructeur, des getters et un setter pour la variable age. Dans Kotlin, comme nous nous en souvenons, la variable val est en lecture seule, et donc le setter pour ces variables n'est pas disponible (Kotlin implémente des getter-setters sous le capot lui-même). La variable var vous permet d'utiliser un setter. En conséquence, nous avons écrit presque sur une seule ligne la même chose qui prenait plus d'une douzaine de lignes en Java. Ici, je recommande d'en savoir plus sur les classes de données dans Kotlin. Mais ce n’est pas tout ce pour quoi les constructeurs Kotlin sont bons. Mais que se passe-t-il si vous avez besoin de deux constructeurs ? Et s'il y en avait trois ? En Java, cela ressemblerait à ceci :
public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

public Person(String firstName) {
        this.firstName = firstName;
    }
Rien de compliqué, autant de designers que nécessaire, c’est ce qu’ils ont fait. Dans Kotlin, vous pouvez vous débrouiller avec un seul constructeur. Comment? C'est simple : les valeurs par défaut.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
Nous avons attribué des valeurs par défaut dans le constructeur et les appeler maintenant ressemblera à ceci :
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
La question peut se poser : qu'est-ce que c'est :
private val lastName: String? = null
Quels sont ces autres points d’interrogation ? Oui, si la valeur peut être nulle, alors elle est définie ?. Il existe également une option comme celle-ci - !!(si la variable ne peut pas accepter null). Lisez-le vous-même, c’est tout simple. Et nous passons au point suivant. Rallonges . C'est un outil très intéressant en Kotlin qui n'est pas disponible en Java. Parfois, dans un projet, nous utilisons des méthodes modèles qui sont répétées dans de nombreuses classes. Par exemple, comme ceci :
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
En Kotlin, nous pouvons étendre une classe :
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Et puis utilisez-le comme ceci tout au long du projet :
context?.toast("hello world")
Nous avons créé une extension pour la classe Context. Et désormais, partout où le contexte est disponible, sa nouvelle méthode toast sera disponible. Cela peut être fait pour n'importe quelle classe : String, Fragment, vos classes personnalisées, il n'y a aucune restriction. Et le dernier point que nous examinerons est Travailler avec des chaînes . Tout est simple ici. En Java, cela s'écrit ainsi :
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
C'est plus facile à Kotlin :
val s = "friends"
val a = 5
println("I have $a $s!")
Ce sont les nuances sur lesquelles je suis tombé au début de l'apprentissage de Kotlin, j'espère que cela vous aidera.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION