ตลอดหลายปีที่ผ่านมา ทีม Blockly ได้ออกแบบบล็อกของตัวเองมากมายและช่วยผู้อื่นออกแบบบล็อกด้วย ต่อไปนี้คือบทเรียนบางส่วนที่พวกเขาได้เรียนรู้
ชอบบล็อกระดับสูง
ควรใช้แนวทางระดับสูงขึ้นทุกครั้งที่เป็นไปได้ แม้ว่าจะลดประสิทธิภาพการดําเนินการหรือความยืดหยุ่นก็ตาม ลองพิจารณานิพจน์ Apps Script นี้
SpreadsheetApp.getActiveSheet().getDataRange().getValues()
ภายใต้การแมป 1:1 ซึ่งรักษาความสามารถที่เป็นไปได้ทั้งหมด นิพจน์ข้างต้นจะสร้างขึ้นโดยใช้บล็อก 4 บล็อก แต่ Blockly มีเป้าหมายที่สูงขึ้นและจะให้บล็อกเดียวที่รวมนิพจน์ทั้งหมด เป้าหมายคือเพิ่มประสิทธิภาพสําหรับกรณีที่ 95% แม้ว่าจะทําให้อีก 5% ที่เหลือทําได้ยากขึ้น Blockly ไม่ได้มีไว้เพื่อแทนที่ภาษาแบบข้อความ แต่มีไว้เพื่อช่วยให้ผู้ใช้ผ่านช่วงเริ่มต้นการเรียนรู้ได้ เพื่อที่ผู้ใช้จะได้ใช้ภาษาแบบข้อความ
คําแนะนํา: อย่าแปลง API ทั้งหมดเป็นบล็อกโดยไม่ได้พิจารณาอย่างถี่ถ้วน
พิจารณาตัวเลือกการป้อนข้อมูลของผู้ใช้
การรับพารามิเตอร์จากผู้ใช้ทำได้ 3 วิธีดังนี้ เมนูแบบเลื่อนลงมีข้อจำกัดมากที่สุดและเหมาะสำหรับบทแนะนำและแบบฝึกหัดง่ายๆ ช่องป้อนข้อมูลจะให้อิสระมากขึ้นและเหมาะสำหรับกิจกรรมที่สร้างสรรค์มากขึ้น บล็อกค่า (โดยปกติจะมีบล็อกเงา) ช่วยให้สามารถคํานวณค่า (เช่น ตัวสร้างแบบสุ่ม) ได้ แทนที่จะเป็นค่าคงที่
คําแนะนํา: เลือกวิธีการป้อนข้อมูลที่เหมาะสมกับผู้ใช้
ใช้บล็อกเงื่อนไขและบล็อกลูปแยกกัน
บล็อกที่ยากที่สุดสําหรับผู้ใช้ใหม่คือเงื่อนไขและลูป สภาพแวดล้อมแบบบล็อกจํานวนมากจะจัดกลุ่มทั้ง 2 บล็อกนี้ไว้ในหมวดหมู่ "การควบคุม" เดียวกัน โดยทั้ง 2 บล็อกจะมีรูปร่างและสีเดียวกัน ซึ่งมักทําให้ผู้ใช้ใหม่สับสนระหว่าง 2 บล็อกนี้ Blockly แนะนำให้ย้ายเงื่อนไขและลูปไปยังหมวดหมู่ "ตรรกะ" และ "ลูป" แยกกัน โดยแต่ละหมวดหมู่จะมีสีต่างกัน ข้อมูลนี้แสดงให้เห็นอย่างชัดเจนว่าไอเดียเหล่านี้แตกต่างกันและมีลักษณะการทํางานต่างกัน แม้ว่าจะมีรูปร่างคล้ายกันก็ตาม
คําแนะนํา: แยกเงื่อนไขและลูปออกจากกัน
จัดการอินพุตจํานวนไม่คงที่
บางบล็อกอาจต้องใช้อินพุตจํานวนไม่คงที่ ตัวอย่างเช่น บล็อกการเพิ่มที่รวมชุดตัวเลขที่กำหนดเอง หรือบล็อก if/elseif/else ที่มีชุดประโยค elseif ที่กำหนดเอง หรือตัวสร้างลิสต์ที่มีจำนวนองค์ประกอบที่กำหนดเอง กลยุทธ์ต่างๆ เหล่านี้มีทั้งข้อดีและข้อเสีย
ก) แนวทางที่ง่ายที่สุดคือให้ผู้ใช้เขียนบล็อกจากบล็อกขนาดเล็ก ตัวอย่างเช่น การเพิ่มตัวเลข 3 หลักโดยวางซ้อนบล็อกการเพิ่มตัวเลข 2 หลัก 2 บล็อก อีกตัวอย่างหนึ่งคือ การให้เฉพาะบล็อก if/else และทำให้ผู้ใช้ฝังบล็อกเหล่านั้นเพื่อสร้างเงื่อนไข elseif
ข้อได้เปรียบของแนวทางนี้คือความเรียบง่ายในขั้นต้น (ทั้งสําหรับผู้ใช้และนักพัฒนาแอป) ข้อเสียคือในกรณีที่มีการฝังจำนวนมาก โค้ดจะยุ่งยากมากและผู้ใช้อ่านและดูแลรักษาได้ยาก
ข) อีกทางเลือกหนึ่งคือขยายบล็อกแบบไดนามิกเพื่อให้มีอินพุตอิสระ 1 รายการอยู่ท้ายเสมอ ในทํานองเดียวกัน บล็อกจะลบอินพุตสุดท้ายหากมีอินพุตว่าง 2 รายการที่ส่วนท้าย นี่เป็นแนวทางที่ App Inventor เวอร์ชันแรกใช้
ผู้ใช้ App Inventor ไม่ชอบบล็อกที่เติบโตขึ้นโดยอัตโนมัติเนื่องจากเหตุผลบางประการ ประการแรก ข้อมูลขาเข้านั้นไม่มีค่าใช้จ่ายเสมอไปและโปรแกรมก็ไม่เคย "เสร็จสมบูรณ์" ประการที่ 2 การแทรกองค์ประกอบตรงกลางกองนั้นน่าหงุดหงิดเนื่องจากต้องยกเลิกการเชื่อมต่อองค์ประกอบทั้งหมดที่อยู่ด้านล่างการแก้ไข แล้วเชื่อมต่ออีกครั้ง อย่างไรก็ตาม หากลําดับไม่สําคัญและผู้ใช้สามารถรับมือกับช่องว่างในโปรแกรมได้ ตัวเลือกนี้ก็เป็นตัวเลือกที่สะดวกมาก
ค) นักพัฒนาแอปบางรายแก้ปัญหาช่องโหว่นี้ด้วยการเพิ่มปุ่ม +/- ลงในบล็อกที่เพิ่มหรือนําอินพุตออกด้วยตนเอง Open Roberta ใช้ปุ่มดังกล่าว 2 ปุ่มเพื่อเพิ่มหรือนำอินพุตออกจากด้านล่าง นักพัฒนาแอปรายอื่นเพิ่มปุ่ม 2 ปุ่มในแต่ละแถวเพื่อให้รองรับการแทรกและการลบจากตรงกลางของสแต็ก ส่วนบางรายเพิ่มปุ่มขึ้น/ลง 2 ปุ่มในแต่ละแถวเพื่อให้จัดเรียงกองใหม่ได้
กลยุทธ์นี้มีตัวเลือกมากมายตั้งแต่ 2 ปุ่มต่อบล็อกไปจนถึง 4 ปุ่มต่อแถว ในทางหนึ่งคืออันตรายที่ผู้ใช้ไม่สามารถดำเนินการที่ต้องการได้ และในทางกลับกัน UI เต็มไปด้วยปุ่มจนดูเหมือนสะพานของยานอวกาศ Enterprise
ง) แนวทางที่ยืดหยุ่นที่สุดคือการเพิ่มบับเบิลตัวเปลี่ยนรูปแบบลงในบล็อก ซึ่งจะแสดงเป็นปุ่มเดียวที่เปิดกล่องโต้ตอบการกําหนดค่าสําหรับบล็อกนั้น คุณสามารถเพิ่ม ลบ หรือจัดเรียงองค์ประกอบใหม่ได้ตามต้องการ
ข้อเสียของวิธีการนี้คือ ตัวแปรไม่เหมาะกับผู้ใช้มือใหม่ การใช้ตัวเปลี่ยนรูปแบบต้องใช้วิธีการบางอย่าง แอปพลิเคชันที่ใช้ Blockly ซึ่งกำหนดเป้าหมายเป็นเด็กเล็กไม่ควรใช้ตัวเปลี่ยนรูปแบบ แต่เมื่อเรียนรู้แล้ว ฟีเจอร์เหล่านี้จะมีประโยชน์อย่างยิ่งสำหรับผู้ใช้ขั้นสูง
คําแนะนํา: กลยุทธ์แต่ละอย่างมีข้อดีและข้อเสีย ให้เลือกกลยุทธ์ที่เหมาะกับผู้ใช้