Publié par et

Il y a 8 ans -

Temps de lecture 3 minutes

Devoxx – Kotlin

Depuis quelques mois, Kotlin fait parler de lui. Rien de tel qu’une conférence comme Devoxx pour prendre la température de ce nouveau langage.

Lors de cette session, Andrey Breslav nous a expliqué d’abord les motivations qui ont poussé JetBrains à investir dans le développement de Kotlin :

  • se détacher des limitations du langage Java dues à la compatibilité ascendante,
  • avoir un outillage performant. Notamment, une intégration de qualité dans les IDE, un debugger et un compilateur au moins aussi rapide que celui de Java. Pour garantir cela, JetBrains développe en parallèle du langage et du compilateur, un plugin pour l’intégration dans leur IDE IntelliJ ainsi qu’un plugin simple pour Eclipse,
  • avoir une syntaxe plus expressive.

 

 

 

Ensuite, il nous a expliqué les choix de design du langage :

  • entièrement compatible avec java,
  • code concis,
  • statiquement typé.

Ces choix ont été fait de manière à limiter les erreurs à l’exécution de l’application.

Pour cela, ils ont implémenté différentes fonctionnalités.

Pour les plus classiques :

  • Closure,
  • Pattern matching,
  • Inférence de type,
  • Simplification des accesseurs sur les propriétés,
  • Les Traits.

Et pour les plus innovantes :

  • Extensions Function,
  • Casting ‘intelligent’,
  • Static null safety guarantees,
  • Inline function,
  • Reified Generics,
  • Build infrastructure.

Andrey nous a montré ensuite un grand nombre d’exemples notamment :

  • Hello world avec le parcours d’une itération :
    namespace demo
    
    fun main(args : Array<String>) {
      for (name in args)
        println("Hello, $name!")
    }
    
  • Extensions Function qui peut notamment permettre d’étendre les fonctions d’une classe. Ici, on ajoute la fonction plusAssign que l’on peut appeler par + ou += à StringBuilder :
    namespace demo
    
    fun main(args : Array<String>) {
      val names = new StringBuilder()
    
      for (i in args.indices) {
        names += args[i]
        if(i+1 < args.size) {
          names += ","
        }
      }
      println("Hello, $name!")
    }
    
    fun StringBuilder.plusAssign(s : String) {
      this.append(s)
    }
    
  • Smart Cast pour ne pas caster l’objet si le type est déjà testé. Il peut être aussi utilisé dans un pattern matching comme dans l’exemple suivant :
    namespace demo
    
    fun foo(obj : Any?) {
      if(obj is String) {
        obj.substring(2)
      }
      when (obj) {
        is String => obj[0]
        is Int => obj + 1
        !is Boolean => null
        else => ...
      }
    }
    
  • Le pattern matching accepte des expressions ou un ensemble de valeurs :
    fun bar(x : Int) {
      when (x) {
        0 => "Zero"
        1, 2, 3 => "1, 2 or 3"
        x + 1 => "Really strange"
        in 10...100 => "In range"
        !in 100...1000 => "Out of range"
      }
    }
    

Cerise sur le gâteau, Andrey nous a montré le compilateur et le debuggeur sous IntelliJ parfaitement fonctionnels.

Cette session était surtout participative avec pas mal de questions dans la salle. À chaque fois, Andrey répondait à ces dernières de manière pertinente et nous avons constaté que l’équipe JetBrains a bien réfléchi pour faire un langage simple. Kotlin possède une syntaxe proche de celle de Java et de Scala, tout en les allégeant.

Kotlin est encore en phase de développement et les discussions sont encore vives sur les choix de conception du langage. Pour preuve, la page de Kotlin contient énormément de commentaires sur les améliorations ou évolutions à lui apporter. Un langage de plus à surveiller de près.

Publié par et

Publié par Julien Buret

Julien est CTO chez Xebia. Il est également formateur au sein de Xebia Training .

Publié par Nicolas Jozwiak

Nicolas est delivery manager disposant de 12 ans d’expérience en conception et développement. Son parcours chez un éditeur avant son entrée chez Xebia lui a notamment permis de développer de solides compétences dans le domaine de la qualité et de l’industrialisation (tests, intégration continue, gestion de configuration, contrôle qualité). Bénéficiant d’une expérience très solide de mise en place des méthodes agiles et d’accompagnement d’équipes sur le terrain, il s’attache à mettre à profit quotidiennement son expérience qui est reconnue pour son approche pragmatique, proactive et pédagogique.

Commentaire

7 réponses pour " Devoxx – Kotlin "

  1. Publié par , Il y a 8 ans

    L’une des motivations de la cration de Kotlin serait d’avoir un outillage d’aussi bonne qualit que celui de Java. Motivation rcursive ?

  2. Publié par , Il y a 8 ans

    Pour la majorit des plus classiques innovations, on peut constater qu’ils sont en ligne avec les dveloppeurs de Xtend:
    * Closure,
    * Infrence de type,
    * Simplification des accesseurs sur les proprits,
    * Les Traits.

    Esprons ds lors que ces innovations parmi les + classiques vont finir par arriver dans Java dans un futur raisonnable… Bon, en fait, j’en doute un peu, en matire de futur raisonnable…

    Par contre, je ne comprends pas du tout l’intrt d’inverser la dclaration du type des arguments d’une mthode.

    Est-ce que JetBrains en a prcis la valeur ajoute ? Ou s’agit-il du gout et des couleurs de JetBrains ?
    Merci

  3. Publié par , Il y a 8 ans

    Bonjour,

    Andrey nous a expliqu que JetBrain a fait le choix d’inverser la dclaration du type car cela leur permettait d’tre plus efficace dans l’interprtation par le compilateur.

    Nicolas (Xebia)

  4. Publié par , Il y a 8 ans

    Beaucoup trop de sucre syntaxique a mon gout !

    L’important pour moi n’est pas que d’crire du code vite et le plus concis possible.
    Il faut le faire en s’assurant qu’il reste lisible, pour les autres et par soi mme.

    Aussi, je pense qu’il faut crer un langage pour les dveloppeurs et pas pour le compilateur.

    Ce sont les forces de java !

    En tout cas merci pour ces dtails

  5. Publié par , Il y a 8 ans

    @Nicolas

    Pfff, en gros, JetBrains prfrent faire bosser des humains (pour s’adapter au changement de syntaxe) l o une machine pourrait faciliter le boulot aisment…
    JetBrains serait du genre ne pas inventer la pelleteuse, et ne laisser aux humains que l’usage de pelles, pour la simple raison que c’est chiant de mettre sur papier les plans de fabrication d’une pelleteuse…

  6. Publié par , Il y a 8 ans

    @Dominique De Vito : cette faon de dclarer les types est aussi plus naturelle dans les langages qui offrent une infrence sur les types.

    * avec de l’infrence, on est quasi-oblig d’avoir une mot cl pour la dfinition (val dans Kotlin), sinon on ne peut pas diffrencier dfinition, assignation, redfinition, etc (en Java, le type sert rendre non ambigue)
    * il est plus naturelle de laisser tomber la fin de la dfinition que le dbut.

  7. Publié par , Il y a 8 ans

    @Francois

    « cette faon de dclarer les types est aussi plus naturelle dans les langages qui offrent une infrence sur les types » : oui et non.

    Par exemple, ce n’est pas le cas (IMHO) pour les langage assignation unique. Si je prends Caml/OCaml, je dclare un entier comme suit:
    let i = 3;

    Avec un langage sans infrence de type (Java-like), on dclare :
    int i = 3;

    Donc, j’ai (i.e. j’avais) tendance imaginer jusqu’ prsent qu’il s’agit plus de remplacer le dbut de la dfinition, plutt que de laisser tomber la fin ; ceci tait renforc, qui plus est, par le fait que je vois plus le futur travers un langage qui tendrait s’inspirer de Caml/OCaml que de JavaScript (vu le foutoir de JS actuel et les tentatives en cours visant l’amliorer).

    Ceci tant, oui, effectivement, si on prend un langage comme JS, il s’agit plus de laisser tomber la fin que le dbut…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous recrutons

Être un Sapient, c'est faire partie d'un groupe de passionnés ; C'est l'opportunité de travailler et de partager avec des pairs parmi les plus talentueux.