ถามเกี่ยวกับ Code Blocks

ในหนังสือ Ruby ผมเห็นเรื่อง Code Blocks ซึ่งมีศัพท์แปลกๆคือ Proc และ lambda พอตามต่อไปอีกพบว่ามันไปยืมมาจาก functional programming ไม่ทราบว่าการโปรแกรมลักษณะนี้มีประโยชน์อย่างไร และใช้บ่อยไหม ถ้ายกตัวอย่างในแง่ของ best practices ได้ก็จะดีมากครับ :)

sugree's picture

ผมเจอตัวอย่างแบบจำเป็นอย่างยิ่งที่ http://www.codenone.com/node/250

nontster's picture

ขอบคุณครับ ^^

ตอนนี้เข้าใจมากขึ้นแล้ว บางคนเรียกว่า Blocks หรือ Closures ถ้าใครยังไม่เข้าใจลองอ่าน concept ได้จาก link ด้านล่าง หนังสือที่ผมมีอยู่อธิบายเรื่องนี้ได้ไม่ดี เลยต้องไปหาอ่านจากข้างนอก

ถ้าเขียน program ภายใต้ context ของ functional language แล้ว
การ pass function เป็น parameter เป็นเรื่องปกติที่ต้องทำเลย


ลักษณะการ pass function หรือ procedure เป็น parameter
มีศัทพ์เรียกว่า Higer Order Procedure หรือ Higher order function
http://en.wikipedia.org/wiki/Higher-order_function
http://pphetra.blogspot.com/2005/11/higher-order-procedures.html


เราอาจจะพูดได้ว่า block ใน ruby ก็คือ syntactic suger สำหรับสร้าง anonymous Proc นั่นเอง
(เหมือนในหลักการ, implement จริงๆไม่ใช่
อ่านได้ใน http://www.ruby-forum.com/topic/71221)


ส่วน Closure กับ Block ต่างกันอย่างไร
Closure ก็คือ Block ที่มีการ capture ตัวแปรที่อยู่นอก block ตอนที่ define
อธิบายภาษาไทยยากจัง
ลองอ่านนี่ดู http://www.artima.com/intv/closures2.html
หรืออ่านตัวอย่างนี้ ก็ชัดเจนดี
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/8255


nontster's picture

ขอบคุณครับพี่ เดี๋ยวลองดูต่อ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น