ทบทวนบล็อก
ส่งบล็อกให้เมธอด
ทบทวนบล็อก เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
การส่งบล็อกให้เมธอด
บล็อกคือกลุ่มโค้ดที่คุณส่งให้เมธอด เมธอด Ruby หลายรายการ เช่น each รับบล็อกและเรียกใช้ให้คุณ บล็อกเป็นพื้นฐานของรูปแบบการเขียน Ruby ที่สื่อความหมายได้ดี
[1, 2, 3].each do |n|
puts n * 10
endไวยากรณ์บล็อกสองแบบ
ใช้ do ... end สำหรับบล็อกหลายบรรทัด และใช้วงเล็บปีกกา { } สำหรับคำสั่งบรรทัดเดียวสั้น ๆ ทั้งสองแบบทำงานเหมือนกัน
[1, 2, 3].each { |n| puts n }พารามิเตอร์ของบล็อก
ชื่อที่อยู่ระหว่างเครื่องหมายไปป์ | | คือพารามิเตอร์ของบล็อก เมธอดจะเป็นผู้กำหนดว่าจะส่งค่าใดเข้ามา
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endyield เรียกใช้บล็อก
ภายในเมธอด yield จะเรียกใช้บล็อกที่ถูกส่งเข้ามา คุณไม่จำเป็นต้องประกาศบล็อกในรายการพารามิเตอร์เพื่อใช้ yield
def twice
yield
yield
end
twice { puts "Hi" }yield พร้อมอาร์กิวเมนต์
ส่งค่าให้บล็อกผ่าน yield ค่าเหล่านั้นจะไปอยู่ในพารามิเตอร์ของบล็อก
def greet_each(names)
names.each { |n| yield n }
end
greet_each(["Ann", "Bo"]) { |name| puts "Hello #{name}" }block_given?
การเรียกใช้ yield โดยไม่มีบล็อกจะทำให้เกิดข้อผิดพลาด ให้ตรวจสอบด้วย block_given? ก่อน เพื่อทำให้บล็อกเป็นตัวเลือก
def maybe
if block_given?
yield
else
puts "No block provided"
end
end
maybe
maybe { puts "Block ran" }บล็อกส่งคืนค่า
บล็อกจะประเมินค่าเป็นนิพจน์สุดท้ายของบล็อก เมธอดอย่าง map จะรวบรวมค่าที่ส่งคืนเหล่านั้นเป็นอาร์เรย์ใหม่
squares = [1, 2, 3, 4].map { |n| n * n }
p squaresค่าของ yield
yield เองจะส่งคืนค่าของบล็อก ดังนั้นเมธอดจึงสามารถแปลงข้อมูลนำเข้าผ่านบล็อกที่ผู้เรียกจัดเตรียมให้ได้
def transform(x)
yield x
end
result = transform(5) { |n| n + 100 }
puts resultการเก็บบล็อกด้วย &
ใส่ & ไว้หน้าพารามิเตอร์ตัวสุดท้ายเพื่อเก็บบล็อกเป็นออบเจ็กต์ Proc ที่คุณสามารถจัดเก็บหรือส่งต่อได้
def run(&block)
block.call
end
run { puts "Called via block.call" }พารามิเตอร์แบบมีหมายเลข
Ruby รุ่นใหม่ช่วยให้คุณไม่ต้องตั้งชื่อพารามิเตอร์ของบล็อกเพียงตัวเดียว โดยใช้ _1 (หรือ it ใน Ruby 3.4 ขึ้นไป) ซึ่งเหมาะสำหรับบล็อกสั้น ๆ
[10, 20, 30].each { puts _1 }นำทุกอย่างมาประกอบกัน
บล็อกช่วยให้เมธอดรับพฤติกรรมได้:
do...endหรือ{ }ใช้ส่งบล็อกyieldใช้เรียกใช้บล็อก และblock_given?ใช้ตรวจสอบว่ามีการส่งบล็อกมาหรือไม่&blockเปลี่ยนบล็อกให้เป็นออบเจ็กต์ที่นำกลับมาใช้ซ้ำได้
def repeat(times)
return unless block_given?
times.times { |i| yield i }
end
repeat(3) { |i| puts "Step #{i}" }ตรวจความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับบล็อกของคุณ
ทบทวน
คุณได้ทบทวนเรื่องบล็อกดังนี้:
- บล็อกส่งพฤติกรรมไปยังเมธอดผ่าน
do...endหรือ{ } yieldเรียกใช้บล็อกและส่งคืนค่าของบล็อกblock_given?ทำให้บล็อกเป็นตัวเลือกที่ไม่จำเป็นต้องส่งมาก็ได้&blockจับบล็อกไว้เป็น Proc
def wrap
puts "<<"
yield
puts ">>"
end
wrap { puts "content" }คำถามที่พบบ่อย
บทเรียน “ทบทวนบล็อก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ทบทวนบล็อก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ทบทวนบล็อก”
ส่งบล็อกให้เมธอด คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ทบทวนบล็อก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม
ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทบทวนบล็อก
- Proc
- แลมบ์ดา
- โคลเชอร์และขอบเขต