Menu
Coddy logo textTech

Procs ve Lambdalar

Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 19 / 56.

Bir blok bir nesne değildir, onu bir değişkende saklayamazsınız. Etrafta dolaştırabileceğiniz, kaydedebileceğiniz ve daha sonra çağırabileceğiniz bir kod parçası istediğinizde, onu bir Proc veya bir lambda içine sararsınız.

Bir Proc, Proc.new veya proc anahtar kelimesi ile oluşturulur. Onu .call ile çağırın:

double = proc { |n| n * 2 }
puts double.call(5)   # 10
puts double.call(7)   # 14

Bir lambda benzerdir ancak daha katıdır; doğru sayıda argüman geçip geçmediğinizi kontrol eder. Ok formu -> yaygın yazım şeklidir:

square = ->(n) { n * n }
puts square.call(4)   # 16
puts square.(4)       # 16  (.call için kısa yol)

Her ikisi de, önüne & eklenerek bir blok bekleyen bir metoda aktarılabilir:

[1, 2, 3].map(&double)   # [2, 4, 6]
[1, 2, 3].map(&square)   # [1, 4, 9]

Daha katı argüman kontrolü istediğinizde bir lambda kullanın; daha hafif, daha esnek bir davranış istediğinizde bir Proc kullanın.

challenge icon

Görev

Kolay

Bir sayı alan ve bu sayıyı 3 ile çarpılmış halde döndüren tripler adında bir lambda oluşturun.

Ardından virgülle ayrılmış bir tam sayı listesi okuyun ve ayrı satırlarda şunları yazdırın:

  1. tripler.call(10) çağrısının sonucu
  2. Üç katına çıkarılmış (map(&tripler) kullanın) ve , ile birleştirilmiş girdi sayıları

1,2,3 girdisi için çıktı şöyledir:

30
3, 6, 9

Kopya kağıdı

Proc – bir değişkende saklanan yeniden kullanılabilir blok:

double = proc { |n| n * 2 }
double.call(5)   # 10

Lambda – daha katı argüman kontrolü, ok sözdizimi:

square = ->(n) { n * n }
square.call(4)   # 16
square.(4)       # 16 (kısayol)

& kullanarak bir blok bekleyen bir metoda bir Proc/lambda geçirin:

[1, 2, 3].map(&double)   # [2, 4, 6]

Kendin dene

# YAPILACAK: tripler'ı bir lambda olarak tanımlayın

numbers = gets.chomp.split(",").map(&:to_i)

# YAPILACAK: 1. satır, tripler.call(10) ifadesini yazdırın
# YAPILACAK: 2. satır, numbers dizisini &tripler ile eşleyin (map), ", " ile birleştirin (join)
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler