Note : 5 ; Fait le boulot.
Kotlin est un langage de la JVM que je classe dans la catégorie des « better Java », aux côtés de Ceylon (qui hélas n’a pas encore d’ouvrage). Le parti-pris du langage est celui d’une très bonne intégration avec Java (le langage), la manière dont chaque concept se traduit et peut être utilisé de ce côté est un fil rouge du livre. Ce n’est pas celui qui m’intéresse le plus, mais c’est une fonctionnalité forte (et limitante) du langage, donc… L’autre parti-pris est de s’adosser à une version déjà ancienne de la JVM : Java 6, mais ce dernier point n’a pas d’influence sur le texte.
Il y a fort peu à dire de ce texte, ni en bien ni en mal. Il est plutôt sans surprise. Le texte est raisonnablement clair et les extraits de code font le boulot. D’un autre côté, pas de « waouh effect ». Avec 310 pages sur 11 chapitres regroupés en deux parties, on reste également dans le standard, bien que dans la partie haute.
La première partie « introducing Kotlin » compte 6 chapitres et couvre 170 pages. Le premier d’entre-eux se contente d’une quinzaine d’entre-elles. Il a pour but de faire le tour des caractéristiques principales du langage et de son positionnement. C’est bien écrit, mais on n’est en réalité pas tellement avancé. Par contraste, le chapitre 2 « Kotlin basics » et ses un peu plus de 25 pages font un bon boulot pour couvrir les bases du langage : déclaration de classes et de méthodes, les propriétés (et leurs petites particularités) ainsi que des structures de contrôle : boucles, switches, énumérations, etc. On couvre bien les base et c’est bien écrit.
Au chapitre 3, on rentre de manière plus chirurgicale dans toutes variations des appels de fonction. Tout d’abord avec les paramètres nommés, les paramètres par défaut, les fonctions et propriétés globales. Puis vient le plat de résistance : les fonctions d’extension, une des superstars du langage. On termine par de petites sucreries : la notation infixe, les triple-quote, etc. La lecture du chapitre demande un peu plus d’attention, mais ça passe bien. Pas le temps de soufflé, le gros chapitre 4 à presque 40 pages nous attends. On y traite interfaces et classes. Je m’aperçois que nombre de choix s’éloignent du Java pour se rapprocher du C++, comme les méthodes final par défaut ! Il y a là pas mal de petites particularités que j’aime bien : les classes « open » ou « sealed ». Les companion object me rappellent furieusement Scala quand à eux, mais de là à l’avouer…
Avec le chapitre 5, on attaque du lourd : les Lambda. Du lourd pour moi, car je n’y connais rien. Mention spéciale donc à ce chapitre long d’une trentaine de pages qui rend la chose parfaitement limpide, grâce à une approche tout à fait progressive. Si le mapping avec Java est inutilement encombrant, on comprends parfaitement le passage de paramètres et l’accès aux variables locales. Les APIs des collections sont parfaitement illustrées de diagrammes et d’exemples de code. Le niveau monte un peu en fin de chapitre avec les SAM interface et surtout les fonctions « with » et « apply » pas si faciles à maîtriser…
La première partie se referme sur le système de types de Kotlin. C’est assez reposant après le chapitre 5. On a droit une fois encore à une poignée de concepts qui tournent beaucoup autour de la nullabilité de types. Près de 40 pages sont consacrées à cela.
La seconde partie « embracing Kotlin » s’octroie 140 pages et contient 5 chapitres.. On ouvre le feu avec le chapitre 7 dédié aux surcharges d’opérateurs et aux propriétés déléguées. Un peu plus de 25 pages pour cela. Cette fois encore, le langage se rapproche de C++. Petite gâterie, la gestion spécifique des opérateurs préfixés ou post fixés est pris en charge par le compilateur à partir d’une définition unique : bravo ! Les petits ajouts comme la gestion des ranges et les retours de valeur multiples sont aussi appréciables, même s’ils sont dans l’air du temps. Les propriétés déléguées permettent quand à elles quelques pirouettes sur l’initialisation paresseuse ou des implémentations « technologiques » d’accesseurs. Malheureusement, le chapitre pioche un peu ici et certains exemples sont loin de me convaincre.
Le chapitre 8 ne compte qu’une vingtaine de pages, mais est assez douloureux pour moi, avec le « next level » des lambda ! Malgré les efforts des auteurs je largue un peu les amarres. Le langage n’aide pas beaucoup avec des comportements tout à fait amusant selon qu’une méthode soit déclarée « inline » ou non. Ce concept est proche de celui du C++ (encore) mais en faire une feature qui s’imbrique dans le comportement des lambda, c’est un peu too much ! Le return labellisé, même s’il semble utile ajoute encore un peu plus à la confusion…
Les génériques sont au menu du chapitre 9, et on en prends pour 30 pages. On voir bien que le « type erasure » n’est pas au goût des créateurs du langage (qui ne l’avouent pas) et les propositions pour les support de la réification paraissent compliqués et limités (le support d’une vieille JVM n’aide pas). Le chapitre nous gratifie par contre d’une splendide explication des concepts de covariance et de contravariance brillamment illustrés. Bravo !
Ce sont un peu plus de 25 pages qui sont réservées au chapitre 10 qui couvre la réflexion et les annotations. On y trouve nombre d’éléments pas si différents de Java et quelques uns qui ajoutent quelques facilités, comme les annotation target. De même l’API de réflexion est notablement plus riche que celle de Java. Au final le chapitre fait peu rêver. La livre se referme sur le chapitre 11 consacré à l’utilisation de Kotlin comme DSL. C’est un peu une grosse pub, où l’on montre comment les différentes fonctionnalités comme la notation infixe les parenthèses optionnelles pour les méthodes à un argument ou encore la surcharge d’opérateurs (toutes choses que l’on retrouve d’une manière ou d’une autre dans Kotlin) permettent l’écriture d’un DSL. J’avoue que je n’étais pas très motivé sur ce coup. Passons.
Comme je l’ai dit, le livre fait bien le boulot. Il ne fait pas sauter de joie non plus, à l’image du langage. J’ai été satisfait par la découverte du langage qu’il m’a apporté.
Référence complète : Kotlin in Action – Dmitry Jemerov & Svetlana Isakova – Manning 2017 – ISBN : 978 1 61729 329 0