Metode chaining adalah praktik metode objek mengembalikan objek itu sendiri agar hasilnya dipanggil untuk metode lain. Seperti ini:
participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save()
Ini tampaknya dianggap praktik yang baik, karena menghasilkan kode yang dapat dibaca, atau "antarmuka yang lancar". Namun, bagi saya itu tampaknya memecah notasi pemanggilan objek yang tersirat oleh orientasi objek itu sendiri - kode yang dihasilkan tidak mewakili tindakan yang dilakukan untuk hasil dari metode sebelumnya, yang adalah bagaimana kode berorientasi objek umumnya diharapkan bekerja:
participant.getSchedule('monday').saveTo('monnday.file')
Perbedaan ini berhasil membuat dua makna berbeda untuk notasi titik "memanggil objek yang dihasilkan": Dalam konteks chaining, contoh di atas akan dibaca sebagai menyimpan objek peserta , meskipun contoh sebenarnya dimaksudkan untuk menyimpan jadwal. objek diterima oleh getSchedule.
Saya mengerti bahwa perbedaannya di sini adalah apakah metode yang dipanggil harus diharapkan untuk mengembalikan sesuatu atau tidak (dalam hal ini akan mengembalikan objek yang disebut itu sendiri untuk dirantai). Tetapi kedua kasus ini tidak dapat dibedakan dari notasi itu sendiri, hanya dari semantik metode yang dipanggil. Ketika metode rantai tidak digunakan, saya selalu bisa tahu bahwa pemanggilan metode beroperasi pada sesuatu yang terkait dengan hasil panggilan sebelumnya - dengan rantai, asumsi ini rusak, dan saya harus secara semantik memproses seluruh rantai untuk memahami apa objek sebenarnya menjadi disebut benar-benar. Sebagai contoh:
participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter'))
Di sana dua panggilan metode terakhir merujuk pada hasil getSocialStream, sedangkan yang sebelumnya merujuk ke peserta. Mungkin praktik yang buruk untuk benar-benar menulis rantai di mana konteksnya berubah (kan?), Tetapi bahkan kemudian Anda harus terus-menerus memeriksa apakah rantai-titik yang terlihat serupa sebenarnya tetap dalam konteks yang sama, atau hanya bekerja pada hasilnya .
Bagi saya tampaknya sementara metode chaining dangkal menghasilkan kode yang dapat dibaca, membebani arti dari notasi titik hanya menghasilkan lebih banyak kebingungan. Karena saya tidak menganggap diri saya seorang guru pemrograman, saya berasumsi kesalahannya adalah milik saya. Jadi: Apa yang saya lewatkan? Apakah saya mengerti metode chaining yang salah? Apakah ada beberapa kasus di mana metode chaining sangat baik, atau beberapa di mana itu sangat buruk?
Sidenote: Saya mengerti pertanyaan ini bisa dibaca sebagai pernyataan pendapat yang disembunyikan sebagai pertanyaan. Namun, itu tidak - Saya benar-benar ingin memahami mengapa merantai dianggap praktik yang baik, dan di mana saya salah dalam berpikir itu merusak notasi berorientasi objek yang melekat.
.
itu akan mengabaikan nilai pengembalian mehtod dan selalu memanggil metode berantai apa pun menggunakan objek yang sama.