Menu
Coddy logo textTech

yield Anahtar Kelimesi

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

Kendi tanımladığınız metotlar, tıpkı yerleşik olanlar gibi bir blok alabilir. Metodun içinde, yield anahtar kelimesi çağıranın ilettiği bloğu çalıştırır.

def greet
  puts "Before block"
  yield
  puts "After block"
end

greet do
  puts "Hi from the block!"
end
# Blok öncesi
# Bloktan selamlar!
# Blok sonrası

Argümanları yield ifadesine vererek bloğa geçirebilirsiniz:

def with_each(items)
  items.each { |item| yield item }
end

with_each([10, 20, 30]) { |n| puts n }
# 10
# 20
# 30

Eğer bir metot yield çağırırsa ancak çağıran bir blok geçmediyse, Ruby bir hata fırlatır. block_given? önce kontrol etmenizi sağlar:

def maybe
  yield if block_given?
end

maybe                       # hiçbir şey olmaz
maybe { puts "called!" }    # çağrıldı!
challenge icon

Görev

Kolay

Bir n (bir tam sayı) argümanı alan ve bloğuna 1, 2, ..., n değerlerini teker teker yield eden repeat adında bir metot tanımlayın.

Ardından metodunuzu n = 4 ve yield edilen her değer için "Got <value>" yazdıran bir blok ile çağırın.

Çıktı şöyledir:

Got 1
Got 2
Got 3
Got 4

Kopya kağıdı

Çağıran tarafından iletilen bloğu çalıştırmak için bir metodun içinde yield kullanın:

def greet
  yield
end

greet { puts "Hi!" } # Hi!

yield aracılığıyla bloğa argümanlar iletin:

def with_each(items)
  items.each { |item| yield item }
end

with_each([1, 2]) { |n| puts n }

yield çağırmadan önce bir blok sağlanıp sağlanmadığını kontrol etmek için block_given? kullanın:

def maybe
  yield if block_given?
end

Kendin dene

# TODO: bloğuna 1..n yield eden `repeat` metodunu tanımlayın

# TODO: "Got <value>" yazdıran bir blok ile repeat(4) çağrısı yapın
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