Procs
Objets blocs réutilisables
Procs est une leçon Ruby Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ruby Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ruby Academy comprend 4 leçons au total.
Objets bloc réutilisables
Un bloc n’est pas un objet en soi : vous ne pouvez donc pas le stocker dans une variable. Un Proc enveloppe un bloc dans un véritable objet que vous pouvez enregistrer, transmettre et appeler ultérieurement.
greeter = Proc.new { puts "Hello!" }
greeter.call
greeter.callCréer des Proc
Deux façons courantes de créer un Proc : Proc.new { ... } et la méthode Kernel plus courte proc { ... }. Les deux produisent le même type d’objet.
double = proc { |x| x * 2 }
p double.call(5)Appeler un Proc
Vous pouvez invoquer un Proc de plusieurs façons : .call, .() et la notation abrégée avec crochets [ ]. Elles sont équivalentes.
square = proc { |x| x * x }
puts square.call(4)
puts square.(4)
puts square[4]Les Proc acceptent des arguments
Les Proc acceptent des paramètres comme les blocs, déclarés entre les barres verticales.
add = proc { |a, b| a + b }
puts add.call(3, 7)Stocker des Proc dans des tableaux
Comme les Proc sont des objets, vous pouvez conserver une collection de comportements et les exécuter tour à tour.
ops = [proc { |x| x + 1 }, proc { |x| x * 2 }]
result = 5
ops.each { |op| result = op.call(result) }
puts resultTransmettre un Proc comme bloc
Préfixez un Proc avec & pour le transmettre à une méthode qui attend un bloc. Ruby le reconvertit en bloc.
printer = proc { |n| puts "Item: #{n}" }
[1, 2, 3].each(&printer)Capturer des blocs comme Proc
L’inverse fonctionne également : &block dans la signature d’une méthode capture le bloc fourni sous forme de Proc que vous pouvez stocker.
def make_handler(&block)
block
end
h = make_handler { |msg| puts "Got: #{msg}" }
h.call("ping")Les Proc sont souples avec l’arité
Une caractéristique essentielle : les Proc ne signalent pas les nombres d’arguments incorrects. Les arguments manquants deviennent nil et les arguments supplémentaires sont ignorés.
p1 = proc { |a, b| puts "a=#{a.inspect} b=#{b.inspect}" }
p1.call(1)
p1.call(1, 2, 3)Les Proc et return
Un return dans un Proc renvoie le résultat depuis la méthode environnante, et non depuis le Proc uniquement. Cela peut vous surprendre ; soyez donc prudent.
def demo
p = proc { return 10 }
p.call
20 # never reached
end
puts demoLes Proc capturent leur environnement
Un Proc mémorise les variables de la portée où il a été défini. Il s’agit ainsi d’une fermeture, un sujet que nous étudierons plus loin.
factor = 3
times_factor = proc { |n| n * factor }
puts times_factor.call(10)Mise en pratique
Les Proc transforment les blocs en objets de première classe :
- Créez-les avec
proc { }ouProc.new. - Exécutez-les avec
.call,.()ou[ ]. - Transmettez-les aux méthodes avec
&. - Ils sont souples concernant l’arité et utilisent le
returnau niveau de la méthode.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts textVérification rapide
Vérifiez votre compréhension des Proc.
Récapitulatif
Vous avez appris à utiliser les Proc :
- Un Proc est un bloc enveloppé dans un objet.
- Créez-le avec
proc/Proc.new; exécutez-le avec.call. - Transmettez-le aux méthodes avec
&. - Il tolère les divergences d’arité et utilise le
returnau niveau de la méthode.
shout = proc { |word| puts word.upcase }
shout.call("ruby")Questions Fréquemment Posées
La leçon « Procs » est-elle gratuite ?
Oui — le texte complet de « Procs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ruby Academy, passe à CoddyKit PRO. Le cours Ruby Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Procs » ?
Objets blocs réutilisables Tu pratiques Ruby Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Ruby Academy ?
Aucune expérience préalable n'est requise. Ruby Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Procs » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Ruby Academy ?
Oui. Chaque leçon Ruby Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.