Kata Kunci yield
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 17 dari 56.
Method yang kamu definisikan sendiri dapat menerima block, sama seperti method bawaan. Di dalam method, kata kunci yield menjalankan block yang diberikan oleh pemanggil.
def greet
puts "Before block"
yield
puts "After block"
end
greet do
puts "Hi from the block!"
end
# Before block
# Hi from the block!
# After blockKamu bisa meneruskan argumen ke blok dengan memberikannya kepada yield:
def with_each(items)
items.each { |item| yield item }
end
with_each([10, 20, 30]) { |n| puts n }
# 10
# 20
# 30Jika sebuah method memanggil yield tetapi pemanggil tidak memberikan block, Ruby akan menimbulkan error. block_given? memungkinkan kamu memeriksanya terlebih dahulu:
def maybe
yield if block_given?
end
maybe # tidak terjadi apa-apa
maybe { puts "called!" } # dipanggil!Tantangan
MudahDefinisikan method bernama repeat yang menerima satu argumen n (bilangan bulat) dan memberikan nilai 1, 2, ..., n kepada block-nya, satu per satu.
Lalu panggil method-mu dengan n = 4 dan block yang mencetak "Got <value>" untuk setiap nilai yang diberikan.
Output-nya adalah:
Got 1
Got 2
Got 3
Got 4Coba sendiri
# TODO: definisikan `repeat` yang mengirimkan nilai 1..n ke bloknya
# TODO: panggil repeat(4) dengan blok yang mencetak "Got <value>"
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami String
Ringkasan Method StringInterpolasi StringMenelusuri StringMemisahkan dan MenggabungkanRekap: Perangkai String4Block, Proc, dan Lambda
Apa Itu Block?do..end vs Kurung KurawalKata Kunci yieldParameter BlockProc dan LambdaRangkuman, Iterator Kustom5Andalan Enumerable
Select dan RejectMerangkai MapReduce / Injectcount, all?, any?, none?group_by dan partitionsort_by, min_by, max_byRekap: Alur Data8Pengambilan Keputusan Lanjutan
Case dengan class & regexwhen dengan Banyak NilaiOperator Ternaryif / unless SebarisUlasan, Pengklasifikasi NilaiLatihan sendiri: Compiler Ruby online