Sobes.tech
Middle

Ruby-də lambda və prosedur nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Ruby-də lambda və prosedur Proc obyektləridir və kod bloklarını kapsülləyirlər.

Əsas fərqlər, onların dəyəri geri qaytarma davranışında və qəbul edilən arqumentlərin sayında olur:

  • Lambda:

    • Arqumentlərin sayını sərt şəkildə nəzarət edir (adi metod kimi).
    • Lambda daxilində return yalnız özündən dəyər qaytarır.
    # Lambda nümunəsi
    lambda_proc = lambda { |a, b| return a + b }
    puts lambda_proc.call(1, 2) # 3
    
    # Xəta: düzgün olmayan arqument sayı
    # lambda_proc.call(1)
    
  • Proc:

    • Arqumentlərin sayına daha az sərtdir (daha çox və ya az arqument olsa belə xəta verməyə bilər).
    • Proc daxilində return dəyəri kontekstdən qaytarır, harada təyin olunubsa (bloku daxilindəki return kimi).
    # Proc nümunəsi
    proc_proc = Proc.new { |a, b| return a + b }
    
    def method_with_proc
      proc_proc = Proc.new { return "metoddan dönüş" }
      proc_proc.call
      "bu mətn göstərilməyəcək"
    end
    
    puts method_with_proc # metoddan dönüş
    
    # Düzgün olmayan arqument sayı ilə xəta vermir (baxmayaraq ki, davranış qeyri-müəyyən ola bilər)
    # proc_proc.call(1)
    

Müqayisə:

Xüsusiyyət Lambda Proc
Arqumentlərin idarə olunması Sərt Nəzarətsiz
return-in davranışı Lambda-dan çıxarır Kontekstdən çıxarır
Sinif Proc (amma lambda? bayrağı ilə) Proc
Yaradılması lambda { ... }, -> { ... } Proc.new { ... }, proc { ... }

Əksər hallarda, metodlara bənzər davranış bloklarını ötürmək üçün lambda istifadə etmək daha məsləhətdir, çünki arqumentlər və return ilə daha əvvəlcədən proqnozlaşdırıla bilər. Proc-lər isə daha çox aşağı səviyyəli tapşırıqlar üçün və ya onların xüsusi return davranışı lazım olduqda istifadə olunur.