Prinsip Tell Don't Don't mengatakan:
Anda harus berusaha memberi tahu objek apa yang Anda ingin mereka lakukan; jangan bertanya kepada mereka tentang keadaan mereka, membuat keputusan, dan kemudian memberi tahu mereka apa yang harus dilakukan.
Masalahnya adalah bahwa, sebagai penelepon, Anda tidak boleh membuat keputusan berdasarkan keadaan objek yang dipanggil yang mengakibatkan Anda kemudian mengubah keadaan objek. Logika yang Anda laksanakan mungkin tanggung jawab objek yang disebut, bukan milik Anda. Bagi Anda untuk membuat keputusan di luar objek melanggar enkapsulasi.
Contoh sederhana "Katakan, jangan Tanya" adalah
Widget w = ...;
if (w.getParent() != null) {
Panel parent = w.getParent();
parent.remove(w);
}
dan versi kirim adalah ...
Widget w = ...;
w.removeFromParent();
Tetapi bagaimana jika saya perlu tahu hasil dari metode removeFromParent? Reaksi pertama saya adalah hanya mengubah removeFromParent untuk mengembalikan boolean yang menunjukkan apakah induk telah dihapus atau tidak.
Tapi kemudian saya menemukan Pola Pemisahan Permintaan Perintah yang mengatakan TIDAK untuk melakukan ini.
Ini menyatakan bahwa setiap metode harus berupa perintah yang melakukan tindakan, atau permintaan yang mengembalikan data ke pemanggil, tetapi tidak keduanya. Dengan kata lain, mengajukan pertanyaan tidak boleh mengubah jawabannya. Lebih formal, metode harus mengembalikan nilai hanya jika mereka secara transparan transparan dan karenanya tidak memiliki efek samping.
Apakah keduanya benar-benar berselisih satu sama lain dan bagaimana saya memilih di antara keduanya? Apakah saya setuju dengan Programmer Pragmatis atau Bertrand Meyer dalam hal ini?