Perilaku - mesin negara tanpa sakit kepala

Pendekatan standar untuk menggambarkan urutan input dan reaksi pengguna (misalnya, ketika mengontrol karakter dalam game) adalah mesin negara. Namun, sering mengarah ke program yang rumit, pemahaman yang membutuhkan usaha yang cukup besar atau bahkan membuat sketsa di atas kertas. Dalam artikel ini, saya mengusulkan perubahan kecil dalam deskripsi, yang menghemat ruang layar dan sumber daya otak.


gambar

Pergeseran deskripsi adalah penggunaan teknik coroutine. Untuk menerapkan teknik ini, perlu membayangkan perilaku seperti apa yang kita harapkan dari komputer sebagai hasilnya. Oleh karena itu, saya menelepon perpustakaan kecil yang saya buat untuk tugas ini - Perilaku.

Ketika pengguna berinteraksi dengan program, komputer menunggu tindakan tertentu dan merespons input dengan cara tertentu. Perilaku Primitif dan kombinasinya dapat menggantikan mesin besar, yang sering ditemukan secara formal atau tidak resmi dalam program. Misalnya, ketika suatu program sedang menunggu tombol tertentu untuk ditekan, kita dapat mengatakan bahwa ia menjalankan Perilaku waitForKey (...). Kenyamanannya adalah bahwa Perilaku digabungkan dalam bentuk yang mudah dibaca, tidak seperti mesin negara. Contoh sederhana Drag & Drop:

* DragAndDrop = * draggedObject =  MouseDown  -  * First *  MouseUp * Forever *  MouseMove *  draggedObject 

Perilaku memiliki awal, akhir, dan dapat mengembalikan nilai. Perilaku dijalankan secara berurutan atau dapat dieksekusi secara paralel menggunakan kombinator. Sebagai contoh, Combinator Pertama mengeksekusi beberapa Perilaku secara paralel dan berakhir ketika salah satu Perilaku selesai, mengembalikan hasilnya. Forever - mengulangi pelaksanaan Perilaku tertentu hingga tak terbatas. Tidak seperti eksekusi fungsi, Perilaku tidak memblokir utas eksekusi, sehingga Perilaku tak terbatas dapat sangat berguna.

Saya menerapkan Perilaku menggunakan fungsi yang menerima acara primitif (seperti MouseDown, MouseUp, MouseMove, ...) sebagai parameter dan menghasilkan objek berupa:

 { done: true|false, value: result value } 

Anda dapat melihat implementasinya di sini: behavi.js di GitHub dan contoh Drag & Drop di sini: jsFiddle .

Di mana Perilaku dapat digunakan?

  • Game komputer - sangat mudah untuk menulis logika dan AI, kadang-kadang saya bahkan melakukan semuanya dengan Perilaku, termasuk animasi dan pergerakan objek, tetapi Anda perlu memantau kinerja
  • Tutorial di frontend (tur fitur baru) - tampilkan informasi, tunggu interaksi pengguna, lanjutkan tergantung pada input, semua kode di satu tempat dan baca hampir seperti kode pseudo
  • Pengurai bahasa yang berorientasi pada subjek adalah kode idiomatik, tidak perlu "melihat ke depan" pada input, karena Anda dapat menjalankan beberapa Perilaku secara paralel

Foto: Perilaku oleh Nick Youngson CC BY-SA 3.0 Gambar Saham Alpha

Source: https://habr.com/ru/post/id436972/


All Articles