Bahasa berbasis blok berbeda dengan bahasa berbasis teks dalam beberapa hal, terutama karena bahasa tersebut dirancang untuk pengguna pemula. Berikut adalah daftar hal-hal yang perlu dipertimbangkan saat mendesain bahasa berbasis blok Anda sendiri.
Menggunakan daftar berbasis satu
Pemrogram pemula bereaksi buruk saat mereka menemukan daftar berbasis nol untuk pertama kalinya. Akibatnya, Blockly mengikuti jejak Lua dan Lambda Moo dengan membuat pengindeksan daftar dan string berbasis satu.
Untuk penggunaan Blockly yang lebih lanjut, daftar berbasis nol didukung untuk memudahkan transisi ke teks. Untuk audiens yang lebih muda atau lebih pemula, pengindeksan berbasis satu masih direkomendasikan.
Rekomendasi: Satu adalah angka pertama.
Mendukung aturan penamaan yang longgar
Pemrogram pemula tidak mengharapkan bahwa location_X
dan location_x
adalah
variabel yang berbeda. Akibatnya, Blockly mengikuti BASIC dan HTML dengan
membuat variabel dan fungsi tidak peka huruf besar/kecil. Scratch menggunakan pendekatan yang lebih halus (seperti yang terlihat di sebelah kanan) dan peka huruf besar/kecil untuk nama variabel, tetapi tidak
untuk pemeriksaan kesetaraan.
Selain itu, Blockly tidak mewajibkan variabel dan fungsi agar sesuai dengan
skema [_A-Za-z][_A-Za-z0-9]*
standar. Jika Anda ingin memberi nama variabel List
of zip codes
atau רשימת מיקודים
, itu tidak masalah.
Rekomendasi: Abaikan huruf besar/kecil, izinkan nama apa pun.
Membuat semua variabel menjadi global
Pemrogram pemula juga kesulitan memahami cakupan. Akibatnya, Blockly mengikuti jejak Scratch dengan membuat semua variabel bersifat global. Satu-satunya kelemahan variabel global adalah bahwa rekursi lebih rumit (seseorang harus memasukkan dan mengeluarkan variabel ke dalam daftar), tetapi itu adalah teknik pemrograman yang berada di luar cakupan pengguna target Blockly.
Rekomendasi: Cakupan tidak sesuai, biarkan untuk nanti.
Pertimbangkan cara menangani nilai return opsional
Banyak fungsi dalam pemrograman berbasis teks yang melakukan tindakan, lalu menampilkan nilai.
Nilai yang ditampilkan ini dapat digunakan atau tidak. Contohnya adalah fungsi pop()
stack. Pop dapat dipanggil untuk mendapatkan dan menghapus elemen terakhir, atau dapat
dipanggil untuk hanya menghapus elemen terakhir dengan nilai yang ditampilkan diabaikan.
var last = stack.pop(); // Get and remove last element.
stack.pop(); // Just remove last element.
Bahasa berbasis blok umumnya tidak baik dalam mengabaikan nilai yang ditampilkan. Blok nilai harus dihubungkan ke sesuatu yang menerima nilai. Ada beberapa strategi untuk mengatasi masalah ini.
a) Menghindari masalah. Sebagian besar bahasa berbasis blok mendesain bahasa untuk menghindari kasus ini. Misalnya, Scratch tidak memiliki blok yang memiliki efek samping dan nilai yang ditampilkan.
b) Berikan dua blok. Jika ruang di toolbox tidak menjadi masalah, solusi sederhananya adalah menyediakan dua dari setiap jenis blok ini, satu dengan dan satu lagi tanpa nilai yang ditampilkan. Kelemahannya adalah hal ini dapat menyebabkan toolbox yang membingungkan dengan banyak blok yang hampir sama.
c) Mengubah satu blok. Gunakan dropdown, kotak centang, atau kontrol lain yang memungkinkan pengguna memilih apakah ada nilai hasil atau tidak. Kemudian, bentuk blok akan berubah bergantung pada opsi yang dipilih. Contohnya dapat dilihat di blok akses daftar Blockly.
d) Mengkonsumsi nilai. Versi pertama App Inventor membuat blok pipa khusus yang menggunakan nilai yang terhubung. Pengguna tidak memahami konsepnya, dan App Inventor versi kedua menghapus blok pipa dan merekomendasikan agar pengguna hanya menetapkan nilai ke variabel sekali pakai.
Rekomendasi: Setiap strategi memiliki kelebihan dan kekurangan, pilih strategi yang tepat untuk pengguna Anda.
Membuat kode yang dapat dibaca
Pengguna Blockly lanjutan harus dapat melihat kode yang dihasilkan (JavaScript, Python, PHP, Lua, Dart, dll.) dan langsung mengenali program yang mereka tulis. Artinya, perlu upaya ekstra agar kode yang dihasilkan mesin ini dapat dibaca. Tanda kurung yang tidak perlu, variabel numerik, spasi kosong yang dipadatkan, dan template kode yang panjang semuanya menghalangi produksi kode yang elegan. Kode yang dihasilkan harus menyertakan komentar dan harus sesuai dengan panduan gaya Google.
Rekomendasi: Banggalah dengan kode yang Anda buat. Tampilkan kepada pengguna.
Menerima perbedaan antarbahasa
Efek samping dari keinginan untuk mendapatkan kode yang bersih adalah perilaku Blockly secara luas ditentukan dalam hal perilaku bahasa yang dikompilasi silang. Bahasa output yang paling umum adalah JavaScript, tetapi jika Blockly melakukan cross-compile ke bahasa yang berbeda, tidak boleh ada upaya yang tidak wajar untuk mempertahankan perilaku yang sama di kedua bahasa tersebut. Misalnya, di JavaScript, string kosong adalah salah, sedangkan di Lua, string kosong adalah benar. Menentukan satu pola perilaku untuk kode Blockly yang akan dieksekusi, terlepas dari bahasa target, akan menghasilkan kode yang tidak dapat dikelola yang terlihat seperti berasal dari compiler GWT.
Rekomendasi: Blockly bukan bahasa, izinkan bahasa yang ada memengaruhi perilaku.