Kamis, 28 Mei 2026

Belajar Pemrograman Scratch. Bab 5

5
Variabel

Bab ini menjelaskan cara membuat skrip yang dapat membaca dan mengingat nilai. Saat Anda menggunakan variabel, Anda dapat menulis aplikasi yang berinteraksi dengan pengguna dan menanggapi masukan mereka. Berikut yang akan kita bahas dalam bab ini:

  • Tipe data yang didukung oleh Scratch
  • Cara membuat variabel dan memanipulasinya
  • Cara mendapatkan masukan dari pengguna dan menulis program interaktif

Meskipun skrip yang Anda tulis dalam empat bab terakhir membantu Anda mempelajari keterampilan pemrograman Scratch yang penting, skrip tersebut masih kekurangan banyak elemen kunci dari aplikasi skala besar. Program yang lebih kompleks dapat mengingat nilai dan memutuskan untuk mengambil tindakan berdasarkan kondisi tertentu. Bab ini akan membahas kekurangan pertama dari dua kekurangan tersebut, dan pengambilan keputusan akan dibahas di bab berikutnya.


Seperti yang mungkin sudah Anda pelajari, skrip memproses dan memanipulasi berbagai jenis data selama eksekusinya. Data ini dapat berupa input ke blok perintah (misalnya, angka 10 dalam perintah pindah 10 langkah dan string “Halo!” dalam perintah ucapkan Halo!) atau output dari blok fungsi (seperti posisi x, y mouse dan pilih acak), atau data dapat dimasukkan oleh pengguna sebagai respons terhadap perintah tanya dan tunggu. Untuk program yang lebih kompleks, Anda seringkali perlu menyimpan dan memodifikasi data untuk menyelesaikan tugas-tugas tertentu. Manajemen data di Scratch dapat dilakukan menggunakan variabel dan daftar. Bab ini akan membahas variabel secara detail. Daftar akan dibahas di Bab 9.

Bab ini dimulai dengan gambaran umum tentang tipe data yang didukung di Scratch. Bab ini dilanjutkan dengan pengenalan variabel dan pembahasan tentang cara membuat dan menggunakannya dalam program Anda. Monitor variabel kemudian akan dijelaskan dan digunakan dalam beberapa aplikasi menarik. Setelah menguasai konsep dasar, Anda akan mempelajari cara menggunakan perintah tanya dan tunggu untuk mendapatkan input dari pengguna.

Tipe Data di Scratch
Banyak program komputer memanipulasi berbagai jenis data, termasuk angka, teks, gambar, dan sebagainya, untuk menghasilkan informasi yang berguna. Ini adalah tugas pemrograman yang penting, jadi Anda perlu mengetahui tipe data dan operasi yang didukung di Scratch. Scratch memiliki dukungan bawaan untuk tiga tipe data yang dapat Anda gunakan dalam blok: Boolean, angka, dan string.

Sebuah Boolean hanya dapat memiliki salah satu dari dua nilai: benar atau salah. Anda dapat menggunakan tipe data ini untuk menguji satu atau lebih kondisi dan, berdasarkan hasilnya, membuat program Anda memilih jalur eksekusi yang berbeda. Kita akan membahas Boolean secara detail di bab berikutnya.

Variabel angka dapat menyimpan nilai bilangan bulat dan desimal. Scratch tidak membedakan antara keduanya; keduanya diklasifikasikan sebagai "angka." Anda dapat membulatkan angka desimal ke bilangan bulat terdekat menggunakan blok pembulatan dari palet Operator. Anda juga dapat menggunakan fungsi pembulatan ke bawah (atau pembulatan ke atas), yang tersedia dari blok akar kuadrat di palet Operator, untuk mendapatkan bilangan bulat dari angka desimal tertentu. Misalnya, pembulatan ke bawah dari 3,9 adalah 3 dan pembulatan ke atas dari 3,1 adalah 4.

String adalah urutan karakter, yang dapat mencakup huruf (baik huruf besar maupun kecil), angka (0 hingga 9), dan simbol lain yang dapat Anda ketik di keyboard Anda (+, –, &, @, dan sebagainya). Anda akan menggunakan tipe data string untuk menyimpan nama, alamat, judul buku, dan sebagainya.

Apa yang ada di dalam Bentuknya?
Pernahkah Anda memperhatikan bahwa blok Scratch dan slot parameternya masing-masing memiliki bentuk geometris tertentu? Misalnya, slot parameter di blok pindah 10 langkah adalah persegi panjang dengan sudut membulat, sedangkan yang di blok ucapkan Halo! adalah persegi panjang dengan sudut tajam. Bentuk dari Slot parameter berkaitan dengan tipe data yang diterimanya. Cobalah memasukkan nama Anda (atau teks lain) di blok pindah 10 langkah; Anda akan menemukan bahwa Scratch hanya mengizinkan Anda memasukkan angka ke dalam slot persegi panjang bulat. Demikian pula, bentuk blok fungsi menunjukkan tipe data yang dikembalikannya.

Arti dari berbagai bentuk tersebut diilustrasikan pada Gambar 5-1.

Gambar 5-1: Arti bentuk blok perintah dan fungsi

Slot parameter memiliki tiga bentuk (segi enam, persegi panjang, dan persegi panjang bulat), sedangkan blok fungsi hanya memiliki dua bentuk (segi enam dan persegi panjang bulat). Setiap bentuk dikaitkan dengan tipe data tertentu, meskipun Anda harus memperhatikan bahwa blok fungsi persegi panjang bulat dapat melaporkan angka atau string.

Slot segi enam dan persegi panjang bulat hanya menerima blok fungsi dengan bentuk yang sama, sedangkan slot persegi panjang akan menerima blok fungsi apa pun. Kabar baiknya adalah Scratch mencegah Anda dari kesalahan pencocokan tipe, sehingga Anda tidak perlu menghafal aturan ini. Cobalah menyeret blok berbentuk segi enam ke dalam slot persegi panjang dengan sudut membulat; Anda tidak akan dapat meletakkannya di sana karena tipe datanya tidak kompatibel.

Konversi Tipe Data Otomatis
Seperti yang saya sebutkan di atas, slot parameter angka hanya menerima blok fungsi persegi panjang dengan sudut membulat. Semua blok fungsi persegi panjang dengan sudut membulat yang telah Anda tangani sejauh ini—termasuk posisi x, posisi y, arah, nomor kostum, ukuran, volume, tempo, dan sebagainya—melaporkan angka. Oleh karena itu, menggunakannya di dalam slot angka (seperti blok pindah 10 langkah) bukanlah masalah. Namun, beberapa blok fungsi persegi panjang dengan sudut membulat, seperti blok jawaban dari palet Sensing atau blok gabung dari palet Operator, dapat menampung angka atau string. Ini menimbulkan pertanyaan penting:

Apa yang terjadi jika kita, misalnya, memasukkan blok jawaban yang berisi string ke dalam slot angka? Untungnya, Scratch secara otomatis mencoba mengkonversi antar tipe data sesuai kebutuhan, seperti yang diilustrasikan pada Gambar 5-2. Dalam contoh ini, pengguna memasukkan 125 sebagai respons terhadap perintah "Masukkan angka". Input pengguna disimpan dalam blok fungsi jawaban. Ketika input ini diteruskan ke perintah say, input tersebut secara otomatis dikonversi menjadi string. Ketika jawaban yang sama diteruskan ke operasi penjumlahan (yang mengharapkan angka), jawaban tersebut dikonversi menjadi angka 125. Ketika operasi penjumlahan dilakukan, hasilnya (25 + 125 = 150) dikonversi kembali menjadi string, dan "150" diteruskan ke blok say. Scratch secara otomatis mencoba menangani konversi ini untuk Anda.

Gambar 5-2: Scratch secara otomatis mengkonversi antar tipe data berdasarkan konteks.

Memahami tipe data yang tersedia di Scratch, operasi yang diizinkan pada tipe-tipe ini, dan bagaimana Scratch mengkonversi antar tipe data tersebut akan membantu Anda memahami mengapa segala sesuatu bekerja seperti itu. Di bagian selanjutnya, Anda akan mempelajari tentang variabel dan cara menggunakannya untuk menyimpan dan memanipulasi data dalam program Anda.

Pengantar Variabel
Misalnya, kita ingin membuat versi perangkat lunak dari permainan Whac-a-Mole. Permainan aslinya memiliki permukaan datar dengan beberapa lubang. Pemain menggunakan palu untuk memukul tikus tanah saat mereka muncul dari lubang-lubang ini. Dalam versi kita, sebuah sprite muncul di lokasi acak di Stage, tetap terlihat untuk waktu singkat, dan menghilang. Ia menunggu sebentar, lalu muncul lagi di lokasi yang berbeda.

Pemain perlu mengklik sprite segera setelah muncul. Setiap kali ia mengklik sprite, ia mendapatkan satu poin. Pertanyaannya bagi Anda sebagai programmer adalah, bagaimana Anda melacak skor pemain? Selamat datang di dunia variabel! Pada bagian ini, saya akan memperkenalkan variabel, salah satu elemen terpenting dari setiap bahasa pemrograman. Anda akan mempelajari cara membuat variabel di Scratch dan cara menggunakannya untuk mengingat (atau menyimpan) berbagai jenis data. Anda juga akan menjelajahi blok yang tersedia untuk mengatur dan mengubah nilai variabel dalam program Anda.

Apa Itu Variabel?
Variabel adalah area memori komputer yang diberi nama. Anda dapat menganggapnya sebagai kotak yang menyimpan data, termasuk angka dan teks, agar program dapat mengaksesnya sesuai kebutuhan. Pada Gambar 5-3, misalnya, kita menggambarkan variabel bernama side yang nilai saat ini adalah 50. Saat Anda membuat variabel, program Anda menyisihkan cukup memori untuk menyimpan nilai variabel dan menandai memori yang dialokasikan dengan nama variabel tersebut. Setelah membuat variabel, Anda dapat menggunakan namanya dalam program Anda untuk merujuk pada nilai tersebut.

Gambar 5-3: Variabel seperti kotak bernama yang berisi beberapa nilai.



Ini mewakili sesuatu. Misalnya, jika kita memiliki sebuah kotak (yaitu, sebuah variabel) bernama

side yang berisi angka 50, kita dapat membuat perintah seperti move (3*side) steps. Ketika Scratch menjalankan perintah ini, ia akan menemukan kotak bernama side di memori komputer, mengambil isinya (dalam hal ini, angka 50), dan menggunakan nilai tersebut untuk mengganti label side di dalam blok move (3*side) steps. Akibatnya, sprite akan bergerak 150 (yaitu, 3 × 50) langkah.


Dalam permainan Whac-a-Mole kita, kita membutuhkan cara untuk mengingat skor pemain. Untuk melakukan itu, kita dapat memesan beberapa ruang di memori komputer (seperti sebuah kotak) untuk menyimpan skor. Kita juga perlu memberi kotak itu label yang unik, misalnya score, yang akan memungkinkan kita untuk menemukannya setiap kali kita perlu mengetahui atau mengubah apa yang ada di dalamnya.


Saat permainan dimulai, kita akan memberi tahu Scratch untuk "atur skor menjadi 0," dan Scratch akan mencari kotak berlabel skor dan memasukkan nilai 0 ke dalamnya. Kita juga akan memberi tahu Scratch untuk "menambah skor sebesar 1" setiap kali pemain mengklik sprite. Sebagai respons terhadap klik pertama, Scratch akan melihat ke dalam kotak skor lagi, menemukan angka 0 kita, menambahkan 1 ke dalamnya, dan memasukkan hasilnya (yaitu 1) kembali ke dalam kotak. Saat berikutnya pemain mengklik sprite, Scratch akan kembali mengikuti perintah "menambah skor sebesar 1" untuk menambah skor dan menyimpan nilai 2 yang dihasilkan di dalam kotak.

Anda akan melihat blok Scratch yang sebenarnya untuk operasi ini sebentar lagi.

Untuk saat ini, perhatikan bahwa nilai skor berubah sepanjang program. Inilah mengapa kita menyebutnya variabel—nilainya bervariasi.

Salah satu kegunaan penting variabel adalah untuk menyimpan hasil sementara dari

mengevaluasi ekspresi aljabar. Ini mirip dengan cara Anda melakukan perhitungan mental. Misalnya, jika Anda diminta untuk mencari 2 + 4 + 5 + 7, Anda mungkin mulai dengan menambahkan 2 + 4 dan menghafal jawabannya (6). Kemudian Anda akan menambahkan 5 ke jawaban sebelumnya (yang tersimpan dalam memori Anda) dan menghafal jawaban baru, yaitu 11. Terakhir, Anda akan menambahkan 7 ke hasil sebelumnya untuk mendapatkan jawaban akhir yaitu 18.

Untuk mengilustrasikan bagaimana variabel dapat digunakan untuk penyimpanan sementara, katakanlah Anda ingin menulis program untuk menghitung ekspresi berikut: yang diwakilinya. Misalnya, jika kita memiliki kotak (yaitu, variabel) bernama side yang berisi angka 50, kita dapat membuat perintah seperti move (3*side) steps. Ketika Scratch mengeksekusi perintah ini, ia akan menemukan kotak bernama side di memori komputer, mengambil isinya (dalam hal ini, angka 50), dan menggunakan nilai tersebut untuk mengganti label side di dalam blok move (3*side) steps. Akibatnya, sprite akan bergerak 150 (yaitu, 3 × 50) langkah. Dalam permainan Whac-a-Mole kita, kita membutuhkan cara untuk mengingat skor pemain.

Untuk melakukan itu, kita dapat memesan ruang di memori komputer (seperti kotak) untuk menyimpan skor. Kita juga perlu memberi label unik pada kotak itu, misalnya skor, yang akan memungkinkan kita menemukannya setiap kali kita perlu mengetahui atau mengubah isinya.

Saat permainan dimulai, kita akan memberi tahu Scratch untuk "atur skor menjadi 0," dan Scratch akan mencari kotak berlabel skor dan memasukkan nilai 0 ke dalamnya. Kita juga akan memberi tahu Scratch untuk "menambah skor sebesar 1" setiap kali pemain mengklik sprite. Sebagai respons terhadap klik pertama, Scratch akan melihat ke dalam kotak skor lagi, menemukan angka 0 kita, menambahkan 1 ke dalamnya, dan memasukkan hasilnya (yaitu 1) kembali ke dalam kotak. Lain kali pemain mengklik sprite, Scratch akan kembali mengikuti perintah "menambah skor sebesar 1" untuk menambah skor dan menyimpan nilai 2 yang dihasilkan di dalam kotak. Anda akan melihat blok Scratch yang sebenarnya untuk operasi ini sebentar lagi. Untuk saat ini, perhatikan bahwa nilai skor berubah sepanjang program. Inilah mengapa kita menyebutnya variabel—nilainya bervariasi.

Salah satu kegunaan penting variabel adalah untuk menyimpan hasil sementara dari evaluasi ekspresi aljabar. Ini mirip dengan cara Anda melakukan perhitungan mental. Misalnya, jika Anda diminta untuk mencari 2 + 4 + 5 + 7, Anda mungkin mulai dengan menambahkan 2 + 4 dan menghafal jawabannya (6). Kemudian Anda akan menambahkan 5 ke jawaban sebelumnya (yang tersimpan dalam memori Anda) dan menghafal jawaban baru, yaitu 11. Terakhir, Anda akan menambahkan 7 ke hasil sebelumnya untuk mendapatkan jawaban akhir yaitu 18.

Untuk mengilustrasikan bagaimana variabel dapat digunakan untuk penyimpanan sementara, misalkan Anda ingin menulis program untuk menghitung ekspresi berikut:

Anda dapat mengevaluasi keseluruhan dengan satu perintah, tetapi memadatkan semuanya ke dalam satu pernyataan membuatnya sulit dibaca, seperti yang ditunjukkan di bawah ini: 


Cara lain untuk menulis program adalah dengan mengevaluasi pembilang dan penyebut secara terpisah dan kemudian menggunakan blok say untuk menampilkan hasil pembagiannya. Kita dapat melakukan itu dengan membuat dua variabel yang disebut num (untuk pembilang) dan den (untuk penyebut) dan mengatur nilainya seperti yang ditunjukkan pada Gambar 5-4.

Gambar 5-4: Dua variabel (num dan den) masing-masing menyimpan nilai pembilang dan penyebut ekspresi. 

Perhatikan bagaimana variabel kita diatur dalam memori komputer. Di sini, num seperti label yang merujuk ke lokasi dalam memori tempat hasil evaluasi (1/5 + 5/7) disimpan. Demikian pula, den merujuk ke tempat (7/8 – 2/3) disimpan. Ketika perintah say dieksekusi, Scratch mengambil isi memori yang diberi label num dan den. Kemudian membagi kedua angka tersebut dan meneruskan hasilnya ke perintah say untuk ditampilkan.

Kita dapat memecah ekspresi ini lebih lanjut dengan mengevaluasi setiap pecahan secara individual sebelum menampilkan hasil ekspresi total, seperti yang ditunjukkan pada Gambar 5-5.

Gambar 5-5: Menggunakan empat variabel (a, b, c, dan d) untuk menyimpan empat pecahan dalam ekspresi

Di sini, kita menggunakan empat variabel (bernama a, b, c, dan d) untuk menyimpan empat pecahan dalam ekspresi matematika kita. Gambar tersebut juga menggambarkan alokasi memori; Kali ini, Anda dapat melihat empat variabel dan isinya.

Meskipun ketiga program ini memberikan jawaban yang sama, setiap implementasi mengikuti gaya yang berbeda. Program pertama menempatkan semuanya dalam satu pernyataan, yang sulit dibaca. Program ketiga memecah semuanya ke tingkat detail yang lebih tinggi, tetapi itu juga bisa sulit dibaca. Solusi kedua memecah ekspresi ke tingkat yang wajar dan menggunakan variabel untuk membuat program lebih mudah dipahami dan dengan jelas menunjukkan bagian utama dari ekspresi (pembilang dan penyebut). Seperti kata Goldilocks, yang ini pas.

Contoh sederhana ini menunjukkan bagaimana suatu masalah dapat memiliki banyak solusi. Terkadang Anda mungkin khawatir tentang kecepatan atau ukuran program, dan di lain waktu tujuan Anda mungkin adalah keterbacaan. Karena ini adalah buku pemrograman pengantar, skrip dalam buku ini ditulis untuk menekankan keterbacaan.

Sekarang Anda memahami apa itu variabel dan mengapa Anda ingin menggunakannya, mari kita buat beberapa variabel dan membawa aplikasi Scratch kita selangkah lebih maju.



Membuat dan Menggunakan Variabel 

Pada bagian ini, kita akan mengeksplorasi cara membuat dan menggunakan variabel melalui aplikasi sederhana yang mensimulasikan pelemparan sepasang dadu dan menampilkan jumlahnya, seperti yang diilustrasikan pada Gambar 5-6.

Gambar 5-6: Antarmuka pengguna simulator dadu

Simulator dadu kita berisi tiga sprite: Player, Die1, dan Die2. Sprite Player mengelola simulasi. Ketika ikon bendera hijau ditekan,

sprite ini menghasilkan dua angka acak antara 1 dan 6 dan menyimpan nilai-nilai tersebut dalam dua variabel bernama rand1 dan rand2. Kemudian, sprite ini menyiarkan pesan ke dua sprite lainnya (Die1 dan Die2) untuk menampilkan nilai-nilai yang dihasilkan secara acak; Die1 akan menampilkan nilai rand1, dan Die2 akan menampilkan rand2. Setelah itu, sprite Player menambahkan rand1 ke rand2 dan menampilkan jumlahnya menggunakan blok say.

Mari kita bangun aplikasi ini dari awal. Buka file DiceSimulator_NoCode.sb2. File ini berisi gambar latar belakang untuk Panggung serta tiga sprite yang digunakan dalam aplikasi. Kita akan membuat semua skrip yang kita butuhkan satu per satu.

Pertama, klik thumbnail sprite Pemain untuk memilihnya. Pilih palet Data dan klik Buat Variabel, seperti yang ditunjukkan pada Gambar 5-7 (kiri). Pada dialog yang muncul, seperti yang ditunjukkan pada Gambar 5-7 (kanan), ketik nama variabel dan pilih cakupannya. Cakupan variabel menentukan sprite mana yang dapat menulis ke (atau mengubah nilai) variabel tersebut, seperti yang akan saya jelaskan lebih detail di bagian selanjutnya. Untuk contoh ini, masukkan rand1 untuk nama variabel dan pilih opsi Untuk semua sprite untuk cakupan variabel. Klik OK setelah selesai.

Gambar 5-7: Membuat variabel, memberi nama, dan menentukan cakupannya

Setelah Anda membuat variabel, beberapa blok baru yang terkait dengannya akan muncul di palet Data, seperti yang diilustrasikan pada Gambar 5-8.

Gambar 5-8: Blok baru yang muncul saat Anda membuat variabel rand1

Anda dapat menggunakan blok ini untuk mengatur variabel ke nilai tertentu, mengubahnya dengan jumlah tetap, dan menampilkan (atau menyembunyikan) monitornya di Stage. Monitor variabel, seperti yang akan Anda pelajari di “Menampilkan Monitor Variabel” di halaman 106, menampilkan nilai saat ini yang tersimpan dalam variabel tersebut.

Penamaan Variabel 
Selama bertahun-tahun, orang-orang telah menemukan berbagai cara untuk menamai variabel dalam program mereka. Salah satu konvensi populer adalah memulai nama dengan huruf kecil dan memberi huruf kapital pada huruf pertama setiap kata tambahan, seperti pada sideLength, firstName, dan interestRate.

Meskipun Scratch mengizinkan nama variabel dimulai dengan angka dan mengandung spasi (misalnya, 123Side atau side length), sebagian besar bahasa pemrograman tidak mengizinkannya, jadi saya sarankan Anda menghindari nama-nama yang tidak biasa ini untuk variabel Anda. Meskipun Anda dapat memberi nama variabel apa pun yang Anda inginkan, saya sangat menyarankan untuk menggunakan nama yang deskriptif dan bermakna. Variabel satu huruf seperti w dan z sebaiknya diminimalkan kecuali jika maknanya sangat jelas. Di sisi lain, nama yang terlalu panjang dapat membuat skrip Anda lebih sulit dibaca. Selain itu, perhatikan bahwa nama variabel di Scratch peka terhadap huruf besar dan kecil, artinya side, SIDE, dan siDE semuanya merupakan variabel unik. Untuk menghindari kebingungan, cobalah untuk tidak menggunakan variabel dalam skrip yang sama yang namanya hanya berbeda dalam hal huruf besar dan kecil.

Ulangi prosedur yang saya uraikan di atas untuk membuat variabel lain, bernama rand2. Palet Data sekarang seharusnya berisi blok variabel kedua (bernama rand2), dan panah ke bawah pada blok Gambar 5-8 akan memungkinkan Anda untuk memilih antara rand1 dan rand2. Sekarang setelah kita membuat dua variabel, kita dapat membangun skrip untuk sprite Pemain. Skrip lengkapnya ditunjukkan pada Gambar 5-9.

Gambar 5-9: Skrip untuk sprite PemainSetelah Anda membuat variabel, beberapa blok baru yang terkait dengannya akan muncul di palet Data, seperti yang diilustrasikan pada Gambar 5-8.

Perintah pertama mengatur rand1 ke angka acak antara 1 dan 6. Ingat kembali analogi kotak kita: Perintah ini menyebabkan sprite menemukan kotak berlabel rand1 dan memasukkan angka acak yang dihasilkan ke dalamnya. Perintah kedua menetapkan rand2 nilai acak lain antara 1 dan 6. Selanjutnya, skrip menyiarkan pesan bernama Roll ke dua sprite lainnya (Die1 dan Die2) untuk memberi tahu mereka bahwa mereka perlu mengganti kostum mereka seperti yang ditentukan oleh rand1 dan rand2. Setelah sprite Die1 dan Die2 menyelesaikan tugas mereka, skrip dilanjutkan dan menampilkan jumlah angka pada sisi dadu menggunakan blok say. Mari kita lihat penanganan pesan Roll untuk sprite Die1, yang ditunjukkan pada Gambar 5-10.

Gambar 5-10: Untuk menggunakan variabel dalam blok perintah, cukup seret variabel tersebut ke slot parameter blok tersebut.

Setelah membuat skrip yang ditunjukkan di kanan atas gambar, seret blok rand1 dari palet Data ke slot parameter blok switch to costume untuk membentuk skrip lengkap (kanan bawah). Dalam skrip ini, blok repeat mengubah kostum dadu secara acak sebanyak 20 kali untuk mensimulasikan pelemparan dadu (Anda dapat mengubah angka ini jika mau). Setelah itu, dadu mengatur kostumnya ke angka yang ditentukan oleh rand1. Ingatlah bahwa setiap dadu memiliki enam kostum yang sesuai dengan angka 1 hingga 6 secara berurutan. Itu berarti jika rand1 adalah 5, perintah switch to costume terakhir akan menampilkan kostum yang memiliki lima titik di dalamnya.

Sekarang, kita dapat membuat skrip untuk sprite Die2, yang seharusnya hampir identik dengan yang kita buat untuk Die1. Karena Die2 mengubah kostumnya berdasarkan rand2, yang perlu Anda lakukan hanyalah menduplikasi skrip Die1 untuk Die2 dan mengganti rand1 dengan rand2.

Simulator dadu kita sekarang sudah lengkap, jadi mari kita uji. Klik ikon bendera hijau untuk melihat simulasinya. Jika aplikasi tidak berfungsi, periksa file DiceSimulator.sb2, yang berisi implementasi program yang benar.

Coba Ini 5-1
Pilih sprite Pemain dan buat variabel baru bernama sum. Atur cakupan untuk variabel ini menjadi Hanya untuk sprite ini. Ubah blok terakhir skrip Pemain untuk menggunakan variabel baru ini, seperti ini:

Sekarang pilih sprite Die1 (atau Die2) dan lihat di bawah palet Data. Dapatkah Anda menjelaskan mengapa Anda tidak melihat variabel sum di sana?

Cakupan Variabel
Konsep penting lain yang terkait dengan variabel adalah cakupan. Cakupan suatu variabel menentukan sprite mana yang dapat menulis ke (atau mengubah nilai) variabel tersebut.

Anda dapat menentukan cakupan suatu variabel saat Anda membuatnya dengan memilih salah satu dari dua opsi yang Anda lihat pada Gambar 5-7.

Memilih Hanya untuk sprite ini membuat variabel yang hanya dapat diubah oleh sprite yang memilikinya. Sprite lain masih dapat membaca dan menggunakan nilai variabel, tetapi mereka tidak dapat menulis ke dalamnya. Contoh yang ditunjukkan pada Gambar 5-11 mengilustrasikan poin ini.

Gambar 5-11: Hanya sprite Kucing yang dapat menulis ke variabel count.

Pada gambar ini, sprite Kucing memiliki variabel bernama count, dengan cakupan Hanya untuk sprite ini. Sprite Penguin dapat membaca count dengan posisi x dari blok Penguin di palet Sensing. Saat Anda memilih Kucing sebagai parameter kedua dari blok ini, parameter pertama akan memungkinkan Anda memilih atribut dari sprite Kucing, termasuk salah satu variabelnya.

Namun, Scratch tidak menyediakan blok yang memungkinkan sprite Penguin untuk mengubah variabel count. Dengan cara ini, sprite Penguin tidak dapat mengutak-atik count dan menyebabkan efek yang tidak diinginkan untuk skrip yang dijalankan oleh sprite Kucing. Sebaiknya gunakan cakupan Hanya untuk sprite ini untuk variabel yang hanya boleh diperbarui oleh satu sprite.

Variabel yang dibuat dengan cakupan Hanya untuk sprite ini dikatakan memiliki cakupan lokal, dan dapat disebut variabel lokal. Sprite yang berbeda dapat menggunakan nama yang sama untuk variabel lokal mereka tanpa konflik. Misalnya, jika Anda memiliki dua sprite mobil dalam permainan balap, masing-masing mungkin memiliki variabel lokal bernama speed yang menentukan kecepatan gerak mobil di Stage. Setiap sprite mobil dapat mengubah variabel kecepatannya secara independen dari yang lain. Ini berarti bahwa jika Anda mengatur kecepatan mobil pertama menjadi 10 dan kecepatan mobil kedua menjadi 20, mobil kedua akan bergerak lebih cepat daripada yang pertama. Variabel dengan cakupan For all sprites, di sisi lain, dapat dibaca dan diubah oleh sprite apa pun dalam aplikasi Anda. Variabel-variabel ini, sering disebut.


Tipe Data Variabel
Pada titik ini, Anda mungkin bertanya-tanya, “Bagaimana Scratch mengetahui tipe data suatu variabel?” Jawabannya adalah, Scratch tidak tahu! Saat Anda membuat variabel, Scratch tidak tahu apakah Anda bermaksud menggunakan variabel tersebut untuk menyimpan angka, string, atau Boolean. Variabel apa pun dapat menyimpan nilai dengan tipe data apa pun. Misalnya, semua perintah berikut valid di Scratch.

Terserah Anda untuk menyimpan nilai yang benar dalam variabel Anda. Namun, seperti yang saya jelaskan sebelumnya dalam bab ini, Scratch akan mencoba mengkonversi antar tipe data tergantung pada konteksnya. Untuk melihat apa yang terjadi ketika Anda menyimpan tipe data yang salah dalam variabel, pertimbangkan dua contoh ini:


Karena perintah pindah mengharapkan parameter angka, Scratch akan secara otomatis mencoba mengkonversi nilai yang disimpan dalam variabel samping menjadi angka sebelum meneruskannya ke perintah pindah. Dalam skrip pertama (kiri), Scratch tidak dapat mengkonversi string "Nonsense" menjadi angka. Alih-alih menampilkan pesan kesalahan, Scratch akan diam-diam mengatur hasil konversi menjadi 0 dan meneruskan nilai ini ke perintah pindah. Akibatnya, sprite tidak akan bergerak. Di sisi lain, pada skrip kedua (kanan), Scratch mengabaikan spasi dalam string dan meneruskan angka yang dihasilkan ke blok pindah, sehingga sprite bergerak 100 langkah ke depan.

Perhatikan bahwa jika blok target mengharapkan string dan bukan angka, Scratch akan meneruskan string apa adanya, termasuk spasi.



Variabel global berguna untuk komunikasi dan sinkronisasi antar sprite. Misalnya, jika sebuah game memiliki tiga tombol yang memungkinkan pengguna untuk memilih level yang akan dimainkan, Anda dapat membuat variabel global bernama gameLevel dan membuat setiap sprite tombol mengatur variabel ini ke angka yang berbeda saat diklik. Kemudian Anda dapat dengan mudah mengetahui pilihan pengguna dengan memeriksa gameLevel. Memilih opsi Untuk semua sprite juga mengaktifkan kotak centang variabel Cloud pada Gambar 5-7. Fitur ini memungkinkan Anda untuk menyimpan variabel Anda di server Scratch (di cloud). Blok untuk variabel cloud memiliki kotak kecil di depannya untuk membedakannya dari variabel biasa, seperti ini:


Siapa pun yang melihat proyek yang telah Anda bagikan di situs web Scratch dapat membaca variabel cloud dalam proyek tersebut. Misalnya, jika Anda membagikan sebuah game, Anda dapat menggunakan variabel cloud untuk melacak skor tertinggi yang tercatat di antara semua pemain. Variabel cloud skor akan diperbarui hampir seketika untuk semua orang yang berinteraksi dengan game Anda. Karena variabel-variabel ini disimpan di server Scratch, nilainya tetap terjaga bahkan jika Anda keluar dari browser. Variabel cloud memudahkan pembuatan survei dan proyek lain yang menyimpan angka dari waktu ke waktu.

Sekarang setelah Anda memahami cakupan, saatnya mempelajari tentang memperbarui variabel—dan kemudian menggunakan pengetahuan itu untuk membuat program yang lebih menarik.

Mengubah Variabel
Scratch menyediakan dua blok perintah yang memungkinkan Anda mengubah variabel. Perintah `set to` langsung menetapkan nilai baru ke variabel, terlepas dari isinya saat ini. Perintah `change by`, di sisi lain, digunakan untuk mengubah nilai variabel dengan jumlah tertentu relatif terhadap nilai saat ini. Ketiga skrip pada Gambar 5-12 menunjukkan bagaimana Anda dapat menggunakan perintah ini dengan cara yang berbeda untuk mencapai hasil yang sama.

Ketiga skrip dalam gambar dimulai dengan menetapkan nilai dua variabel, `sum` dan `delta`, masing-masing menjadi 0 dan 5. Skrip pertama menggunakan perintah `change` untuk mengubah nilai `sum` dengan nilai `delta` (yaitu, dari 0 menjadi 5). Skrip kedua menggunakan perintah set untuk menambahkan nilai sum saat ini ke nilai delta (0 + 5) dan menyimpan hasilnya (5) kembali ke sum. Skrip ketiga mencapai hasil yang sama dengan bantuan variabel sementara bernama temp. Skrip ini menambahkan nilai sum ke delta, menyimpan hasilnya di temp, dan akhirnya menyalin nilai temp ke sum.

Variabel global berguna untuk komunikasi dan sinkronisasi antar sprite. Misalnya, jika sebuah game memiliki tiga tombol yang memungkinkan pengguna untuk memilih level yang akan dimainkan, Anda dapat membuat variabel global bernama gameLevel dan membuat setiap sprite tombol mengatur variabel ini ke angka yang berbeda saat diklik. Kemudian Anda dapat dengan mudah mengetahui pilihan pengguna dengan memeriksa gameLevel. Memilih opsi Untuk semua sprite juga mengaktifkan kotak centang variabel Cloud pada Gambar 5-7. Fitur ini memungkinkan Anda untuk menyimpan variabel Anda di server Scratch (di cloud). Blok untuk variabel cloud memiliki kotak kecil di depannya untuk membedakannya dari variabel biasa, seperti ini:


Siapa pun yang melihat proyek yang telah Anda bagikan di situs web Scratch dapat membaca variabel cloud dalam proyek tersebut. Misalnya, jika Anda membagikan sebuah game, Anda dapat menggunakan variabel cloud untuk melacak skor tertinggi yang tercatat di antara semua pemain. Variabel cloud skor akan diperbarui hampir seketika untuk semua orang yang berinteraksi dengan game Anda. Karena variabel-variabel ini disimpan di server Scratch, nilainya tetap terjaga bahkan jika Anda keluar dari browser. Variabel cloud memudahkan pembuatan survei dan proyek lain yang menyimpan angka dari waktu ke waktu.

Sekarang setelah Anda memahami cakupan, saatnya mempelajari tentang memperbarui

variabel—dan kemudian menggunakan pengetahuan itu untuk membuat program yang lebih menarik.


Mengubah Variabel

Scratch menyediakan dua blok perintah yang memungkinkan Anda mengubah variabel. Perintah `set to` langsung menetapkan nilai baru ke variabel, terlepas dari isinya saat ini. Perintah `change by`, di sisi lain, digunakan untuk mengubah nilai variabel dengan jumlah tertentu relatif terhadap nilai saat ini. Ketiga skrip pada Gambar 5-12 menunjukkan bagaimana Anda dapat menggunakan perintah ini

dengan cara yang berbeda untuk mencapai hasil yang sama.

Ketiga skrip dalam gambar dimulai dengan menetapkan nilai dua variabel, `sum` dan `delta`, masing-masing menjadi 0 dan 5. Skrip pertama menggunakan perintah `change` untuk mengubah nilai `sum` dengan nilai `delta` (yaitu, dari 0 menjadi 5). Skrip kedua menggunakan perintah `set` untuk menambahkan nilai `sum` saat ini ke nilai `delta` (0 + 5) dan menyimpan hasilnya (5) kembali ke `sum`. Skrip ketiga mencapai hasil yang sama dengan bantuan variabel sementara bernama `temp`. Skrip ini menambahkan nilai `sum` ke `delta`, menyimpan hasilnya di `temp`, dan akhirnya menyalin nilai `temp` ke `sum`.
Gambar 5-12: Tiga metode untuk mengubah nilai suatu variabel.

Setelah menjalankan salah satu skrip pada Gambar 5-12, sum akan berisi angka 5, sehingga skrip-skrip ini secara fungsional setara. Perhatikan bahwa metode yang digunakan dalam skrip kedua adalah praktik pemrograman umum, dan saya sarankan Anda mempelajarinya sejenak agar terbiasa dengannya. Sekarang mari kita lihat perintah change beraksi.

Jaring Laba-laba Kita dapat membuat jaring laba-laba dengan menggambar beberapa heksagon dengan ukuran yang semakin besar, seperti yang ditunjukkan pada Gambar 5-13. Prosedur Triangle menggambar segitiga sama sisi dengan panjang sisi yang bervariasi, sedangkan prosedur Hexagon memanggil Triangle enam kali dengan putaran kanan 60° (yaitu, 360° / 6) setelah setiap panggilan. Gambar tersebut dengan jelas menunjukkan bagaimana heksagon tersebut terdiri dari enam segitiga.

Gambar 5-13: Membuat jaring laba-laba dengan menggambar beberapa heksagon dengan ukuran yang semakin besar

Prosedur SpiderWeb hanya memanggil Hexagon berulang kali dengan nilai variabel sideLength yang berbeda setiap kali. Hasilnya adalah segi enam konsentris (yaitu, memiliki pusat yang sama) yang Anda lihat pada gambar. Perhatikan bagaimana perintah change digunakan untuk mengatur nilai sideLength di dalam loop repeat. Reproduksi prosedur SpiderWeb, jalankan, dan lihat cara kerjanya.

Kincir Angin
Contoh ini mirip dengan contoh sebelumnya, kecuali kali ini kita akan menggunakan variabel untuk mengontrol jumlah pengulangan segitiga. Prosedur yang dihasilkan (disebut Pins) ditunjukkan pada Gambar 5-14. Prosedur Kincir Angin pada gambar yang sama bekerja seperti prosedur SpiderWeb di atas, tetapi kita juga mengubah warna pena setiap kali melalui loop untuk efek pelangi yang menyenangkan. Beberapa keluaran dari prosedur Kincir Angin untuk jumlah pin yang berbeda ditunjukkan pada gambar. Bereksperimenlah dengan prosedur ini untuk melihat apa lagi yang dapat Anda buat.

Gambar 5-14: Membuat kincir angin dengan memutar segitiga sama sisi beberapa kali

Sekarang setelah kita menjelajahi dasar-dasar variabel, Anda mungkin bertanya-tanya apa yang terjadi pada variabel ketika Anda menduplikasi sprite. Apakah duplikat tersebut berbagi variabel sprite induk, atau memiliki salinannya sendiri? Apakah klon memiliki akses ke variabel global? Kita akan menjawab pertanyaan-pertanyaan ini di bagian selanjutnya.


Cobalah 5-2 
Ubah program Kincir Angin untuk menyembunyikan sprite. Ini akan memudahkan Anda untuk menonton gambar tanpa sprite yang menghalangi.


Variabel dalam Klon 
Setiap sprite memiliki daftar properti yang terkait dengannya, termasuk posisi x saat ini, posisi y, arah, dan sebagainya. Anda dapat membayangkan daftar itu sebagai ransel yang menyimpan nilai-nilai atribut sprite saat ini, seperti yang diilustrasikan pada Gambar 5-15. Ketika Anda membuat variabel untuk sprite dengan cakupan Hanya untuk sprite ini, variabel tersebut ditambahkan ke ransel sprite. Saat Anda mengklonakan sprite, klon tersebut mewarisi salinan atribut sprite induk, termasuk variabelnya. Properti yang diwarisi awalnya identik dengan properti induk pada saat klon dibuat. Namun setelah itu, jika atribut dan variabel klon berubah, perubahan tersebut tidak memengaruhi induknya. Perubahan selanjutnya pada sprite induk juga tidak memengaruhi properti klon.

Gambar 5-15: Klon mewarisi salinan variabel induknya

Sebagai ilustrasi, misalkan sprite induk memiliki variabel bernama speed yang nilai saat ini adalah 10. Saat Anda mengklon induknya, sprite baru juga akan memiliki variabel bernama speed dengan nilai 10. Setelah itu, jika sprite induk mengubah speed menjadi 20, nilai speed pada klon akan tetap 10.

Anda dapat menggunakan konsep ini untuk membedakan antara klon dalam aplikasi Anda. Misalnya, mari kita lihat program pada Gambar 5-16.


Gambar 5-16: Menggunakan variabel untuk membedakan antara klon



Sprite induk dalam contoh ini memiliki variabel bernama cloneID. Saat bendera hijau diklik, ia memulai perulangan untuk membuat tiga klon, dan ia mengatur cloneID ke nilai yang berbeda (1, 2, atau 3 dalam kasus ini) sebelum membuat klon.

Setiap klon menjadi hidup dengan salinan cloneID-nya sendiri yang diinisialisasi ke nilai yang berbeda. Anda sekarang dapat menggunakan blok if, yang akan kita pelajari secara mendalam di bab berikutnya, untuk memeriksa ID klon dan membuatnya melakukan tindakan yang sesuai.

Sekarang, mari kita bahas bagaimana klon dapat berinteraksi dengan variabel global. Ingat dari Gambar 5-15 bahwa variabel dengan cakupan For all sprites dapat dibaca dan ditulis oleh Stage dan semua sprite, termasuk klon. Sebagai contoh, program pada Gambar 5-17 menggunakan fakta ini untuk mendeteksi kapan semua klon dari sprite induk telah menghilang.


Gambar 5-17: Menggunakan variabel global untuk melacak kapan klon dihapus

Dalam skrip ini, sprite induk mengatur variabel global numClones menjadi 5 dan membuat lima klon. Kemudian menunggu hingga numClones menjadi 0 sebelum mengumumkan akhir permainan. Klon muncul pada waktu dan lokasi acak di Panggung, mengucapkan “Halo!” selama dua detik, lalu menghilang.

Sebelum klon dihapus, ia mengurangi numClones sebanyak 1. Ketika kelima klon hilang, numClones mencapai 0, skrip utama berhenti menunggu, dan sprite asli mengatakan “Permainan Selesai!” Di bagian selanjutnya, Anda akan mempelajari tentang monitor variabel, yang memungkinkan Anda untuk melihat, dan bahkan mengubah, nilai saat ini yang tersimpan dalam variabel. Kemampuan untuk melihat dan mengubah variabel di Panggung akan membuka pintu untuk menciptakan jenis aplikasi yang sama sekali baru.


Menampilkan Monitor Variabel
Anda seringkali ingin melihat nilai saat ini yang tersimpan dalam variabel. Misalnya, ketika salah satu skrip Anda tidak berfungsi seperti yang diharapkan, Anda mungkin ingin melacak beberapa variabelnya untuk melihat apakah variabel tersebut berubah dengan benar. Menggunakan monitor variabel dapat membantu Anda dalam tugas debugging ini.

Anda dapat menampilkan variabel Scratch di Stage sebagai monitor variabel. Dengan mencentang atau menghapus centang pada kotak di sebelah nama variabel, Anda dapat menampilkan atau menyembunyikan monitor variabel di Stage, seperti yang diilustrasikan pada Gambar 5-18. Anda juga dapat mengontrol visibilitas monitor dari dalam skrip Anda dengan perintah tampilkan variabel dan sembunyikan variabel.  


Gambar 5-18: Tampilkan monitor variabel dengan mencentang kotak 
di sebelah namanya.

Monitor dapat digunakan sebagai tampilan atau kontrol, yang masing-masing menampilkan atau memungkinkan Anda mengubah isi variabel. Klik dua kali kotak monitor pada Stage untuk memilih tampilan normal (keadaan default), tampilan besar, atau kontrol slider. Saat Anda memilih untuk menampilkan slider, Anda dapat mengatur rentangnya dengan mengklik kanan slider dan memilih opsi atur slider min dan max dari menu pop-up, seperti yang ditunjukkan pada Gambar 5-19.


Gambar 5-19: Mengatur nilai minimum dan maksimum untuk monitor dalam mode slider

Menggunakan slider memungkinkan Anda mengubah nilai variabel saat skrip sedang berjalan, yang merupakan cara mudah bagi pengguna untuk berinteraksi dengan aplikasi Anda. Anda dapat melihat contoh sederhana penggunaan kontrol slider pada Gambar 5-20.


Gambar 5-20: Menyesuaikan warna Stage dengan slider

Dalam contoh ini, menyeret pegangan slider mengubah nilai variabel stageColor, yang merupakan parameter dalam perintah set color effect to. Dengan asumsi skrip ini milik Stage, menyeret slider akan mengubah warna latar belakang Stage.

Monitor variabel juga menunjukkan cakupannya. Jika sebuah variabel milik satu sprite, monitornya harus menampilkan nama sprite sebelum nama variabel. Misalnya, monitor Cat speed 0 menunjukkan bahwa speed milik Cat. Jika variabel speed adalah variabel global, monitornya hanya akan menampilkan speed 0. Perbedaan antara kedua kasus tersebut diilustrasikan pada gambar berikut.

Menggunakan Monitor Variabel dalam Aplikasi
Sekarang Anda mengetahui dasar-dasar di balik monitor variabel, saya akan menunjukkan beberapa cara Anda dapat menggunakannya untuk menambahkan beberapa fungsi tambahan ke aplikasi Scratch Anda.

Kemampuan untuk menggunakan monitor sebagai tampilan dan kontrol membuka pintu untuk berbagai aplikasi, termasuk game, simulasi, dan program interaktif. Mari kita jelajahi beberapa contoh yang menggunakan monitor di subbagian berikut.

Mensimulasikan Hukum Ohm 
Contoh pertama kita adalah simulasi hukum Ohm. Ketika tegangan (V) diterapkan pada resistor (R), arus (I) akan mengalir melalui resistor tersebut. Menurut hukum Ohm, besar arus diberikan oleh persamaan ini:

Aplikasi kami memungkinkan pengguna untuk mengubah nilai V dan R menggunakan kontrol slider. Kemudian aplikasi menghitung dan menampilkan nilai arus yang sesuai, I. Antarmuka pengguna untuk aplikasi ini ditunjukkan pada Gambar 5-21.

Gambar 5-21: Antarmuka pengguna untuk aplikasi hukum Ohm

Penggeser untuk tegangan baterai (V) memiliki rentang [0, 10], dan penggeser untuk resistor (R) memiliki rentang [1, 10]. Ketika pengguna mengubah V atau R dengan penggeser, aplikasi menghitung nilai arus (I) yang mengalir dalam rangkaian. Kecerahan lampu berubah sebanding dengan nilai arus yang melewatinya: Semakin tinggi arus, semakin terang lampu. Ukuran huruf V, I, dan R pada gambar juga berubah untuk menunjukkan nilai relatif dari besaran-besaran ini. Secara total, aplikasi ini memiliki lima sprite (bernama Volt, Current, Resistance, Equal, dan Light) dan tiga variabel (bernama V, I, dan R). Semua hal lain yang Anda lihat pada Gambar 5-21 (baterai, kabel, soket, dan sebagainya) adalah bagian dari gambar latar belakang Stage. Skrip utama yang menjalankan aplikasi, yang merupakan bagian dari Stage, ditunjukkan pada Gambar 5-22. Skrip tersebut menginisialisasi nilai V dan R dan kemudian memasuki loop tak terbatas. Pada setiap putaran loop, ia menghitung I menggunakan nilai V dan R saat ini, yang diatur oleh pengguna melalui kontrol slider. Kemudian ia menyiarkan pesan ke sprite lain dalam aplikasi untuk memperbarui penampilan mereka sesuai dengan nilai yang dihitung. Gambar 5-23 menunjukkan respons sprite Volt, Arus, Resistansi, dan Cahaya (yang masing-masing menunjukkan huruf V, I, R, dan bola lampu) ketika mereka menerima pesan Pembaruan.



Gambar 5-23: Skrip yang dipicu sebagai respons terhadap pesan Pembaruan

Ketika siaran Pembaruan diterima, sprite Volt, Arus, dan Resistansi mengubah ukurannya (dari 100 persen menjadi 200 persen dari ukuran aslinya) sesuai dengan nilai variabel masing-masing saat ini. Sprite Cahaya menjalankan perintah set ghost effect untuk mengubah tingkat transparansinya sebanding dengan nilai I. Ini memberikan efek visual realistis pada bola lampu yang mensimulasikan bola lampu sebenarnya.



Coba Ini 5-3
Buka simulator hukum Ohm untuk menjalankannya, dan pelajari skrip untuk memahami cara kerjanya. Menurut Anda apa yang akan terjadi jika Anda menambahkan perintah ubah efek warna sebesar 25 di akhir skrip untuk sprite Cahaya? Terapkan perubahan ini untuk memeriksa jawaban Anda. Apa saja cara yang dapat Anda gunakan untuk meningkatkan aplikasi ini?


Mendemonstrasikan Rangkaian Seri 
Contoh kedua kami mensimulasikan rangkaian yang berisi baterai dan tiga resistor yang terhubung secara seri. Pengguna dapat mengubah tegangan baterai serta nilai resistor menggunakan slider. Arus yang mengalir melalui resistor dan tegangan di ketiga resistor ditampilkan menggunakan tampilan besar. Anda dapat melihat antarmuka aplikasi pada Gambar 5-24. (Perhatikan bahwa pita warna pada resistor tidak mewakili nilai sebenarnya dari resistor.)


Gambar 5-24: Aplikasi yang mendemonstrasikan rangkaian seri


Persamaan yang mengatur operasi rangkaian ini ditunjukkan di bawah ini. Kita dapat menghitung arus yang mengalir dalam rangkaian dengan membagi tegangan baterai, V, dengan jumlah ketiga hambatan. Setelah itu, tegangan di setiap resistor dihitung dengan mengalikan arus dengan nilai resistor tersebut:

Hambatan Total: Rtot = R1 + R2 + R3
Arus melalui rangkaian: I = V ÷ Rtot
Tegangan di R1: V1 = I × R1
Tegangan di R2: V2 = I × R2
Tegangan di R3: V3 = I × R3

Aplikasi ini tidak memiliki sprite, tetapi ketika bendera hijau diklik, skrip yang ditunjukkan pada Gambar 5-25, yang merupakan bagian dari Stage, akan dieksekusi.

Skrip ini menangani perhitungan matematika untuk kita dan menampilkan hasilnya pada

layar di Stage. Perhatikan bahwa meskipun kontrol slider untuk resistor R2 dan R3 dapat berubah dari 0 hingga 10, nilai minimum untuk R1 sengaja diatur ke 1. Ini memastikan bahwa Rtot selalu lebih besar dari 0 dan memungkinkan kita untuk menghindari pembagian dengan 0 saat menghitung nilai arus. Sebagian besar pekerjaan untuk aplikasi ini

dilakukan untuk mendesain antarmuka (yaitu, latar belakang Stage). Setelah itu, yang harus kita lakukan hanyalah memposisikan tampilan dan slider di lokasi yang tepat pada Stage.


Cobalah 5-4
Buka aplikasi simulator rangkaian seri dan jalankan. Bereksperimenlah dengan nilai R1, R2, R3, dan V yang berbeda. Perhatikan nilai V1, V2, dan V3 yang dihitung saat Anda menyeret kontrol slider. Apa hubungan antara jumlah tegangan (V1 + V2 + V3) dan tegangan baterai? Apa yang dapat Anda simpulkan tentang hubungan tegangan dalam rangkaian seri? Anda dapat membuat peningkatan yang menarik pada aplikasi ini 
dengan menambahkan gambar sakelar yang membuka atau menutup rangkaian, seperti yang ditunjukkan di bawah ini. Ketika sakelar terbuka, tidak ada arus yang mengalir dalam rangkaian. Cobalah untuk menerapkan perubahan ini menggunakan petunjuk yang diberikan di bawah ini.


Memvisualisasikan Volume dan Luas Permukaan Bola
Contoh ketiga kami adalah aplikasi interaktif untuk menghitung volume dan luas permukaan bola. Pengguna mengubah diameter bola dengan mengklik beberapa tombol pada antarmuka pengguna, dan aplikasi secara otomatis menghitung dan menampilkan volume dan luas permukaan yang sesuai.

Untuk membuat aplikasi lebih menarik, ukuran bola yang ditampilkan di Panggung juga diubah sesuai dengan diameter yang dipilih. Antarmuka pengguna untuk aplikasi ini diilustrasikan pada Gambar 5-26.


Gambar 5-26: Antarmuka pengguna untuk aplikasi bola

Aplikasi ini berisi tiga sprite: dua tombol panah (bernama Atas dan Bawah) dan gambar bola (bernama Bola). Skrip yang terkait dengan kedua tombol tersebut menyiarkan pesan untuk menunjukkan bahwa tombol telah diklik, seperti yang ditunjukkan pada Gambar 5-27.


Gambar 5-27: Skrip untuk sprite Atas dan Bawah

Sprite Bola memiliki sembilan kostum yang mewakili bola dengan diameter 1, 1,25, 1,5, 1,75, ..., 3. Ketika sprite ini menerima pesan siaran Atas atau Bawah, ia menjalankan skrip yang ditunjukkan pada Gambar 5-28.


Gambar 5-28: Skrip yang dipicu oleh pesan Atas dan Bawah

Sprite tersebut mengganti kostumnya dan kemudian memanggil prosedur Recalculate untuk memperbarui perhitungan volume dan luas permukaan. Perhatikan bahwa skrip ini menggunakan nilai kostum saat ini untuk menentukan apakah bola telah mencapai ukuran tertinggi atau terendahnya, sehingga memastikan respons yang valid terhadap tombol Atas dan Bawah. Saya akan membahas lebih lanjut tentang blok if di bab berikutnya, tetapi untuk saat ini, mari kita bahas prosedur Recalculate bola, yang ditunjukkan pada Gambar 5-29.


Gambar 5-29: Prosedur Recalculate 
Pertama, nilai variabel diameter diatur sesuai dengan rumus ini:


diameter = 1 + 0,25 × (nomor kostum – 1)


Karena nomor kostum berkisar dari 1 hingga 9, nilai variabel diameter yang sesuai adalah 1, 1,25, 1,50, ... , 2,75, 3, yang sesuai dengan tujuan kita. Skrip ini menemukan jari-jari, r, dengan membagi diameter dengan 2. Kemudian menghitung volume dan luas permukaan bola menggunakan rumus yang ditunjukkan pada Gambar 5-26. Nilai yang dihitung akan muncul secara otomatis pada monitor yang sesuai di Stage.


Cobalah 5-5
Buka aplikasi dan jalankan. Pelajari skrip untuk memahami cara kerja aplikasi. Tambahkan skrip ke sprite Bola agar berputar dan berubah warna saat aplikasi berjalan. Sebagai latihan lain, modifikasi program asli untuk menggunakan satu kostum untuk sprite Bola dan gunakan blok ubah ukuran untuk mengubah ukuran bola. Gambar yang diskalakan tidak akan terlihat sebagus aslinya, tetapi selain itu, aplikasi seharusnya berfungsi identik.


Menggambar Mawar Berdaun 

Dalam contoh ini, kita akan membuat aplikasi yang menggambar mawar berdaun banyak di Stage. Proses menggambar mawar dapat dipecah menjadi langkah-langkah berikut:

1. Mulai dari titik asal Stage.

2. Arahkan sprite ke suatu arah. Sesuai konvensi, huruf Yunani θ (dibaca theta) mewakili sudut, jadi kita akan menamai variabel untuk arah sprite sebagai theta.

3. Gerakkan sprite r langkah dan gambar satu titik di Stage. Setelah itu, angkat pena dan kembali ke titik asal.

4. Ubah sudut theta dengan sejumlah tertentu (kita akan menggunakan 1°) dan ulangi langkah 2–4. 

Hubungan antara jarak r dan sudut theta diberikan oleh

di mana a adalah bilangan riil dan n adalah bilangan bulat. Persamaan ini menghasilkan mawar yang ukuran dan jumlah daunnya dikendalikan oleh a dan n, masing-masing. Persamaan ini juga melibatkan fungsi trigonometri kosinus (cos), yang akan Anda temukan sebagai blok pelapor di palet Operator (periksa blok sqrt). Dengan nilai a dan n yang diberikan, yang perlu kita lakukan hanyalah memilih nilai theta yang berbeda, menghitung nilai r yang sesuai, dan menandai titik-titik yang dihasilkan pada Stage. Antarmuka pengguna untuk contoh ini ditunjukkan pada Gambar 5-30.


Gambar 5-30: Antarmuka pengguna untuk aplikasi mawar n-kelopak

Aplikasi ini berisi dua sprite: Sprite pertama memiliki kostum tombol Gambar Ulang, dan sprite kedua (disebut Pelukis) adalah sprite tersembunyi yang menggambar mawar. Pengguna mengontrol jumlah kelopak yang diinginkan dengan mengubah n menggunakan kontrol slider dan kemudian mengklik tombol Gambar Ulang untuk menggambarnya mawar. Ketika pengguna mengklik tombol itu, sprite tombol hanya menyiarkan pesan Gambar Ulang. Ketika sprite Pelukis menerima pesan ini, ia menjalankan skrip yang ditunjukkan pada Gambar 5-31.


Gambar 5-31: Prosedur Gambar Ulang untuk menggambar mawar n-kelopak di Panggung

Skrip pertama-tama mengatur warna dan ukuran pena dan menghapus tanda pena sebelumnya dari Panggung. Kemudian mengatur variabel a menjadi 100 dan memanggil prosedur Mawar, yang akan berjalan melalui loop 360 kali untuk menggambar mawar di Panggung. Pada setiap putaran loop, prosedur menunjuk ke arah theta, bergerak r langkah, dan menggambar tanda pena di lokasi tersebut. Kemudian menambah theta sebesar 1° untuk mempersiapkan putaran berikutnya dari loop berulang. Gambar 5-32 menunjukkan beberapa mawar yang dibuat untuk nilai n yang berbeda. Dapatkah Anda mengetahui hubungan antara nilai n dan jumlah daun?


Gambar 5-32: Beberapa mawar yang dibuat oleh prosedur Rose


Cobalah 5-6
Buka aplikasi dan jalankan. Ubah nilai n untuk melihat apa lagi yang dapat Anda buat dengan prosedur Rose. Tambahkan slider lain ke aplikasi untuk memungkinkan pengguna mengubah nilai a dan memodifikasi skrip sesuai kebutuhan. Anda juga dapat memodifikasi prosedur Rose untuk mengambil a sebagai parameter. (Lihat “Meneruskan Parameter ke Blok Kustom” di halaman 77 untuk penyegaran tentang cara menambahkan parameter ke prosedur.)


Memodelkan Distribusi Biji Bunga Matahari
Para ahli biologi dan matematikawan telah mempelajari susunan daun pada batang tanaman secara ekstensif. Mari kita sedikit menyelami botani dengan memeriksa model geometris untuk merepresentasikan bunga dengan pola biji spiral. Secara khusus, kita akan memprogram dua persamaan yang memodelkan distribusi biji pada bunga matahari. Untuk menggambar biji ke-n dari bunga matahari, kita akan mengikuti langkah-langkah berikut:

1. Arahkan sprite ke arah n × 137,5°.

2. Gerakkan sejauh r = c n, di mana c adalah faktor skala konstan (ditetapkan menjadi 5 dalam contoh kita).

3. Gambarlah sebuah titik pada Stage di lokasi akhir.

Kita akan mengulangi langkah-langkah ini untuk setiap biji yang ingin kita gambar. Untuk biji pertama, kita tetapkan n = 1; untuk biji kedua, kita tetapkan n = 2; dan seterusnya. Menggunakan sudut selain 137,5° pada langkah pertama akan menghasilkan susunan biji yang berbeda. Jika Anda penasaran dengan persamaan-persamaan ini dan ingin mempelajari lebih lanjut tentang pola biji bunga matahari, lihatlah buku The Algorithmic Beauty of Plants karya Przemyslaw Prusinkiewicz dan Aristid Lindenmayer (Springer-Verlag, 2004), khususnya Bab 4, yang dapat Anda temukan di situs web buku tersebut, http://algorithmicbotany.org/papers/#abop.

Aplikasi kami akan menghasilkan pola yang mirip dengan yang dijelaskan dalam buku tersebut, dan Anda dapat melihat beberapa pola tersebut pada Gambar 5-33.


Gambar 5-33: Beberapa pola bunga matahari yang dihasilkan menggunakan sudut yang berbeda

Antarmuka untuk contoh ini berisi kontrol slider untuk mengubah nilai sudut dari 137° hingga 138° dengan peningkatan 0,01° dan sebuah tombol

berlabel Redraw. Saat pengguna mengklik tombol tersebut, tombol tersebut mengirimkan pesan ke sprite Painter, yang menjalankan skrip yang ditunjukkan pada Gambar 5-34.

Prosedur Sunflower menjalankan sebuah loop yang menggambar 420 biji, meskipun Anda dapat mengubah angka ini jika Anda mau. Pada setiap iterasi loop, prosedur tersebut menuju ke lokasi biji ke-n (dengan menghitung sudut biji u dan bergerak n langkah v) dan menggambar tanda pena di lokasi tersebut. Prosedur kemudian menambah nilai n, yang mewakili nomor biji, untuk bersiap menggambar biji berikutnya.


Gambar 5-34: Skrip untuk sprite Pelukis

Skrip yang telah saya sajikan di bagian ini hanyalah beberapa contoh dari aplikasi luar biasa yang dapat kita buat dengan menggunakan variabel dan monitor.

Membiarkan pengguna berinteraksi dengan aplikasi kita melalui kontrol slider hanyalah awal dari jenis aplikasi interaktif baru. Di bagian selanjutnya, Anda akan belajar membuat skrip yang secara langsung meminta input dari pengguna.

Cobalah 5-7
Buka aplikasi dan jalankan. Ubah nilai sudut untuk melihat apa lagi yang dapat Anda buat dengan prosedur Bunga Matahari. Pelajari prosedurnya untuk memahami cara kerjanya dan kemudian temukan beberapa cara untuk meningkatkannya.

Mendapatkan Input dari Pengguna
Bayangkan Anda ingin membuat game yang mengajari anak-anak aritmatika dasar. Game Anda mungkin memiliki sprite yang menampilkan soal penjumlahan dan meminta pemain untuk memasukkan jawaban. Bagaimana Anda akan membaca input pemain untuk melihat apakah jawabannya benar?

Palet Sensing Scratch menyediakan satu blok perintah, tanya dan tunggu, yang dapat Anda gunakan untuk membaca input pengguna. Blok ini menerima satu parameter yang menentukan string yang akan ditampilkan kepada pengguna, biasanya dalam bentuk pertanyaan. Seperti yang diilustrasikan pada Gambar 5-35, eksekusi blok ini menghasilkan output yang sedikit berbeda tergantung pada status visibilitas sprite (yaitu, apakah sprite ditampilkan atau disembunyikan). Output yang ditunjukkan pada Gambar 5-35 (kanan) juga muncul ketika perintah tanya dan tunggu dipanggil dari skrip yang dimiliki oleh Stage.


Gambar 5-35: Blok tanya dan tunggu dapat menghasilkan keluaran yang berbeda tergantung pada apakah sprite yang menjalankannya ditampilkan atau disembunyikan.

Setelah menjalankan perintah tanya dan tunggu, skrip pemanggil menunggu pengguna menekan tombol enter atau mengklik tanda centang di sisi kanan kotak input. Ketika ini terjadi, Scratch menyimpan input pengguna di blok jawaban dan melanjutkan eksekusi pada perintah tepat setelah blok tanya dan tunggu. Untuk melihat blok perintah ini beraksi, lihat contoh berikut yang mengilustrasikan cara menggunakannya.

Membaca Angka
Skrip pada Gambar 5-36 menanyakan usia pengguna, menunggu jawaban, dan memberi tahu pengguna berapa usianya dalam 10 tahun.


Gambar 5-36: Skrip yang menerima usia pengguna sebagai input. 

Gambar tersebut menunjukkan keluaran program ketika pengguna mengetik 18 dan menekan enter pada keyboard. Perhatikan bahwa program menggunakan blok gabung (dari palet Operator) untuk menggabungkan (yaitu, menghubungkan) dua string.

Membaca Karakter
Skrip pada Gambar 5-37 meminta pengguna untuk memasukkan inisialnya, kemudian menyusun dan menampilkan salam berdasarkan respons pengguna.

Gambar 5-37: Sebuah skrip yang menggunakan dua variabel untuk membaca dan menyimpan inisial pengguna

Program ini menggunakan dua variabel (firstInitial dan lastInitial) untuk menyimpan nilai yang dimasukkan oleh pengguna. Anda dapat melihat output akhir program ketika pengguna memasukkan huruf M dan S pada dua perintah, masing-masing.

Perhatikan bahwa program menggunakan blok gabungan bersarang untuk membangun salam. Anda dapat menggunakan teknik ini untuk membuat berbagai macam string dan menampilkan pesan yang disesuaikan dalam aplikasi Anda.

Melakukan Operasi Aritmatika Skrip pada Gambar 5-38 meminta pengguna untuk memasukkan dua angka. Kemudian menghitung hasil perkalian kedua angka tersebut dan menampilkan jawabannya dalam gelembung suara menggunakan perintah say. Seperti pada contoh sebelumnya, skrip menggunakan dua variabel (num1 dan num2) untuk menyimpan nilai yang dimasukkan oleh pengguna.


Gambar 5-38: Menghitung nilai berdasarkan input pengguna

Gambar tersebut menunjukkan output ketika pengguna memasukkan 9 dan 8, masing-masing, sebagai respons terhadap dua perintah. Sekali lagi, perhatikan bahwa saya telah menyusun blok gabungan untuk membangun string keluaran. Contoh yang saya sajikan di bagian ini menunjukkan beberapa cara untuk menggunakan blok tanya dan tunggu untuk menulis skrip yang menerima masukan pengguna dan menyelesaikan berbagai masalah. Misalnya, Anda dapat menulis program untuk menemukan

akar persamaan kuadrat berbentuk ax² + bx + c = 0 untuk nilai a, b, dan c apa pun yang dimasukkan oleh pengguna. Anda kemudian dapat menggunakan program ini untuk memeriksa jawaban Anda sendiri terhadap persamaan tersebut. Saya harap ini akan memberi Anda beberapa ide tentang cara menggunakan blok yang ampuh ini untuk menyelesaikan masalah matematika apa pun yang mungkin muncul.



Ringkasan

Variabel adalah salah satu konsep terpenting dalam pemrograman. Variabel adalah nama area di memori komputer tempat kita dapat menyimpan satu nilai, seperti angka atau string.

Dalam bab ini, Anda telah mempelajari tipe data dasar yang didukung di Scratch dan operasi yang diizinkan pada tipe data tersebut. Kemudian Anda mempelajari cara membuat variabel dan menggunakannya untuk menyimpan sepotong data.

Anda juga telah mengimplementasikan beberapa aplikasi praktis yang menggunakan variabel untuk mendemonstrasikan berbagai fitur. Anda telah menjelajahi monitor variabel dan menggunakannya untuk membuat berbagai jenis program interaktif. Terakhir, Anda telah mempelajari cara menggunakan blok ask dan wait untuk meminta input dari pengguna dan memproses respons pengguna dalam program Anda. Pada bab berikutnya, Anda akan mempelajari lebih lanjut tentang tipe data Boolean dan peran fundamentalnya dalam pengambilan keputusan. Anda juga akan mempelajari tentang blok if dan if/else dan menggunakannya untuk menambahkan tingkat kecerdasan lain ke program Scratch Anda. Jadi, siapkan diri Anda dan bersiaplah untuk bab menarik lainnya!


Soal


1. Buat skrip yang mengimplementasikan instruksi berikut:

• Atur variabel kecepatan menjadi 60 (mph).
• Atur variabel waktu menjadi 2,5 (jam).
• Hitung jarak tempuh dan simpan jawabannya dalam variabel jarak.
• Tampilkan jarak yang dihitung, dengan pesan yang sesuai, kepada pengguna.

2. Apa output dari setiap skrip yang ditunjukkan di bawah ini? Reproduksi skrip ini dan jalankan untuk menguji jawaban Anda.

3. Berapakah nilai X dan Y pada akhir setiap iterasi loop pengulangan dalam skrip di sebelah kanan? Reproduksi skrip dan jalankan untuk memeriksa jawaban Anda.

4. Misalkan x dan y adalah dua variabel. Buat blok fungsi yang setara dengan pernyataan berikut:

• Tambahkan 5 ke x dan simpan hasilnya di y.
• Kalikan x dengan 3 dan simpan hasilnya di y.
• Bagi x dengan 10 dan simpan hasilnya di y.
• Kurangi 4 dari x dan simpan hasilnya di y.
• Kuadratkan x, tambahkan y ke hasilnya, dan simpan hasilnya kembali di x.
• Tetapkan x sama dengan dua kali nilai y ditambah tiga kali pangkat tiga y.
• Tetapkan x sama dengan minus kuadrat y.
• Tetapkan x sama dengan hasil pembagian jumlah x dan y dengan hasil perkalian x dan y.

5. Tulis program yang meminta pengguna untuk memasukkan artikel, kata benda, dan kata kerja. Program kemudian akan membuat kalimat dengan bentuk artikel kata benda kata kerja.

6. Tulis program yang meminta pengguna untuk memasukkan suhu dalam derajat Celsius. Program akan mengkonversi suhu ke derajat Fahrenheit dan menampilkan hasilnya kepada pengguna dengan pesan yang sesuai. (Petunjuk: F° = (1,8 × C°) + 32.)

7. Ketika arus I mengalir melalui hambatan R, daya P yang diserap oleh hambatan adalah I² × R. Tulis program yang membaca I dan R dan menghitung P.

8. Tulis program yang membaca panjang kedua sisi segitiga siku-siku dan menghitung panjang hipotenusa.

9. Tulis program yang meminta pengguna untuk memasukkan panjang (L), lebar (W), dan tinggi (H) sebuah kotak. Program kemudian akan menghitung dan menampilkan volume dan luas permukaan kotak tersebut. (Petunjuk: Volume = P × L × T;

Luas permukaan = 2×[(P × L) + (P × T) + (T × L)].)

10. Hambatan ekivalen R dari tiga resistor (R1, R2, dan R3) yang dihubungkan secara paralel diberikan oleh persamaan ini:

1/R = 1/R1 + 1/R2 + 1/R3

Tulis program yang membaca nilai R1, R2, dan R3 dan menghitung R.

11. Lengkapi permainan Whac-a-Mole yang diperkenalkan sebelumnya di bab ini. File Whac-a-Mole.sb2 berisi implementasi sebagian dari program ini. Saat bendera hijau diklik, skrip yang disediakan memulai perulangan yang menggerakkan sprite Kucing secara acak di atas lubang. Tambahkan dua skrip (satu untuk Kucing dan yang lainnya untuk Panggung) untuk mengubah nilai kedua variabel (pukulan dan kegagalan) dengan tepat. Cobalah menambahkan beberapa efek suara untuk membuat permainan lebih menyenangkan! Anda juga dapat menambahkan kondisi yang mengakhiri permainan setelah penghitung waktu atau jumlah kegagalan mencapai nilai tertentu.