Sobes.tech
Middle

Qu'est-ce qu'une lambda et une procédure en Ruby?

sobes.tech IA

Réponse de l'IA

Lambda et procédure en Ruby sont des objets Proc qui encapsulent des blocs de code.

Les principales différences résident dans leur comportement lors du retour de valeurs et dans le nombre d'arguments qu'ils acceptent :

  • Lambda :

    • Contrôle strict du nombre d'arguments (comme une méthode normale).
    • return à l'intérieur d'une lambda ne retourne une valeur que de elle-même.
    # Exemple de lambda
    lambda_proc = lambda { |a, b| return a + b }
    puts lambda_proc.call(1, 2) # 3
    
    # Erreur : nombre incorrect d'arguments
    # lambda_proc.call(1)
    
  • Proc :

    • Moins strict sur le nombre d'arguments (peut ne pas générer d'erreur si plus ou moins d'arguments que prévu).
    • return à l'intérieur d'un proc retourne une valeur depuis le contexte où il a été défini (comme return dans un bloc).
    # Exemple de proc
    proc_proc = Proc.new { |a, b| return a + b }
    
    def method_with_proc
      proc_proc = Proc.new { return "retour du méthode" }
      proc_proc.call
      "ce texte ne sera pas affiché"
    end
    
    puts method_with_proc # retour du méthode
    
    # Ne génère pas d'erreur avec un nombre incorrect d'arguments (même si le comportement peut être imprévisible)
    # proc_proc.call(1)
    

Comparaison :

Caractéristique Lambda Proc
Contrôle des arguments Strict Non strict
Comportement return Retourne depuis la lambda Retourne depuis le contexte
Classe Proc (mais avec le drapeau lambda?) Proc
Création lambda { ... }, -> { ... } Proc.new { ... }, proc { ... }

Dans la plupart des cas, pour transmettre des blocs de comportement similaires à des méthodes, il est préférable d'utiliser des lambdas en raison de leur comportement plus prévisible avec les arguments et return. Les procédures sont plus souvent utilisées pour des tâches de bas niveau ou lorsque leur comportement spécifique de return est souhaité.