Saya berasumsi Anda sedang berbicara tentang properti read-only , atau setidaknya pengambil properti , karena setter properti , dalam hampir setiap contoh, akan memiliki efek samping. Kalau tidak, itu tidak terlalu berguna.
Secara umum, desain yang baik mengikuti prinsip paling tidak mengejutkan . Jangan lakukan hal-hal yang penelepon tidak harapkan Anda lakukan, terutama jika hal-hal itu dapat mengubah hasil di masa depan .
Secara umum , itu berarti bahwa pengambil properti tidak boleh memiliki efek samping.
Namun , mari kita berhati-hati tentang apa yang kita maksud dengan "efek samping".
Sebuah efek samping adalah, secara teknis, setiap modifikasi negara. Itu mungkin negara yang dapat diakses publik, atau ... itu mungkin negara yang sepenuhnya pribadi.
Loader malas / ditangguhkan adalah salah satu contoh negara yang hampir secara eksklusif bersifat pribadi. Selama itu bukan tanggung jawab penelepon untuk membebaskan sumber daya itu, maka Anda sebenarnya mengurangi kejutan dan kerumitan secara umum dengan menggunakan inisialisasi yang ditangguhkan. Penelepon biasanya tidak berharap harus secara eksplisit memberi sinyal inisialisasi struktur internal . Jadi, inisialisasi malas tidak melanggar prinsip di atas.
Contoh lain adalah properti yang disinkronkan. Agar suatu metode aman dari thread, seringkali harus dilindungi oleh bagian kritis atau mutex. Memasuki bagian kritis atau mendapatkan mutex adalah efek samping; Anda memodifikasi negara, biasanya negara global . Namun, efek samping ini diperlukan untuk mencegah jenis kejutan yang jauh lebih buruk - kejutan data yang diubah (atau lebih buruk, sebagian dimodifikasi) oleh utas lainnya.
Jadi saya akan sedikit melonggarkan batasan sebagai berikut: Properti membaca seharusnya tidak memiliki efek samping yang terlihat atau efek samping yang mengubah semantik mereka .
Jika tidak ada cara yang mungkin bagi penelepon untuk dipengaruhi oleh, atau bahkan menyadari efek samping, maka efek samping itu tidak membahayakan. Jika tidak mungkin bagi Anda untuk menulis tes untuk memverifikasi keberadaan efek samping tertentu, maka cukup terlokalisasi untuk label sebagai detail implementasi pribadi, dan dengan demikian tidak ada kekhawatiran yang sah untuk dunia luar.
Tapi berhati-hatilah; sebagai aturan praktis, Anda harus mencoba menghindari efek samping, karena sering kali apa yang Anda anggap sebagai detail implementasi pribadi dapat tiba-tiba bocor dan menjadi publik.