Ini sebagian besar pertanyaan teoretis tentang FP, tetapi saya akan mengambil petualangan teks (seperti Zork sekolah lama) untuk mengilustrasikan poin saya. Saya ingin tahu pendapat Anda tentang bagaimana Anda memodelkan simulasi stateful dengan FP.
Petualangan teks tampaknya benar-benar membutuhkan OOP. Sebagai contoh, semua "kamar" adalah contoh dari sebuah Roomkelas, Anda dapat memiliki Itemkelas dasar dan antarmuka seperti Item<Pickable>untuk hal-hal yang dapat Anda bawa dan sebagainya.
Pemodelan dunia dalam FP bekerja secara berbeda, terutama jika Anda ingin menegakkan kekekalan di dunia yang harus bermutasi saat permainan berlangsung (objek dipindahkan, musuh dikalahkan, skor bertambah, pemain mengubah lokasinya). Saya membayangkan satu objek besar Worldyang memiliki semuanya: kamar apa yang bisa Anda jelajahi, bagaimana mereka terhubung, apa yang dibawa pemain, tuas apa yang telah dipicu.
Saya pikir pendekatan murni pada dasarnya akan melewatkan objek besar ini ke fungsi apa pun dan mengembalikannya (mungkin dimodifikasi). Sebagai contoh, saya memiliki moveToRoomfungsi yang mendapat Worlddan mengembalikannya dengan World.player.locationdiubah ke ruang baru, World.rooms[new_room].visited = Truedan seterusnya.
Bahkan jika ini adalah cara yang lebih "benar", tampaknya ini menegakkan kemurnian demi hal itu. Bergantung pada bahasa pemrogramannya, melewatkan objek yang berpotensi sangat besar ini Worldbolak-balik mungkin mahal. Juga, setiap fungsi mungkin perlu memiliki akses ke Worldobjek apa pun . Sebagai contoh, sebuah ruangan mungkin dapat diakses atau tidak tergantung pada tuas yang dipicu di ruangan lain karena itu mungkin banjir, tetapi jika pemain membawa jaket pelampung, itu tetap bisa masuk. Monster mungkin agresif atau tidak, tergantung pada apakah pemain telah membunuh sepupunya di ruangan lain. Ini berarti bahwa roomCanBeEnteredfungsi perlu mengakses World.player.invetorydan World.rooms, describeMonsterperlu mengakses World.monstersdan sebagainya (pada dasarnya, Anda haruslulus seluruh beban sekitar). Bagi saya ini benar-benar memanggil untuk variabel global, bahkan jika ini semua kecuali gaya pemrograman yang baik terutama dalam FP.
Bagaimana Anda memecahkan masalah ini?