Snap 4.0

Snap หรือ BYOB ในเวอร์ชัน 4.0 อยู่ในรูปแบบของเว็บ ทำให้ไม่ต้องดาวน์โหลดโปรแกรมมาที่เครื่องก่อน ตอนนี้อยู่ในช่วงทดสอบ ใครสนใจสามารถเข้าไปทดลองใช้ได้ที่ http://snap.berkeley.edu/run และยังมีคู่มือฉบับร่าง ให้ลองอ่านก่อนด้วย

ฟังก์ชันที่เรียกต้วมันเอง

ฟังก์ชันที่เรียกต้วมันเอง เป็นฟังก์ชันชนิดหนึ่งเรียกว่า Recursive function ทำไมถึงต้องมีฟังก์ชันชนิดนี้ แล้วมันมีประโยชน์อย่างไร มาหาคำตอบกัน แนวคิดของฟังก์ชันที่เรียกตัวมันเอง มีให้เห็นในปรากฏการณ์ทางธรรมชาติเหมือนกัน เช่น รูปร่างของเกล็ดหิมะ ต้นไม้ ใบเฟิร์น หรือ เปลือกหอย เป็นต้น รูปร่างของพวกมันจะมีหน้าตาเหมือนกัน แต่จะมีขนาดไม่เท่ากัน รูปแบบเหล่านี้เรียกว่า แฟร็กทัล (Fractal) ในการคำนวณบางอย่าง เช่น การหาค่า factorial 5! = 5 x 4 x 3 x 2 x1 = 120 สามารถเขียนได้อีกรูปแบบหนึ่งคือ 5! = 5 x 4! ซึ่ง 4! = 4 x 3! , 3! = 3 x 2!, …

หลักการเขียนโปรแกรมใน BYOB ตอนที่ 2

ฟังก์ชัน square สามารถวาดรูปสี่เหลี่ยม 100 x 100 ได้ขนาดเดียวทุกคร้้งที่เรียกใช้ฟังก์ชันนี้ ซึ่งไม่ค่อยยืดหยุ่น ถ้าเราต้องการสี่เหลี่ยมขนาดอื่นละ ทำได้ไหม ตามหลักการแล้ว คือการทำ Generalization ให้กับฟังก์ชัน โดยการส่งผ่านข้อมูลให้กับฟังก์ชัน เพื่อให้ฟังก์ชั่นทำงานได้ยืดหยุ่นขึ้น ไม่เฉพาะเจาะจงอยู่กับการทำงานเพียงแบบเดียว (วาดรูปสี่เหลี่ยม 100 x 100) เช่น ถ้าต้องการวาดสี่เหลี่ยมขนาดอื่นๆ ทำได้ด้วยการให้ข้อมูลขนาด (size) ให้กับฟังก์ชัน square เพื่อให้ได้สี่เหลี่ยมตามขนาดที่ใส่เข้าไปในฟังก์ชัน square (size) อย่างไรก็ตาม รูปที่ได้ยังเป็นสี่เหลี่ยมจัตุรัสทุกคร้้ง ถ้าต้องการให้เป็นสี่เหลี่ยมผืนผ้าละ ต้องทำอย่างไร ก็คงต้องให้ข้อมูลมากขึ้น คือให้ความกว้าง กับ ความยาวของสี่เหลี่ยม จะเห็นได้ว่ายิ่งต้องการให้ฟังก์ชันทำงานได้หลากหลายรูปแบบ ก็ต้องเพิ่มข้อมูลให้กับฟังก์ชันด้วย ลองนึกดูว่า ถ้าต้องการให้ได้สี่เหลี่ยมแบบอื่นด้วยละ เช่น สี่เหลี่ยมขนมเปียกปูน สี่เหลี่ยมคางหมู ต้องเพิ่มข้อมูลอะไรบ้างให้กับฟังก์ชัน นอกจากเพิ่มข้อมูลเข้าไปแล้ว การทำงานภายในของฟังก์ชันก็ต้องเปลี่ยนด้วย มากน้อยขึ้นกับวัตถุประสงค์ใหม่ของฟังก์ชัน โดยสรุป ระดับของการทำ Generalization ให้กับฟังก์ชันต้องดูความเหมาะสม ฟังก์ชันที่ทำงานได้สารพัดอย่างย่อมมีความซับซ้อนตามไปด้วย การใส่ข้อมูลให้กับฟังก์ชัน ทำให้หน้าตาของมัน (function interface) เปลี่ยนไป ฟังก์ชันด้านซ้ายคือ ฟังก์ชันวาดรูปสี่เหลี่ยมจัตุรัสได้หลายขนาด "square (size) steps" กับฟังก์ชันวาดรูปสี่เหลี่ยมผืนผ้าตามขนาดกว้าง x ยาว  "square (width) …

หลักการเขียนโปรแกรมใน BYOB ตอนที่ 1

ความสามารถในการสร้างฟังก์ชัน หรือการสร้างบล็อกใหม่ขึ้นมาได้ใน BYOB เป็นการเพิ่มขีดความสามารถในการเขียนโปรแกรมให้กับ Scratch เนื่องจากฟังก์ชันถือเป็นเครื่องมือสำคัญ ในการเขียนโปรแกรม แต่ใช่ว่า Scratch จะทำอะไรเกี่ยวกับฟังก์ชันไม่ได้เลย ลองอ่าน ฟังก์ชันใน Scratch 1 และ 2 การสร้างฟังก์ชันเป็นการลดความซับซ้อน และซ่อนรายละเอียดของการทำงาน ให้อยู่ในรูปของชื่อฟังก์ชันแทน ในทางทฤษฎีเรียกกระบวนการนี้ว่า แอ็บสแทรกชัน (Abstraction) การสร้างฟังก์ชัน หรือ การนิยามฟังก์ชัน เช่นฟังก์ชัน square เป็นการผูกชื่อของฟังก์ชัน (square) กับ ส่วนคำสั่งการทำงานของฟังก์ชัน (วาดรูปสี่เหลี่ยมขนาด 100 x 100) เมื่อนิยามฟังก์ชัน square ขึ้นมาแล้ว ชื่อฟังก์ชันจะแทนแนวคิดที่อยู่เบื้องหลัง (การวาดรูปสี่เหลี่ยม) เมื่อใดที่ต้องการวาดรูปสี่เหลี่ยม ก็สามารถเรียกใช้งานฟังก์ชันผ่านการเรียกชื่อฟังก์ชัน square (function call) ส่วนการทำงานจริงจะอยู่ที่ตัวฟังก์ชัน (function body) ซึ่งมีคำสั่งต่างๆ ตั้งแต่จรดปากกา เดินเป็นรูปสี่เหลี่ยมพร้อมกับลากเส้นไปด้วย เมื่อไรจำเป็นต้องสร้างฟังก์ชันขึ้นใช้เอง โดยปกติฟังก์ชันมักถูกคิดไว้ก่อนแล้ว ตอนออกแบบโปรแกรม อย่างไรก็ตาม เมื่อเขียนโปรแกรมไป …

ใส่ข้อมูลให้บล็อก square

ณ ขณะนี้บล็อก square สามารถวาดสี่เหลี่ยมได้เพียงขนาดเดียว (100 x 100) ทำอย่างไรถึงจะกำหนดขนาดสี่เหลี่ยมได้เอง เราทำได้โดยการใส่ข้อมูลกำหนดความยาวของด้านสี่เหลี่ยมให้กับบล็อก square ซึ่งจะทำให้ Alonzo เดินตามค่าที่กำหนดให้ แทนที่จะเป็น 100 เพียงอย่างเดียว ก่อนอื่นนำเอา Block editor ออกมาก่อน ด้วยการคลิกขวาที่บล็อก square จากนั้นคลิกเลือก edit เมื่อนำเมาส์มาวางเหนือบล็อกที่กำลังสร้างอยู่ ณ ขณะนี้มีข้อมูล square อันเดียวเป็นชื่อของบล็อกนี้ เมื่อเอาเมาส์ชี้ที่ square จะมีเครื่องหมายบวก (+) ปรากฏทั้งสองด้าน สามารถคลิกเพื่อสร้างข้อมูลเพิ่มได้อีกเหมือนกัน แต่ตำแหน่งของมันจะขึ้นกับข้อมูลที่เมาส์ชี้อยู่ (square ) ถ้าคลิกที่ตัว square เอง จะปรากฏหน้าต่างบอกรายละเอียดของข้อมูล square และถ้าไม่ต้องการข้อมูลนี้แล้ว สามารถลบทิ้งได้ ด้วยการคลิกปุ่ม Delete เมื่อคลิกเครื่องหมายบวกอันใดอันหนึ่งจะปรากฏหน้าต่างให้สร้างชื่อข้อมูลเข้า และสามารถเลือกชนิดของข้อมูลได้ 2 แบบ คือ จะเป็นเพียงชื่อ (Title text) ใช้สื่อสารเท่านั้น หรือ จะเป็นชื่อของตัวแปร …