Trong nhiều năm, nhóm Blockly đã thiết kế nhiều khối riêng và giúp những người khác thiết kế khối của họ. Sau đây là một số bài học mà họ rút ra được.
Ưu tiên các khối cấp cao
Bất cứ khi nào có thể, bạn nên sử dụng phương pháp cấp cao hơn, ngay cả khi phương pháp đó làm giảm hiệu suất thực thi hoặc tính linh hoạt. Hãy xem xét biểu thức Apps Script sau:
SpreadsheetApp.getActiveSheet().getDataRange().getValues()
Trong mối liên kết 1:1 giúp duy trì tất cả các chức năng tiềm năng, biểu thức trên sẽ được tạo bằng 4 khối. Nhưng Blockly nhắm đến một cấp cao hơn và sẽ cung cấp một khối bao gồm toàn bộ biểu thức. Mục tiêu là tối ưu hoá cho 95% trường hợp, ngay cả khi điều này khiến 5% còn lại khó khăn hơn. Blockly không phải là ngôn ngữ thay thế cho các ngôn ngữ dựa trên văn bản, mà là để giúp người dùng vượt qua giai đoạn học tập ban đầu để có thể sử dụng các ngôn ngữ dựa trên văn bản.
Đề xuất: Đừng chuyển đổi toàn bộ API thành các khối một cách mù quáng.
Cân nhắc các lựa chọn đầu vào của người dùng
Có 3 cách để lấy thông số từ người dùng. Trình đơn thả xuống là loại hạn chế nhất và phù hợp với các bài hướng dẫn và bài tập đơn giản. Trường nhập liệu cho phép bạn tự do hơn và phù hợp với các hoạt động sáng tạo hơn. Dữ liệu đầu vào khối giá trị (thường có khối bóng) tạo cơ hội để tính toán một giá trị (ví dụ: trình tạo số ngẫu nhiên) thay vì chỉ là một giá trị tĩnh.
Đề xuất: Chọn phương thức nhập phù hợp với người dùng.
Sử dụng các khối điều kiện và vòng lặp riêng biệt
Các khối khó nhất đối với người dùng mới là các khối có điều kiện và vòng lặp. Nhiều môi trường dựa trên khối nhóm cả hai khối này vào cùng một danh mục "Chế độ điều khiển", với cả hai khối có cùng hình dạng và cùng màu. Điều này thường gây khó chịu vì người dùng mới nhầm lẫn hai khối này. Blockly đề xuất di chuyển các câu lệnh có điều kiện và vòng lặp vào các danh mục "Logic" và "Vòng lặp" riêng biệt, mỗi danh mục có một màu khác nhau. Điều này cho thấy rõ rằng đây là những ý tưởng riêng biệt hoạt động theo cách khác nhau, mặc dù có hình dạng tương tự nhau.
Đề xuất: Tách biệt các câu lệnh có điều kiện và vòng lặp.
Xử lý số lượng đầu vào biến
Một số khối nhất định có thể yêu cầu số lượng đầu vào biến đổi. Ví dụ: một khối cộng tổng một tập hợp số tuỳ ý, hoặc một khối if/elseif/else với một tập hợp mệnh đề elseif tuỳ ý, hoặc một hàm khởi tạo danh sách với một số lượng phần tử được khởi tạo tuỳ ý. Có một số chiến lược, mỗi chiến lược đều có ưu và nhược điểm riêng.
a) Phương pháp đơn giản nhất là yêu cầu người dùng tạo khối từ các khối nhỏ hơn. Ví dụ: cộng ba số bằng cách lồng hai khối cộng hai số. Một ví dụ khác là chỉ cung cấp các khối if/else và yêu cầu người dùng lồng các khối đó để tạo điều kiện nếu/thì khác.
Ưu điểm của phương pháp này là tính đơn giản ban đầu (cả đối với người dùng và nhà phát triển). Nhược điểm là trong trường hợp có nhiều lồng nhau, mã sẽ trở nên rất cồng kềnh và khó đọc cũng như khó duy trì đối với người dùng.
b) Một giải pháp thay thế là tự động mở rộng khối để luôn có một đầu vào miễn phí ở cuối. Tương tự, khối này sẽ xoá dữ liệu đầu vào cuối cùng nếu có hai dữ liệu đầu vào trống ở cuối. Đây là phương pháp mà phiên bản đầu tiên của App Inventor sử dụng.
Người dùng App Inventor không thích các khối tự động phát triển vì một số lý do. Trước tiên, luôn có một đầu vào miễn phí và chương trình không bao giờ "hoàn chỉnh". Thứ hai, việc chèn một phần tử vào giữa ngăn xếp rất phiền phức vì liên quan đến việc ngắt kết nối tất cả các phần tử bên dưới phần chỉnh sửa và kết nối lại các phần tử đó. Tuy nhiên, nếu thứ tự không quan trọng và người dùng có thể thoải mái với các lỗ trong chương trình, thì đây là một lựa chọn rất thuận tiện.
c) Để giải quyết vấn đề lỗ hổng, một số nhà phát triển thêm các nút +/- vào các khối thêm hoặc xoá dữ liệu đầu vào theo cách thủ công. Open Roberta sử dụng hai nút như vậy để thêm hoặc xoá dữ liệu đầu vào từ dưới cùng. Các nhà phát triển khác thêm hai nút ở mỗi hàng để có thể chèn và xoá từ giữa ngăn xếp. Các thành phần khác thêm hai nút lên/xuống ở mỗi hàng để có thể sắp xếp lại ngăn xếp.
Chiến lược này là một loạt các lựa chọn, từ chỉ 2 nút cho mỗi khối cho đến 4 nút cho mỗi hàng. Một mặt, người dùng không thể thực hiện các thao tác cần thiết, mặt khác, giao diện người dùng lại chứa quá nhiều nút trông giống như cầu tàu của tàu vũ trụ Enterprise.
d) Cách linh hoạt nhất là thêm bong bóng phương thức sửa đổi vào khối. Thao tác này được biểu thị dưới dạng một nút duy nhất để mở hộp thoại cấu hình cho khối đó. Bạn có thể thêm, xoá hoặc sắp xếp lại các phần tử theo ý muốn.
Nhược điểm của phương pháp này là các phương thức sửa đổi không trực quan đối với người dùng mới. Việc giới thiệu phương thức biến đổi đòi hỏi một số hình thức hướng dẫn. Các ứng dụng dựa trên Blockly nhắm đến trẻ nhỏ không được sử dụng phương thức sửa đổi. Tuy nhiên, một khi đã tìm hiểu, các tính năng này sẽ vô cùng hữu ích cho người dùng thành thạo.
Đề xuất: Mỗi chiến lược đều có ưu và khuyết điểm, hãy chọn chiến lược phù hợp với người dùng.