Retour

Le paramĂštre "it" de Ruby 3.4

Série: Café Ruby
Enregistrer
Temps de lecture: 3 min Vues: 479 Niveau: Débutant
10 jours par Franci-lobbie LALANE
Le paramĂštre "it" de Ruby 3.4
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 ⚠


  1. 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.
  2. Lambdas “stabby”. Pas dispo dans -> { ... } si tu n’indiques pas les paramùtres :
  3. # ❌ Ne marche pas
    add = -> { it + 2 }
    
    # ✅ OK
    add = ->(it) { it + 2 }
    
  4. 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.