Je sais que nous pouvons utiliser le mot-clé "var" pour définir des variables dans Kotlin:
var foo = 3
La dernière mise à jour Java (Java 10) introduit également le type "var":
var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}
Ma question est, quelle est la différence de l'utilisation de "var" entre ces langues?
Leur signification est très différente, même si la syntaxe dans le cas de base var x = ...
finit par être le même:
var
dans Kotlin signifie "ceci est une variable mutable", et peut être utilisé à la fois lorsque le type est déduit et quand il est explicite: var x: String = ...
;
var
in Java signifie "ceci est une variable de type déduit", et peut être utilisé à la fois pour les variables mutables et final
.
var
in Java ne peut être utilisé que pour les variables locales; var
dans Kotlin est également utilisé pour les propriétés.
Selon les notes de version de Java 10, il indique:
Nous cherchons à améliorer l'expérience des développeurs en réduisant la cérémonie associée à l'écriture de code Java, tout en maintenant l'engagement de Java envers la sécurité des types statiques, en permettant aux développeurs d'éluder la déclaration manifeste souvent inutile des types de variables locales Cette fonctionnalité permettrait, par exemple, des déclarations telles que:
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
Donc, fondamentalement, c'est pour s'adapter à la paresse des programmeurs; au lieu d'écrire List<String> list = new ArrayList<>();
, vous pouvez maintenant omettre le List<String>
, et le remplacer par var
, permettant ainsi Java to infer de quel type list
est - il est capable de le faire car la variable est initialisée lorsqu'elle est définie. Remarque, vous devrez déduire le type de list
lors de l'initialisation (dans le cas ci-dessus, vous ajouteriez String
à new ArrayList<String>();
). Ainsi, Java conserve toujours sa déclaration de type statique.
Quelle est la différence avec Kotlin?
Le type d'une variable dans Kotlin défini avec var
est également déduit (mais peut également être explicite dans le cas de var foo: Int
), Et Kotlin est également un langage typé statiquement.
var
in Java 10 peut simplifier certaines déclarations comme ArrayList<String>
et le type de flux.
var
ne peut être utilisé que dans une méthode pour Java 10. Mais vous pouvez l'écrire n'importe où dans Kotlin
Et il n'y a pas de mot clé val
dans Java 10 alors nous pourrions utiliser final var
en tant que val
en Java 10.
(Je pense que nous connaissons tous par défaut mutable et immuable, donc je ne les décrirai pas.)
var
est considéré à la fois comme type
(JB Lexer) et keyword
(JB Grammar Psi) dans Intellij IDEA 2018.1+).
J'ai développé un plugin pour Java 10 conseils de type var pour montrer son type (ressemble juste à Kotlin)