Retour
Temps de lecture: 3 min
Vues: 479
Niveau:
Débutant
Cas dâusage Code avant (<= 3.3) Code aprĂšs (3.4) Ce que ça change
| Filtrer les fichiers vides | files.reject { |f| f.empty? } | files.reject { it.empty? } | Plus besoin de nommer f, focus direct sur la condition.
| Trier des mots par longueur | words.sort_by { |w| w.length } | words.sort_by { it.length } | On retire des caractÚres et on lit « it.length » comme une phrase.
| Garder les posts publiés | posts.select { |p| p.published? } | posts.select { it.published? } | La logique saute aux yeux : « sélectionne quand il est publié ».
it nâest quâun alias reconnu par le parser. Le bytecode gĂ©nĂ©rĂ© est le mĂȘme que pour |x|, donc aucun impact sur la vitesse ou lâusage mĂ©moire. YJIT/JIT ne font pas la diffĂ©rence non plus. Bref : gratuit !
Le paramĂštre "it" de Ruby 3.4
Série:
Café Ruby
Enregistrer
10 jours
par Franci-lobbie LALANE

Tags:
#ruby
#caféruby
#ruby34
#syntax
#productivité
Introduction đ
Tu pensais avoir fait le tour des blocks ? Ruby 3.4 dĂ©barque et glisse un tout petit motâclĂ© : it. Ce sucre syntaxique te permet dâaccĂ©der au premier argument dâun block sans avoir Ă le nommer. Ăa paraĂźt anecdotique, mais sur les oneâliners â et mĂȘme sur certains blocks de quelques lignes â le gain en lisibilitĂ© est rĂ©el. On dĂ©cortique tout ça ensemble, cafĂ© Ă la main.
Pourquoi it ? đ€
Chaque fois que tu Ă©cris un map, select ou reject, tu dĂ©clares souvent une variable fantĂŽme â juste pour la rĂ©utiliser une ligne plus loin :
numbers.map { |n| n * 2 }
Dans 100 % des cas oĂč ton block ne prend quâun paramĂštre, cette variable est redondante. Ruby 3.4 autorise dĂ©sormais :
numbers.map { it * 2 }
Le motâclĂ© it reprĂ©sente automatiquement le premier paramĂštre implicite du block. Finies les variables jetables comme |x|, |e| ou |v|.
Avant / AprĂšs dĂ©taillĂ© đȘ
Voici trois cas ultraâcourants, avant et aprĂšs it, avec un mot dâexplication Ă chaque fois :
Cas dâusage Code avant (<= 3.3) Code aprĂšs (3.4) Ce que ça change
| Filtrer les fichiers vides | files.reject { |f| f.empty? } | files.reject { it.empty? } | Plus besoin de nommer f, focus direct sur la condition.
| Trier des mots par longueur | words.sort_by { |w| w.length } | words.sort_by { it.length } | On retire des caractÚres et on lit « it.length » comme une phrase.
| Garder les posts publiés | posts.select { |p| p.published? } | posts.select { it.published? } | La logique saute aux yeux : « sélectionne quand il est publié ».
Autres cas sympas đĄ
- each_with_object
data.each_with_object({}) { it.process!(...) }
- tap pour du debug express
result.tap { puts "DEBUG => #{it.inspect}" }
- Injections simples avec inject / reduce
prices.reduce(0) { _1 + it.taxed } # mélange possible avec _1 (1er param) + it (2ᔠparam)
Limites Ă connaĂźtre â ïž
- Un seul paramĂštre implicite. Si ton block prend plusieurs arguments, it ne couvre que le premier ; les autres doivent ĂȘtre dĂ©clarĂ©s normalement.
- Lambdas âstabbyâ. Pas dispo dans -> { ... } si tu nâindiques pas les paramĂštres :
# â Ne marche pas add = -> { it + 2 } # â OK add = ->(it) { it + 2 }
- LisibilitĂ© long format. Sur un block multiâlignes avec plusieurs rĂ©fĂ©rences Ă lâargument, un nom explicite reste roi.
Performances : zĂ©ro overhead đïž
it nâest quâun alias reconnu par le parser. Le bytecode gĂ©nĂ©rĂ© est le mĂȘme que pour |x|, donc aucun impact sur la vitesse ou lâusage mĂ©moire. YJIT/JIT ne font pas la diffĂ©rence non plus. Bref : gratuit !
Tester vite fait đčïž
# Installer la preview (si besoin) rbenv install 3.4.0-preview1 rbenv shell 3.4.0-preview1 irb ["cafĂ©", "ruby", "rocks"].map { it.upcase } # => ["CAFĂ", "RUBY", "ROCKS"]
Ăa marche ? Ăa te plaĂźt ? Disâmoi en commentaire si tu vas lâadopter ou si tu prĂ©fĂšres garder tes bons vieux |obj|.
Happy coding ! đ
Laissez un commentaire
Se connecterpour laisser un commentaire.