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 სპეციფიკური ქცევა სასურველია.