Anda memiliki status saat Anda mengaitkan nilai (angka, string, struktur data yang kompleks) ke identitas dan titik waktu.
Misalnya, angka 10 dengan sendirinya tidak mewakili keadaan apa pun: itu hanya angka yang terdefinisi dengan baik dan akan selalu menjadi dirinya sendiri: bilangan asli 10. Sebagai contoh lain, string "HELLO" adalah urutan lima karakter, dan itu sepenuhnya dijelaskan oleh karakter yang dikandungnya dan urutan di mana mereka muncul. Dalam lima juta tahun dari sekarang, string "HELLO" akan tetap menjadi string "HELLO": nilai murni.
Untuk memiliki negara Anda harus mempertimbangkan dunia di mana nilai-nilai murni ini terkait dengan beberapa jenis entitas yang memiliki identitas . Identitas adalah ide primitif: itu berarti Anda dapat membedakan dua hal terlepas dari properti lain yang mungkin mereka miliki. Sebagai contoh, dua mobil dengan model yang sama, warna yang sama, ... adalah dua mobil yang berbeda.
Dengan hal-hal ini dengan identitas, Anda dapat melampirkan properti padanya, dijelaskan oleh nilai-nilai murni. Misalnya, mobil saya memiliki sifat biru. Anda dapat menggambarkan fakta ini dengan mengaitkan pasangan
("colour", "blue")
ke mobil saya. Pasangan ("warna", "biru") adalah nilai murni yang menggambarkan keadaan mobil itu.
Negara tidak hanya terkait dengan entitas tertentu, tetapi juga ke titik waktu tertentu. Jadi, Anda dapat mengatakan bahwa hari ini, mobil saya memiliki status
("colour", "blue")
Besok aku akan mengecatnya dalam warna hitam dan negara baru akan melakukannya
("colour", "black")
Perhatikan bahwa status suatu entitas dapat berubah, tetapi identitasnya tidak berubah menurut definisi. Ya, selama entitas itu ada, tentu saja: sebuah mobil dapat dibuat dan dihancurkan, tetapi ia akan mempertahankan identitasnya sepanjang masa hidupnya. Tidak masuk akal untuk berbicara tentang identitas sesuatu yang belum ada / lagi.
Jika nilai properti yang dilampirkan pada entitas tertentu berubah seiring waktu, Anda mengatakan bahwa status entitas itu bisa berubah . Kalau tidak, Anda mengatakan bahwa negara tidak dapat diubah .
Implementasi yang paling umum adalah untuk menyimpan keadaan suatu entitas dalam beberapa jenis variabel (variabel global, variabel anggota objek), yaitu untuk menyimpan snapshot keadaan saat ini. Keadaan yang tidak dapat diubah kemudian diimplementasikan menggunakan penugasan: setiap operasi penugasan menggantikan foto sebelumnya dengan yang baru. Solusi ini biasanya menggunakan lokasi memori untuk menyimpan snapshot saat ini. Menimpa lokasi memori adalah operasi destruktif yang menggantikan snapshot dengan yang baru. ( Di sini Anda dapat menemukan pembicaraan yang menarik tentang pendekatan pemrograman berorientasi tempat ini .)
Alternatifnya adalah dengan melihat status (histori) selanjutnya dari suatu entitas sebagai aliran (barangkali urutan tak terbatas) dari nilai-nilai, lihat misalnya Bab 3 dari SICP . Dalam hal ini, setiap foto disimpan di lokasi memori yang berbeda, dan program dapat memeriksa foto yang berbeda secara bersamaan. Snapshots yang tidak terpakai dapat dikumpulkan dari sampah saat tidak diperlukan lagi.
Keuntungan / kerugian dari kedua pendekatan tersebut
- Pendekatan 1 mengkonsumsi lebih sedikit memori dan memungkinkan untuk membuat snapshot baru secara lebih efisien karena tidak melibatkan penyalinan.
- Pendekatan 1 secara implisit mendorong negara baru ke semua bagian dari program yang memegang referensi untuk itu, pendekatan 2 akan memerlukan beberapa mekanisme untuk mendorong snapshot ke pengamatnya, misalnya dalam bentuk acara.
- Pendekatan 2 dapat membantu untuk mencegah kesalahan kondisi tidak konsisten (mis. Pembaruan kondisi parsial): dengan mendefinisikan fungsi eksplisit yang menghasilkan status baru dari yang lama, lebih mudah untuk membedakan antara foto yang dihasilkan pada titik yang berbeda dalam waktu.
- Pendekatan 2 lebih modular karena memungkinkan untuk dengan mudah menghasilkan tampilan pada negara yang independen dari negara itu sendiri, misalnya menggunakan fungsi tingkat tinggi seperti
map
dan filter
.