Cette annonce arrive quelques mois après celle de Red Hat qui a presénté le langage Ceylon au mois d'Avril.
Alors à quoi ressemble ce nouveau langage? Pour faire court, prenez Scala, rendez le un peu plus abordable et facile d'accès, ajoutez y un peu de Groovy et quelques nouvelles features.
Vous comprendrez mieux avec quelques exemples de code .
On peut facilement écrire ce genre de code grâce aux expressions lambda :
names filter {it.startsWith("A")} map {it.toUpperCase()} foreach {print(it)}
Ce code écrit en majuscule dans la console tous les nom commençant par A.
C'est le genre de choses toutes simples qui peuvent être vraiment lourdes à écrire en Java...
On peut également faire du pattern matching à la Scala :
fun cases(obj : Any) {
when(obj) {
1 => print("One")
"Hello" => print("Greeting")
is Long => print("Long")
!is String => print("Not a string")
else => print("Unknown")
}
}
Kotlin est un langage à typage statique. Mais il propose un mécanisme d'inférence de type pour alléger la syntaxe :
var a : Int = 1 var b = 1 // Type inféré
On peut même automatiser les cast dans certains cas :
if (obj is String)
return obj.length // pas de cast explicite
Le langage fournit un système de properties très bien pensé (pour éviter d'écrire les getters et setters à la main), qui rappelle un peu celui de C#.
La gestion des null est aussi très efficace et devrait résoudre pas mal de problèmes liés au null pointers. Un champ ne peut être null que si on l'autorise :
var a : String = "abc" a = null // erreur de compilation var b : String? = "abc" b = null // ok
Pour y accéder, on fait comme en Groovy :
b?.length()
Ceci renverra length() si b est non null, rien sinon. On pourra donc éviter quelques fastidieux if(b!=null) dans notre code.
Pour réduire le risque d'erreurs, l'utilisation du "?" est obligatoire pour accéder aux objets "nullables" :
b.length() //erreur de compilation
Enfin, le langage offre la même sécurité que Scala au niveau de l'immutabilité, avec l'usage du mot clé "val" (au lieu de "var") pour déclarer une propriété immuable. Ceci aura aussi une incidence sur la génération automatique des accesseurs : seul un getter est généré pour une propriété de type val.
Si cette mise en bouche vous a ouvert l'appétit, je vous conseille de regarder ces exemples plus détaillés sur le site du langage.
En tout cas personnellement je trouve ça très prometteur. Le support natif dans IntelliJ IDEA sera un gros plus des son lancement. J'espère sincèrement que ce langage aura sa chance dans la jungle des langages pour la JVM!
MAJ : Vous pouvez dès à présent jouer avec la Web demo de Kotlin
0 commentaires:
Enregistrer un commentaire