Apakah ada teknik umum untuk menangani keadaan (secara umum) dalam bahasa pemrograman fungsional? Ada solusi dalam setiap bahasa pemrograman (fungsional) untuk menangani keadaan global, tetapi saya ingin menghindari ini sejauh yang saya bisa.
Semua status dengan cara fungsional murni adalah parameter fungsi. Jadi saya perlu menempatkan seluruh kondisi permainan (sebuah hashmap raksasa dengan dunia, pemain, posisi, skor, aset, musuh, ...)) sebagai parameter untuk semua fungsi yang ingin memanipulasi dunia pada input atau pemicu yang diberikan . Fungsi itu sendiri mengambil informasi yang relevan dari gumpalan gamestate, melakukan sesuatu dengannya, memanipulasi gamestate dan mengembalikan gamestate. Tapi ini sepertinya solusi yang buruk untuk masalah ini. Jika saya menempatkan keseluruhan gamestate ke semua fungsi, tidak ada manfaatnya bagi saya berbeda dengan variabel global atau pendekatan imperatif.
Saya bisa memasukkan informasi yang relevan ke dalam fungsi dan mengembalikan tindakan yang akan diambil untuk input yang diberikan. Dan satu fungsi tunggal menerapkan semua aksi ke gamestate. Tetapi sebagian besar fungsi membutuhkan banyak informasi "relevan". move()
perlu posisi objek, kecepatan, peta untuk tabrakan, posisi semua musuh, kesehatan saat ini, ... Jadi pendekatan ini tampaknya tidak berhasil juga.
Jadi pertanyaan saya adalah bagaimana saya menangani sejumlah besar negara dalam bahasa pemrograman fungsional - terutama untuk pengembangan game?
EDIT: Ada beberapa kerangka kerja game untuk membangun game di Clojure. Ada pendekatan untuk memecahkan masalah ini sebagian adalah dengan memasukkan semua objek dalam game sebagai "entitas" dan memasukkannya ke dalam tas besar. Sebuah Fungsi utama gigant memegang layar dan entitas dan peristiwa menangani ( :on-key-down
, :on-init
, ...) untuk entitas ini dan menjalankan tampilan loop utama. Tapi ini bukan solusi bersih yang saya cari.
move()
, Anda mungkin harus melewati objek 'saat ini' (atau pengidentifikasi untuknya), ditambah dunia yang sedang dilaluinya, dan hanya mendapatkan posisi dan kecepatan saat ini ... output kemudian seluruh dunia fisika, atau setidaknya daftar benda yang diubah.