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. Etrafa aktarabileceğiniz, kaydedebileceğiniz ve daha sonra çağırabileceğiniz bir kod parçası istediğinizde, onu bir Proc veya lambda içine sararsınız.

Bir Proc, Proc.new veya proc anahtar kelimesi ile oluşturulur. Bunu .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 bağımsız değişken geçirdiğinizi kontrol eder. Ok biçimi olan -> yaygın yazım şeklidir:

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

Her ikisi de başına & eklenerek bir blok bekleyen bir metoda geçirilebilir:

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

Daha sıkı argüman denetimi istediğinizde bir lambda kullanın; daha hafif, daha esnek bir davranış istediğinizde ise bir Proc kullanın.

challenge icon

Görev

Kolay

Bir sayı alan ve bunu 3 ile çarparak döndüren tripler adında bir lambda oluşturun.

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

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

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

30
3, 6, 9

Kendin dene

# TODO: `tripler`'ı bir lambda olarak tanımla

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

# TODO: satır 1, tripler.call(10) yazdır
# TODO: satır 2, numbers'ı &tripler ile map'le, ", " ile birleştir
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