Avec les versions antérieures de Ruby, il était possible de geler les chaines de caractères littérales en utilisant la méthode .freeze. Pour éviter que cette méthode apparaisse partout dans le code, l’équipe de Ruby a opté pour un nouveau pragma dans cette nouvelle version de Ruby. Comment fonctionne-t-il ?
En principe lorsque vous écrivez votre code, il est possible de modifier une chaine de caractères littérale tout au long de l’écriture. Avec la méthode « .freeze » utilisée en association avec une chaine de caractères littérale, le compilateur renvoie un message d’erreur à la compilation si l’on tente de modifier la chaine de caractères littérale qui a été gelée.
Dans cette nouvelle version de Ruby, cette fonctionnalité peut être appliquée par défaut à un fichier d’un projet en ajoutant le commentaire magique suivant pour geler toutes les chaines de caractères du fichier source :
Code : | Sélectionner tout |
#frozen-string-literal: true
ou en utilisant le flag suivant dans la console :
Code : | Sélectionner tout |
--enable=frozen-string-literal my_script.rb
Pour désactiver cette fonctionnalité, il faut saisir cette ligne de code :
Code : | Sélectionner tout |
--disable=frozen-string-literal
Cette fonctionnalité comporte plusieurs avantages. En l’utilisant sur une constante par exemple, il est sûr que cette dernière conservera la même valeur partout dans le projet.
Par ailleurs, en figeant une chaine de caractères, il n’est plus nécessaire d’écrire à chaque fois le même objet dans la mesure où il comporte la même valeur. L’on pourrait la définir à un emplacement précis et l’appeler à partir de n’importe quel emplacement dans le projet sans risquer de mauvaise surprise de retour de valeur.
Au regard des avantages précédents, l’on pourrait obtenir des gains de performance dans le programme utilisant cette fonctionnalité, car le ramasse-miettes prendra moins de temps pour créer et détruire les objets créés sous ce schéma.
Pour aider les développeurs à mieux gérer les erreurs qui pourraient résulter de l’usage de cette méthode, la ligne de commande suivante permet d’obtenir des informations sur le code tentant de changer la valeur d’une chaine de caractères qui a été gelée.
Code : | Sélectionner tout |
--debug ou --debug=frozen-string-literal
À côté de cette fonctionnalité, l’équipe de Ruby a introduit un nouvel opérateur de navigation sécurisée « &. ». Ce dernier apporte une simplicité à la gestion des exceptions. C’est un peu le même principe que l’on a en Swift avec les optionnelles. Lorsque vous utilisez un objet qui peut être nil à un moment donné, pour éviter des déclenchements d’erreurs, il est recommandé d’utiliser cet opérateur pour gérer l’exception au cas où l’objet appelé est nil.
D’autres langages tels C# et Groovy intègrent également des fonctionnalités similaires, mais avec un opérateur différent. À terme, la méthode try! qui gère uniquement nil dans Ruby devrait être remplacée par le nouvel opérateur &.
Comme autres nouveautés dans cette version 2.3, il faut également citer l’apparition d’une nouvelle méthode « dig ». Elle permet de parcourir et récupérer une valeur dans un tableau array ou une table de hachage.
Autre élément à noter dans cette nouvelle version, c’est l’ajout par défaut de la bibliothèque did_you_mean gem pour faciliter le débogage des erreurs. En effet, lors de l’écriture du code, des erreurs de saisie peuvent apparaitre au niveau du nom des méthodes, des classes, des instances de variables, et bien plus encore. La gem did_you_mean en générant une alerte émet également des propositions de noms corrects.
Pour ceux qui utilisent le bloc de commentaires Here Documents, une amélioration a été également introduite à ce niveau. Afin d’indenter le contenu d’un bloc de commentaires (Here Documents) et son identifiant tout en supprimant les espaces qui peuvent apparaitre à la sortie, le nouveau caractère « <<~ » a été ajouté. En l’utilisant, cela évite d’indenter le contenu des blocs de commentaires et supprimer plus tard les espaces précédents les commentaires indentés.
Enfin, on pourra ajouter à cette liste de nouvelles fonctionnalités, l’interrogation d’un nombre pour savoir s’il est positif ou négatif. Plusieurs autres améliorations ont été apportées au niveau du noyau, des fichiers, de l’encodage, des processus, etc.
Nouvelles fonctionnalités sur Github
Source : Ruby News
Et vous ?
Que pensez-vous des nouvelles fonctionnalités introduites dans cette version de Ruby 2.3 ?
Quelle est votre fonctionnalité favorite parmi les nouvelles fonctionnalités proposées ?
Voir aussi
Forum Ruby