ภาษาแบบบล็อกกับภาษาแบบข้อความ

ภาษาแบบบล็อกแตกต่างจากภาษาแบบข้อความในหลายๆ ด้าน สาเหตุหลักคือภาษาแบบบล็อกออกแบบมาเพื่อผู้ใช้มือใหม่ ต่อไปนี้คือรายการสิ่งที่ควรพิจารณาเมื่อออกแบบภาษาแบบบล็อกของคุณเอง

ใช้รายการแบบฐาน 1

บล็อกที่เลือกตัวอักษรที่ดัชนีหนึ่งๆ ในสตริงและใช้ 1 เพื่อหมายถึงตัวอักษรแรก

นักเขียนโปรแกรมมือใหม่มักจะตกใจเมื่อพบรายการแบบฐาน 0 เป็นครั้งแรก ด้วยเหตุนี้ Blockly จึงใช้รูปแบบเดียวกับ Lua และ Lambda Moo โดยทำให้การจัดทำดัชนีรายการและสตริงเป็นแบบฐาน 1

สำหรับการใช้งาน Blockly ขั้นสูง ระบบจะรองรับลิสต์แบบนับจาก 0 เพื่อให้การเปลี่ยนเป็นข้อความง่ายขึ้น สําหรับผู้ชมที่อายุน้อยหรือผู้ชมที่เพิ่งเริ่มใช้งาน เรายังคงแนะนําให้ใช้การจัดทำดัชนีแบบ 1 ฐาน

คําแนะนํา: 1 คือตัวเลขแรก

รองรับกฎการตั้งชื่อแบบเสรี

บล็อกที่มีชื่อตัวแปรที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ เช่น location_x (x ตัวพิมพ์เล็ก) และ
location_X (X ตัวพิมพ์ใหญ่)

นักเขียนโปรแกรมมือใหม่ไม่คิดว่า location_X และ location_x เป็นตัวแปรที่แตกต่างกัน ด้วยเหตุนี้ Blockly จึงยึดตามแนวทางของ BASIC และ HTML ในการทำตัวแปรและฟังก์ชันให้ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ Scratch ใช้แนวทางที่ละเอียดกว่า (ดังที่เห็นทางด้านขวา) และคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับชื่อตัวแปร แต่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับการตรวจสอบความเท่ากัน

นอกจากนี้ Blockly ไม่ได้กำหนดให้ตัวแปรและฟังก์ชันต้องเป็นไปตามรูปแบบ [_A-Za-z][_A-Za-z0-9]* ทั่วไป หากต้องการตั้งชื่อตัวแปรเป็น List of zip codes หรือ רשימת מיקודים ก็ไม่มีปัญหา

คําแนะนํา: ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ อนุญาตชื่อใดก็ได้

ทําให้ตัวแปรทั้งหมดเป็นแบบส่วนกลาง

โปรแกรมเมอร์มือใหม่ก็เข้าใจขอบเขตได้ยากเช่นกัน ด้วยเหตุนี้ บล็อกลี่จึงทำตามแนวทางของ Scratch โดยใช้ตัวแปรทั้งหมดเป็นแบบส่วนกลาง ข้อเสียเพียงอย่างเดียวของตัวแปรส่วนกลางคือการทำซ้ำแบบย้อนกลับนั้นซับซ้อนกว่า (ต้องดันและดึงตัวแปรลงในลิสต์) แต่นั่นเป็นเทคนิคการเขียนโปรแกรมที่อยู่นอกเหนือขอบเขตของผู้ใช้เป้าหมายของ Blockly

คําแนะนํา: ขอบเขตไม่ตรงกับขอบเขตของการตรวจสอบ ให้ปล่อยไว้ก่อน

พิจารณาวิธีจัดการค่าผลลัพธ์ที่ไม่บังคับ

ฟังก์ชันหลายรายการในการเขียนโปรแกรมแบบข้อความจะดำเนินการ แล้วแสดงผลค่า ระบบอาจใช้หรือไม่ใช้ผลลัพธ์นี้ก็ได้ ตัวอย่างเช่น pop() ฟังก์ชันของกอง ระบบอาจเรียกใช้ Pop เพื่อรับและนำองค์ประกอบสุดท้ายออก หรืออาจเรียกใช้เพื่อนำองค์ประกอบสุดท้ายออกโดยไม่สนใจค่าที่แสดงผล

var last = stack.pop();  // Get and remove last element.
stack.pop();  // Just remove last element.

โดยทั่วไปแล้ว ภาษาแบบบล็อกไม่เหมาะกับการละเว้นค่าผลลัพธ์ บล็อกค่าต้องเสียบเข้ากับสิ่งที่ยอมรับค่า ปัญหานี้แก้ไขได้หลายวิธี

ก) หลีกเลี่ยงปัญหา ภาษาแบบบล็อกส่วนใหญ่ออกแบบภาษาเพื่อหลีกเลี่ยงกรณีเหล่านี้ เช่น Scratch ไม่มีบล็อกที่มีทั้งผลข้างเคียงและค่าที่แสดงผล

ข) ระบุ 2 บล็อก หากพื้นที่ในกล่องเครื่องมือไม่ใช่ปัญหา วิธีแก้ปัญหาง่ายๆ คือให้บล็อกประเภทนี้ 2 บล็อก โดยให้บล็อกหนึ่งมีและอีกบล็อกหนึ่งไม่มีค่าผลลัพธ์ ข้อเสียคืออาจทําให้กล่องเครื่องมือสับสนเพราะมีบล็อกที่คล้ายกันจํานวนมาก

บล็อกค่าที่นำรายการสุดท้ายในรายการออกและแสดงผล และบล็อกคำสั่งที่นำเฉพาะรายการสุดท้ายในรายการออก

ค) เปลี่ยนรูปแบบบล็อก 1 บล็อก ใช้เมนูแบบเลื่อนลง ช่องทําเครื่องหมาย หรือตัวควบคุมอื่นๆ ที่อนุญาตให้ผู้ใช้เลือกว่าจะมีค่าผลลัพธ์หรือไม่ จากนั้นบล็อกจะเปลี่ยนรูปร่างตามตัวเลือก ตัวอย่างของการดำเนินการนี้สามารถดูได้ในรายการบล็อกการเข้าถึงของ Blockly

บล็อกที่เปลี่ยนรูปร่างจากบล็อกค่าเป็นบล็อกคำสั่งเมื่อนำรายการสุดท้ายในรายการออก โดยขึ้นอยู่กับว่าบล็อกจะแสดงรายการนั้นด้วยหรือไม่

ง) บริโภคมูลค่า App Inventor เวอร์ชันแรกสร้างบล็อกไปป์พิเศษซึ่งจะกินค่าที่เชื่อมต่อ ผู้ใช้ไม่เข้าใจแนวคิดนี้ และ App Inventor เวอร์ชันที่ 2 ได้นําบล็อกไปป์ออกและแนะนําให้ผู้ใช้กําหนดค่าให้กับตัวแปรชั่วคราวแทน

บล็อกที่แสดง 2 วิธีในการละเว้นเอาต์พุตของบล็อก รายการแรกใช้บล็อกไปป์เพื่อ "กิน" ค่า และรายการที่ 2 ตั้งค่าตัวแปรชื่อ "junk"

คําแนะนํา: กลยุทธ์แต่ละอย่างมีข้อดีและข้อเสีย ให้เลือกกลยุทธ์ที่เหมาะกับผู้ใช้

สร้างโค้ดที่อ่านได้

ผู้ใช้ Blockly ขั้นสูงควรดูโค้ดที่สร้างขึ้น (JavaScript, Python, PHP, Lua, Dart ฯลฯ) และจดจำโปรแกรมที่เขียนได้ทันที ซึ่งหมายความว่าจะต้องใช้ความพยายามเพิ่มเติมเพื่อให้โค้ดที่เครื่องสร้างขึ้นนี้อ่านได้ง่าย วงเล็บที่ไม่จำเป็น ตัวแปรตัวเลข เว้นวรรคที่อัดแน่น และเทมเพลตโค้ดที่เขียนอย่างละเอียดล้วนเป็นอุปสรรคต่อการสร้างโค้ดที่เรียบร้อย โค้ดที่สร้างขึ้นควรมีความคิดเห็นและเป็นไปตามคู่มือสไตล์ของ Google

คําแนะนํา: ภูมิใจกับโค้ดที่สร้างขึ้น แสดงต่อผู้ใช้

ยอมรับความแตกต่างระหว่างภาษา

ผลข้างเคียงของความต้องการโค้ดที่สะอาดคือลักษณะการทํางานของ Blockly ส่วนใหญ่จะกําหนดจากลักษณะการทํางานของภาษาที่คอมไพล์ข้าม ภาษาเอาต์พุตที่ใช้กันมากที่สุดคือ JavaScript แต่หาก Blockly ต้องคอมไพล์ข้ามภาษา คุณไม่ควรพยายามรักษาลักษณะการทำงานที่ตรงกันทุกประการในทั้ง 2 ภาษา เช่น ใน JavaScript สตริงว่างจะเป็นเท็จ แต่ใน Lua จะเป็นจริง การกําหนดรูปแบบลักษณะการทํางานแบบเดียวสําหรับโค้ดของ Blockly ให้ดําเนินการโดยไม่คํานึงถึงภาษาเป้าหมายจะส่งผลให้โค้ดไม่สามารถบํารุงรักษาได้ ซึ่งดูเหมือนว่ามาจากคอมไพเลอร์ GWT

คําแนะนํา: Blockly ไม่ใช่ภาษา ให้ภาษาที่มีอยู่ส่งผลต่อลักษณะการทํางาน