yield ngedhot block sing dipassake menyang metode — iku mindahake kontrol menyang block, opsional ngandhut nilai menyang iku, banjur mulai maneh metode. Iku carane metode ngedhot block sing wis diwenehake menyang iku, lan mekanisme konco ruby iteration lan akeh pola sing cakep.
Dasar yield — ngedhot block sing wis diwenehake
def greet
puts "before"
yield # calls the block passed to greet
puts "after"
end
greet { puts "hello" }
# Output: before / hello / after
Yen metode ngedhot yield, iku njalani block sing wis dipassake menyang iku (ing { } utawa do...end). Metode ngontrol kapan (lan sapirang kali) block njalani.
yield karo argument — ngandhut nilai menyang parameter block
def each_pair
yield("a", 1) # pass values to the block's parameters
yield("b", 2)
end
each_pair { |key, value| puts "#{key}: #{value}" }
# Output: a: 1 / b: 2
yield(args) ngandhut nilai menyang parameter block (|key, value|) — iku carane method iterasi menehi saben elemen menyang block.
Ngleksanani iterasi karo yield
def my_each(array)
i = 0
while i < array.length
yield(array[i]) # yield each element to the block
i += 1
end
end
my_each([1, 2, 3]) { |n| puts n * 2 } # 2, 4, 6
# this is essentially how Array#each works internally!
Iku nuduhake carane method ruby iterasi (each, map, etc.) bisa gumana jero — iku yield saben elemen menyang block.
block_given? lan ngagal block
def maybe_yield
if block_given? # check whether a block was passed (avoid an error)
yield
else
"no block"
end
end
# explicitly capture the block as a parameter (with &)
def run(&block) # &block captures the block as a Proc object
block.call # call it explicitly
end
block_given? nandani yen block wis dipassake (ngehindhari LocalJumpError), lan &block ngagal block minangka Proc obyek sing bisa disimpen utawa dipassake maneh.
Kenapa iku penting
Paham yield iku ilmu ruby sing penting — iku mekanisme carane metode ngedhot block, sing dadi fondasi ruby signature iterasi lan akeh pola cakep, dadi nanggepi iku ndadangi carane akeh ruby bisa gumana. yield ngedhot block sing dipassake menyang metode (mindahake kontrol menyang iku, opsional ngandhut nilai), sing presise carane method ruby iterasi (each, map, select) bisa gumana jero — iku yield saben elemen menyang block.
Paham iki nggolehake misteri ruby iterasi blok lan nglidhake sampeyan nulis metode sampeyan kang nggatari block — kapabilitas kuat kanggo nggawe API sing ekspresif, iterator khusus, metode manajemen sumber daya (persiapan/pembersihan konco block), lan DSL.
Ngerti yield (ngedhot block, ngandhut argument menyang iku), block_given? (aman nandani apa block wis dipassake, ngehindhari kesalahan), lan &block (eksplisit ngagal block minangka Proc) penting kanggo paham carane ruby iterasi lan metode katanggap-blok bisa gumana lan kanggo nulis metode blok sampeyan.
Sukung block iku pusat ruby lan yield iku carane metode ngunakake iku, paham yield ndadangi pangerten deep carane ruby paling khas fitur (block) lan nglidhake sampeyan nulis jenis metode katanggap-blok cakep sing golekake ruby ekspresif — katrampilan berharga kanggo mbangun API resik lan topik interview umum sing menehi kuwat pangerten carane ruby mekanisme blok bisa gumana jero ilmu.
