Bahasa berbasis blok vs. teks

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

Blok yang memilih huruf pada indeks tertentu dalam string dan menggunakan 1
untuk menunjukkan huruf pertama.

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

Blok dengan nama variabel yang tidak peka huruf besar/kecil location_x (x huruf kecil) dan
location_X (X huruf besar).

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.

Blok nilai yang menghapus dan menampilkan item terakhir dalam daftar dan blok pernyataan
yang hanya menghapus item terakhir dalam daftar.

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.

Blok yang mengubah bentuk dari blok nilai menjadi blok pernyataan saat menghapus
item terakhir dalam daftar, bergantung pada apakah blok tersebut juga menampilkan
item tersebut.

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.

Blok yang menampilkan dua cara berbeda untuk mengabaikan output blok. Yang pertama
menggunakan blok pipa untuk "memakan" nilai dan yang kedua menetapkan nilai variabel
bernama "sampah".

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.