Desain blok

Selama bertahun-tahun, tim Blockly telah mendesain banyak bloknya sendiri dan membantu orang lain mendesain blok mereka. Berikut adalah beberapa pelajaran yang telah mereka pelajari.

Memilih blok tingkat tinggi

Jika memungkinkan, pendekatan tingkat tinggi harus dilakukan, meskipun mengurangi performa atau fleksibilitas eksekusi. Pertimbangkan ekspresi Apps Script ini:

SpreadsheetApp.getActiveSheet().getDataRange().getValues()

Berdasarkan pemetaan 1:1 yang mempertahankan semua potensi kemampuan, ekspresi di atas akan dibuat menggunakan empat blok. Namun, Blockly bertujuan untuk tingkat yang lebih tinggi dan akan menyediakan satu blok yang mengenkapsulasi seluruh ekspresi. Sasarannya adalah mengoptimalkan kasus 95%, meskipun hal ini membuat 5% sisanya menjadi lebih sulit. Blockly tidak dimaksudkan sebagai pengganti bahasa berbasis teks, tetapi dimaksudkan untuk membantu pengguna mengatasi kurva belajar awal sehingga mereka dapat menggunakan bahasa berbasis teks.

Rekomendasi: Jangan mengonversi seluruh API Anda menjadi blok secara membabi buta.

Mempertimbangkan pilihan input pengguna

Tiga blok berulang yang menunjukkan berbagai cara untuk memasukkan angka: drop-down,
kolom numerik, dan input nilai.

Ada tiga cara untuk mendapatkan parameter dari pengguna. Dropdown adalah yang paling membatasi dan cocok untuk tutorial dan latihan sederhana. Kolom input memberikan kebebasan yang lebih besar dan cocok untuk aktivitas yang lebih kreatif. Input blok nilai (biasanya dengan blok bayangan) menawarkan peluang untuk menghitung nilai (misalnya, generator acak) dan bukan hanya nilai statis.

Rekomendasi: Pilih metode input yang sesuai dengan pengguna Anda.

Menggunakan blok kondisional dan loop terpisah

Contoh kontras yang menunjukkan blok if/then dan while dalam kategori
yang sama.

Blok yang paling sulit bagi pengguna baru adalah kondisional dan loop. Banyak lingkungan berbasis blok mengelompokkan kedua blok ini ke dalam kategori 'Kontrol' yang sama, dengan kedua blok memiliki bentuk dan warna yang sama. Hal ini sering kali menyebabkan rasa frustrasi karena pengguna baru membingungkan kedua blok tersebut. Blockly merekomendasikan pemindahan kondisional dan loop ke dalam kategori 'Logika' dan 'Loop' terpisah, masing-masing dengan warna yang berbeda. Hal ini memperjelas bahwa ini adalah ide yang berbeda yang berperilaku berbeda, meskipun memiliki bentuk yang serupa.

Rekomendasi: Pisahkan kondisional dan loop.

Menangani jumlah input yang bervariasi

Blok tertentu mungkin memerlukan jumlah input yang bervariasi. Contohnya adalah blok penambahan yang menjumlahkan kumpulan angka arbitrer, atau blok if/elseif/else dengan kumpulan klausa elseif arbitrer, atau konstruktor daftar dengan jumlah elemen yang diinisialisasi secara arbitrer. Ada beberapa strategi, masing-masing dengan kelebihan dan kekurangannya.

a) Pendekatan paling sederhana adalah membuat pengguna menyusun blok dari blok yang lebih kecil. Contohnya adalah menambahkan tiga angka, dengan menyusun dua blok penambahan dua angka. Contoh lainnya adalah hanya menyediakan blok if/else, dan membuat pengguna menyusunnya untuk membuat kondisi elseif.

Blok penambahan bertingkat: 1 + (2 + 3).

Keunggulan pendekatan ini adalah kesederhanaannya pada awalnya (baik untuk pengguna maupun developer). Kelemahannya adalah jika ada banyak nesting, kode menjadi sangat rumit dan sulit dibaca serta dikelola oleh pengguna.

b) Alternatifnya adalah memperluas blok secara dinamis sehingga selalu ada satu input bebas di bagian akhir. Demikian pula, blok akan menghapus input terakhir jika ada dua input gratis di bagian akhir. Ini adalah pendekatan yang digunakan oleh App Inventor versi pertama.

Blok yang menambahkan empat input nilai, yang terakhir
kosong.

Blok yang tumbuh secara otomatis tidak disukai oleh pengguna App Inventor karena beberapa alasan. Pertama, selalu ada input gratis dan program tidak pernah 'selesai'. Kedua, menyisipkan elemen di tengah stack menjadi hal yang menjengkelkan karena melibatkan pemutusan semua elemen di bawah pengeditan dan menghubungkannya kembali. Namun, jika urutan tidak penting, dan pengguna dapat dibuat merasa nyaman dengan celah dalam program mereka, ini adalah opsi yang sangat praktis.

c) Untuk mengatasi masalah lubang, beberapa developer menambahkan tombol +/- ke blok yang menambahkan atau menghapus input secara manual. Open Roberta menggunakan dua tombol tersebut untuk menambahkan atau menghapus input dari bawah. Developer lain menambahkan dua tombol di setiap baris sehingga penyisipan dan penghapusan dari tengah stack dapat diakomodasi. Yang lain menambahkan dua tombol atas/bawah di setiap baris sehingga pengurutan ulang stack dapat diakomodasi.

Blok yang menambahkan tiga input nilai eksternal dan memiliki tombol plus dan minus untuk
menambahkan atau menghapus input.

Strategi ini adalah spektrum opsi yang berkisar dari hanya dua tombol per blok, hingga empat tombol per baris. Di satu sisi, ada bahaya bahwa pengguna tidak dapat melakukan tindakan yang mereka butuhkan, di sisi lain, UI begitu penuh dengan tombol sehingga terlihat seperti jembatan pesawat luar angkasa Enterprise.

d) Pendekatan yang paling fleksibel adalah menambahkan balon pengubah ke blok. Ini diwakili sebagai satu tombol yang membuka dialog konfigurasi untuk blok tersebut. Elemen dapat ditambahkan, dihapus, atau disusun ulang sesuka hati.

Blok yang menambahkan tiga input nilai dan memiliki pengubah untuk menambahkan atau menghapus
input nilai.

Kelemahan pendekatan ini adalah pengubahnya tidak intuitif bagi pengguna pemula. Memperkenalkan mutator memerlukan beberapa bentuk petunjuk. Aplikasi berbasis Blockly yang menargetkan anak-anak yang lebih muda tidak boleh menggunakan pengubah. Meskipun setelah dipelajari, fitur ini sangat berharga bagi pengguna super.

Rekomendasi: Setiap strategi memiliki kelebihan dan kekurangan, pilih strategi yang tepat untuk pengguna Anda.