Gores untuk Mahir
Scratch adalah bahasa pemrograman berorientasi visual untuk anak-anak. Ada pendapat bahwa ini adalah bahasa anak-anak hanya untuk bermain "pemrograman" dan tidak ada yang baik yang dapat dibuat darinya. Ketika saya mulai mengajar kelas untuk anak-anak di Scratch, saya merasa sebagai orang dengan dua pendidikan teknis yang lebih tinggi. Namun, setelah beberapa saat saya harus berubah pikiran. Ternyata bahkan dalam bahasa pemrograman anak-anak ini, ada chip tersembunyi yang dapat digunakan secara serius bahkan ketika belajar pemrograman profesional. Saya ingin berbagi dengan Anda penemuan saya.Kloning dan Variabel di Awal
Murid saya menyukai permainan - "Zombies terhadap tanaman . " Dan dia tertarik untuk memprogramnya sendiri. Mari kita ingat bagaimana game ini bekerja? Di sisi kanan, kami memiliki barisan tanaman yang tumbuh mendekati zombie.Ada banyak solusi untuk masalah ini, tetapi menurut saya solusi yang lebih elegan adalah dengan menggunakan jumlah sprite minimum, yaitu gunakan kloning.Bagaimana membuat masing-masing individu klon memiliki standar hidup sendiri? Apa yang harus dipilih variabel atau daftar? Mereka berusaha menggunakan daftar, tetapi setelah penelitian yang lebih rinci, mereka menyadari bahwa struktur data ini tidak membantu menyelesaikan masalah. Variabel dan daftar di Scratch memiliki 2 jenis visibilitas untuk setiap tipe data - ini adalah "untuk semua sprite"atau "hanya untuk sprite ini . " Saya harus memeriksa ruang lingkup. Kami mulai dengan variabel.Setelah mencapai versi variabel yang berfungsi dengan cakupan "hanya untuk sprite ini" . Dalam bahasa pemrograman klasik, jenis visibilitas ini disebut lokal atau pribadi, tergantung pada konteksnya.Ternyata jika variabel ini dengan ruang lingkup yang diberikan digunakan dalam klon, maka instance dari variabel tersebut dibuat dalam klon yang milik klon tertentu dan yang digunakan untuk perhitungan internal / operasi klon. Dalam kasus kami, setiap klon memiliki "kehidupan" sendiri. Jika itu menjadi menarik, maka saya menyarankan Anda untuk berkonsultasi dengan direktori . Dan di sini adalah gambar yang menunjukkan bagaimana sprite atau klon bekerja dengan variabel dari berbagai jenis visibilitas.
Variabel dengan ruang lingkup untuk semua sprite (gambar di sebelah kiri) adalah satu untuk semua. Ngomong-ngomong, di sini Anda dapat menonton bekerja dengan bagian-bagian penting dengan anak-anak dan apa perlombaan untuk sumber daya. Dan jika ruang lingkup variabel "hanya untuk sprite ini", maka sprite dan klonnya memiliki variabel sendiri dengan nama yang sama dengan tempat mereka bekerja (gambar dari kanan). Dan klon tidak memiliki akses ke variabel asli dan variabel klon lain.Ini adalah penemuan tak terduga dan menyenangkan dari properti Scratch untuk membuat algoritma seperti itu.PENTING: Suatu variabel adalah alat yang sangat kuat dari seorang programmer sejati, jadi saya segera mengajari anak-anak nama variabel yang benar, karena keterampilan ini akan membantu mereka dalam proyek-proyek dengan kompleksitas yang berbeda-beda.Nama benda sebagai pengidentifikasi mereka
PENTING: semua variabel dengan zona visibilitas "hanya untuk sprite ini".Alat ini benar-benar tidak terduga untuk saya. Mari kita mulai dengan sebuah cerita tentang bagaimana seorang siswa dan saya menemukan fitur bahasa ini. Murid saya memutuskan untuk membuat game dengan "kecerdasan buatan". Permainan ini mewakili perang bintang di pesawat ruang angkasa dan pemain memiliki kemampuan untuk mengendalikan satu kapal, sementara lawan mengejar Anda dan satu sama lain. Agar mereka dapat mengejar Anda atau satu sama lain, mereka perlu entah bagaimana memutuskan siapa yang akan dikejar. Masalah ini dapat diselesaikan di dahi dan mengatur urutan pengejaran kapal, tetapi permainan akan kehilangan kecerdasannya dan cepat bosan. Oleh karena itu, siswa memutuskan untuk menyesuaikan kecerdasan sehingga kapal dengan kecerdasan mengejar musuh terdekat. Mari kita lihat bagaimana dia mulai menyelesaikan masalah ini.
Menurut saya solusi yang bagus untuk membuat prototipe cepat. Tapi apa batasannya? Pertama, kompleksitas kode saat Anda menambahkan kapal baru. Oleh karena itu, kompleksitas kode meningkat dan mutasi kode karena kompleksitas tidak dikesampingkan. Waktu untuk mencari kesalahan dan men-debug algoritma akan meningkat. Dan tentu saja, tidak ada yang membatalkan metrik keren seperti penuaan kode (pengembangan SW level lanjut). Apa yang harus dilakukan Dan Anda perlu melakukan hal berikut, Anda perlu membuat algoritma umum yang secara dinamis akan beradaptasi untuk menambah atau mengurangi jumlah kapal.Untuk algoritme ini, kita memerlukan properti bahasa - nama sebagai pengidentifikasi untuk objek. Waktunya telah tiba untuk perubahan besar dan di sini Anda, sebagai seorang guru, dapat berbicara tentang hal seperti refactoring. Ini adalah perubahan berurutan dalam kode, meningkatkan struktur dan pengoptimalannya. Dan yang paling penting, agar setiap perubahan tidak merusak program, dan jumlah perubahan juga harus dipilih dengan sangat hati-hati. Terlalu banyak perubahan buruk, terlalu sedikit panjang. Keahlian refactoring yang terbentuk akan memberikan keuntungan dan efisiensi kepada programmer. Tetapi untuk pembentukan keterampilan Anda perlu bekerja dengan kepala Anda, dan tidak hanya melihat-lihat. Saya berhasil membuat 4 perubahan pada program asli dan hasilnya tidak berubah.
Perhatikan bahwa saya belum menghapus blok, tetapi meninggalkannya. Mengapa Karena jika terjadi kesalahan, kami dapat mengembalikan opsi sebelumnya, mulai dari awal lagi. Tetapi segera setelah saya memeriksa eksekusi skrip yang diperbarui dengan benar, saya akan segera menghapusnya agar tidak terganggu oleh mereka di masa depan.Pernahkah Anda memperhatikan? Sekarang di blok "turn to ..." ada variabel dan ini berfungsi. Yaitu kami memeriksa dengan upaya minimal agar pendekatan ini berhasil. Ini luar biasa. Sekarang kita dapat mulai menulis algoritma yang akan memungkinkan kita untuk menentukan objek pengejaran kapal terdekat.Apa yang bermanfaat bagi kita? Ini dari struktur data - ini adalah variabel dan daftar. Dari algoritma, ini adalah menemukan jumlah minimum (jarak) dalam daftar. Kami juga membutuhkan algoritma yang menentukan nama objek untuk dikejar pada jarak minimum.Banyak kode akan ditulis sekarang. Tetapi agar tidak tenggelam dan menjadi bingung dalam tumpukan skrip nanti, kita perlu menggunakan fungsi keren lainnya, yaitu membuat blok kita sendiri. Fungsi ini sangat kuat, tetapi jarang digunakan oleh anak sekolah, dan beberapa programmer, namun memungkinkan Anda untuk membuat algoritma program yang dapat dimengerti dari bacaan pertama. Omong-omong, Anda dapat membaca tentang teknik-teknik untuk membuat kode yang dapat dipahami dalam buku Martin Fowler “Refactoring. Meningkatkan Kode yang Ada »Seperti halnya konstruksi skala besar, kita perlu merencanakan semuanya. Mari kita rencanakan dalam urutan mana kita akan mengembangkan blok:- Daftar nama semua kapal,
- Perhitungan jarak ke semua kapal,
- Pencarian jarak minimum
- Cari nama kapal untuk mengejar jarak minimum yang ditemukan.
Aturan utamanya adalah bahwa setiap "bagian" dibuat dan perubahan harus diperiksa.Untuk membuat algoritma umum, kita perlu mengorbankan sesuatu, misalnya, nama asli sprite, kita harus membakukannya dan mendapatkan tata letak berikut.Dan sekarang kami siap untuk menggambarkan 1 bagian dari program. Kami menulis segalanya untuk kapal pertama. Jalankan skrip ini secara terpisah dan lihat hasilnya. Ayo pergi!
Jika kami menambahkan kapal baru, kami hanya perlu mengubah satu digit dalam algoritma ini. Keren Keren!Kami melaju. Dan mari kita ajari dia 2 algoritma. Kami melihat apa yang terjadi. Ini segera merupakan hasil akhir dengan fungsi tambahan.
Hore! Itu bekerja. Anda dapat memverifikasi ini sebagai berikut, harus 0 salah satu nilai dalam daftar jarak. Jika ini bukan masalahnya, cari kesalahan.Kita melangkah lebih jauh! Cari jarak minimum. Memperhatikan bahwa jarak selalu positif. Dan akan selalu ada angka minimum - 0. Ay-ya-yay! Kesimpulannya adalah untuk mencari minimum, tetapi bukan nol. Anda dapat mencoba sendiri dan mengoptimalkan kode sendiri, agar tidak menghitung jarak dari kapal 1 ke kapal 1 (ini bukan salah ketik).
Kami melatih sprite dari fungsi baru dan mendapatkannya.
Jangan lupa periksa! Untuk melakukan ini, Anda bahkan dapat menghentikan game dan menjalankan skrip terpisah.Kami menulis semua yang diperlukan, sekarang yang utama adalah menggunakan fungsi-fungsi ini dengan benar.
Jika semuanya bekerja untuk Anda dengan benar, maka Anda akan melihat yang berikut:Memperhatikan bahwa kapal dengan "kecerdasan buatan" terpecah di antara lawan yang berbeda. Anda dapat meningkatkan program dan menyulitkan pengambilan keputusan. Sebagai contoh, jika kapal yang dikejar memiliki sedikit kehidupan yang tersisa, maka ia menyelesaikannya, dan jika ia menemukannya lebih dekat dan dengan kesehatan yang lebih sedikit, maka habiskan yang terlemah terlebih dahulu.Omong-omong, dalam program ini Anda dapat mengurangi jumlah tindakan dan meningkatkan algoritme. Coba tanganmu. Anda bisa mendapatkan program ini di sini .Untuk meringkas
Di sini, pada kasus-kasus seperti itu saya belajar bagaimana Scratch memungkinkan siswa untuk dengan cepat mempelajari banyak teknik pemrograman nyata. Di dalamnya Anda dapat berbicara tentang pekerjaan bagian kritis, tentang algoritma umum, tentang variabel dan ruang lingkupnya, tentang membuat blok Anda sendiri dan menyusun kode Anda. Dan juga dalam bahasa ini Anda dapat berbicara tentang keterampilan profesional, misalnya, refactoring.Ini hanya sebagian kecil dari toolkit programmer, tetapi ini sangat penting. Dan di Scratch semakin mudah untuk dijelaskan. Source: https://habr.com/ru/post/id399495/
All Articles