Sobes.tech
Middle

Лямбда ва процедура дар Ruby чӣ аст?

sobes.tech AI

Ҷавоб аз AI

Лямбда һәм Ruby-да процедура — бу Proc объектлары, блок кодын инкапсуляцияли.

Асосий аерма — аларның кайтару бәясе һәм кабул ителә торган аргументлар саны буенча:

  • Лямбда (Lambda):

    • Аргументлар санына каты контроль (гадәти метод кебек).
    • Лямбда эчендә return — ул бары тик үзеннән генә бәя кайтара.
    # Лямбда мисалы
    lambda_proc = lambda { |a, b| return a + b }
    puts lambda_proc.call(1, 2) # 3
    
    # Хата: дөрес булмаган аргумент саны
    # lambda_proc.call(1)
    
  • Процедура (Proc):

    • Аргументлар санына карата каты түгел (аргументлар күбрәк яки аз булса да хата китермәскә мөмкин).
    • Процедура эчендә return — ул аны билгеләгән контексттан бәя кайтара (блоктагы кебек).
    # Процедура мисалы
    proc_proc = Proc.new { |a, b| return a + b }
    
    def method_with_proc
      proc_proc = Proc.new { return "методтан кайту" }
      proc_proc.call
      "бу текст күрсәтелмәс"
    end
    
    puts method_with_proc # методтан кайту
    
    # Дөрес булмаган аргумент санына хата китерми (тәэсире билгесез булырга мөмкин)
    # proc_proc.call(1)
    

Чагыштыру:

Характеристика Лямбда (Lambda) Процедура (Proc)
Аргументлар контроле Катгый Катгый түгел
return эшчәнлеге Үзендә генә бәя кайтара Контексттан бәя кайтара
Класс Proc (ләкин lambda? флагы белән) Proc
Ясау ысулы lambda { ... }, -> { ... } Proc.new { ... }, proc { ... }

Күп очракта, методлар белән охшаш эшләүче блокларны тапшыру өчен, лямбдаларны куллану өстенрәк, чөнки аларның аргументлар һәм return белән эшчәнлеге күбрәк фараз ителә. Процедуралар гадәттә түбән дәрәҗәле бурычлар өчен яки return үзенчәлекле эшчәнлеге кирәк булган очракларда кулланыла.