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 Room
kelas, Anda dapat memiliki Item
kelas 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 World
yang 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 moveToRoom
fungsi yang mendapat World
dan mengembalikannya dengan World.player.location
diubah ke ruang baru, World.rooms[new_room].visited = True
dan 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 World
bolak-balik mungkin mahal. Juga, setiap fungsi mungkin perlu memiliki akses ke World
objek 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 roomCanBeEntered
fungsi perlu mengakses World.player.invetory
dan World.rooms
, describeMonster
perlu mengakses World.monsters
dan 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?