แนวคิดเบื้องหลัง Blockly ในมุมมองของนักพัฒนาซอฟต์แวร์

ช่วงนี้ได้มาศึกษา Blockly ของ Google โครงการ Blockly ถูกนำไปประยุกต์ใช้ในหลายโครงการโดยส่วนใหญ่ เน้นเป็นเครื่องมือสำหรับเด็กเพื่อฝึกหัดเขียนโปรแกรม โดยส่วนตัวรู้สึกแปลก เพราะการเขียนโปรแกรมต้องเขียนเป็นชุดคำสั่งและชุดคำสั่งก็ต้องเขียนเป็นชุดคำสั่งจริงๆ บน text editor ไม่ใช่เป็นการลาก block เอามาวางต่อกัน แล้วจะเหมาะสำหรับเด็กที่ต้องการฝึกเขียนโปรแกรมได้อย่างไร แต่หลังจากที่ได้อ่านแนวทางการออกแบบ block สำหรับนักพัฒนา จากเว็บไซต์ Google Developer ก็เข้าใจว่ามีแนวทางการออกแบบไม่ใช่แค่ block มาต่อๆ กันแล้วใช้งานได้ เหมือนอย่างที่เข้าใจ

การออกแบบเป็นสิ่งสำคัญ Blockly ถือเป็น IDE รูปแบบหนึ่ง ซึ่งการออกแบบ block ในแต่ละแบบสามารถกำหนดเงื่อนไขต่างๆ ได้ เช่น ชุดคำสั่งเดี่ยว คำสั่งส่งค่า (output statement) คำสั่งรับค่า (input statement) เป็นต้น ซึ่งเงื่อนไขต่างๆ สามารถกำหนดได้ตามความเหมาะสมของผู้ออกแบบ ลองมาดูตัวอย่าง block แบบต่างๆ กัน

ชุดคำสั่งที่มี input / output ตัวอย่างเช่น คำสั่งหาความยาวของตัวอักษร ซึ่งคำสั่งนี้ต้องรับค่าเป็น string เมื่อคำนวนความยาวได้แล้วจึงส่งข้อมูลออกไป ตัวอย่าง block จะเป็นแบบนี้

จะเห็นว่ามีการรับเข้าทางขวาและส่งค่าออกทางซ้าย ตามรูป ซึ่งผู้ออกแบบสามารถกำหนดได้ว่า block แบบนี้จะต้องต่อกับ block ที่เป็นตัวแปล string เท่านั้น

block ที่มีการเชื่อมต่อกับคำสั่งถัดไป (Next Connection) ชุดคำสั่งประเภทนี้จะมีจุดเชื่อมในส่วนท้ายของ block เพื่อต่อกับคำสังถัดไป ถ้าเป็นคำสั่งแบบเหตุการจะเพิ่มหมวกเข้าไปเพื่อแสดงความแตกต่าง

block ที่มีการเชื่อมต่อกับคำสั่งก่อนหน้า (Previous Connection) ชุดคำสั่งประเภทนี้จะมีจุดเชื่อมในส่วนบนของ block

block ส่งค่า (Block Output) โดยส่วนใหญ่จะส่งค่าออกมา 1 ค่า รูปแบบของ block จะมีหัวคล้ายจิ๊กซอออกมาทางด้านซ้ายของบล็อก ดังรูป

block รับค่า (Block Input) เป็น block ที่สามารถรับค่าที่ส่งออกมาจาก block อื่นๆ ได้ ซึ่งมีรูปร่างหลายแบบ จากตัวอย่างเช่นคำสั่งวนรอบตามเงื่อนไข

จากภาพ block เราจะเห็นว่าสามารถเลือกคำสั่งที่เป็น drop down ได้ และใส่เงื่อนไขให้ได้ ซึ่งเป็น block ที่มี input และ output นั่นเอง จากภาพเป็นฟังก็ชั่น isEmpty(var) เป็นต้น

ลักษณะของ Input field ยังมีหลายแบบ เป็น dropdown list, รับค่าจาก block อื่น หรือแม้กระทั่งกรอกข้อมูลลงไปได้

สำหรับชนิดของข้อมูลที่จะรับเข้า หรือส่งออก สามารถกำหนดได้เช่นกัน ซึ่งฟิลด์ชนิดข้อมูลในเบื้องต้นมีดังนี้

  • field_input
  • field_dropdown
  • field_checkbox
  • field_colour
  • field_number
  • field_angle
  • field_variable
  • field_date
  • field_label
  • field_image

รูปแบบ Input มีดังนี้

  • input_value
  • input_statement
  • input_dummy

ลักษณะการเรียงขององค์ประกอบ block ก็สำคัญเช่นกัน บางประเทศเป็นการอ่านจากขวามาซ้าย (RTL) ไม่ได้เป็นการอ่านจากซ้ายมาขวา ดังนี้ต้องวางรูปแบบให้เหมาะสม

การเรียงลำดับของชุดคำสั่งในแต่ละ block ก็ควรสื่อความหมาย เช่น คำสั่ง repeat ต้องรับค่าตัวเลขจำนวนครั้งเข้ามา จากนั้นจึงวนรอบชุดคำสั่งภายใน เป็นต้น

การเรียงแบบ Inline หรือ External สำหรับการรับค่าก็มีรูปแบบแตกต่างกัน ตัวอย่างคำสั่ง count เรียงแบบ Inline, External

ฟิลด์ (Fields) สามารถกำหนดได้หลายรูปแบบตามประเภทของฟิลด์ เช่น

ฟิลด์แบบตัวเลข

ฟิลด์สำหรับป้ายกำกับ (Label)

ฟิลด์สำหรับรูปภาพ (Field Image)

ฟิลด์สำหรับตัวอักษร (Text Field)

ฟิลด์แบบตัวเลือก (Drop-down Field)

ฟิลด์แบบเช็คบ็อกซ์ (Checkbox Field) ส่วนใหญ่ใช้กับค่าที่เป็น boolean

ฟิลด์เลือกเชดสี (Color Picker Field)

ฟิลด์สำหรับตัวแปร (Variable Field)

ฟิลด์สำหรับตัวเลข (Number Field)

ฟิลด์สำหรับค่าองค์ศาของมุม (Angle Field)

ฟิลด์วันที่ (Date Field)

ผู้ออกแบบสามารถกำหนดคำแนะนำ (Tooltips) และลิงค์สำหรับข้อมูลเพิ่มเติมให้กับ block ได้ด้วย นอกจากนี้ยังมีแนวทางสำหรับ block ประเภทอื่นๆ ไว้ด้วยดังนี้

การตั้งค่า (Configuration) จะเป็น block ชุดคำสั่งเดียว สำหรับกำหนดคุณสมบัติต่างๆ ให้กับโปรแกรมนั้นๆ

คำสั่งต่อเนื่อง (Serial program) ชุดคำสั่งต่อเนื่องจะเป็นคำสั่งโดดๆ สามารถเอามาเรียงต่อกัน การประมวลผลจะเป็นไปตามลำดับของ block ที่เอามาเรียงต่อกันนั่นเอง

คำสั่งทำงานคู่ขนาน (Pararell program) block คำสั่งทำงานคู่ขนานจะประมวลผลอยู่คนละแกน (core) ของหน่วยประมวลผล อาจจะเรียกว่าเป็น task ก็ได้

คำสั่งเหตุการณ์ (Event Driven Program) block คำสั่งแบบนี้มักจะใช้กับเหตุการณ์ที่ถูกกำหนดไว้ เช่น เมื่อคลิกเมาส์ เมื่อกดปุ่ม เป็นต้น

นอกจาก block ที่เอามาเรียงต่อกันเป็นชุดคำสั่งแล้ว ระบบหลังบ้านของ Blockly จะมี generator ช่วยแปลง block ต่างๆ ออกมาเป็นชุดคำสั่งภาษาโปรแกรม เพื่อเอาไป compile เพื่อให้เป็นโปรแกรมตามปกติ