Inilah yang saya sebut metode pengambil / penyetel "gabungan" (dari jQuery):
var foo = $("<div>This is my HTML</div>"),
myText;
myText = foo.text(); // myHTML now equals "This is my HTML" (Getter)
foo.text("This is a new value"); // The text now equals "This is a new value")
Ini adalah logika yang sama dengan metode (teoretis) yang terpisah:
var foo = $("<div>This is my HTML</div>"),
myText;
myText = foo.getText(); // myHTML now equals "This is my HTML" (Getter)
foo.setText("This is a new value"); // The text now equals "This is a new value")
Pertanyaan saya:
Saat mendesain perpustakaan seperti jQuery, mengapa Anda memutuskan untuk memilih rute pertama dan bukan yang kedua? Bukankah pendekatan kedua lebih jelas dan lebih mudah dipahami?
design
javascript
Retas Retas
sumber
sumber
Jawaban:
Murni berspekulasi di sini, tapi saya akan cenderung percaya para pengembang jQuery yang menggunakan banyak gaya fungsional dalam penataan jQuery jelas memiliki kecenderungan ke arah paradigma fungsional.
Mengingat bahwa, dalam paradigma fungsional ada budaya yang kuat untuk mengurangi redundansi, dan bisa dikatakan bahwa pendekatan kedua memiliki redundansi yang tidak perlu. Pendekatan pertama mungkin tidak jelas bagi seseorang yang terbiasa dengan semua bahasa imperatif umum, tetapi itu tidak dapat disangkal melakukan lebih banyak dengan lebih sedikit dengan hanya memiliki satu metode, bukan dua. Ini mungkin berbahaya, tetapi ini adalah alat umum dalam paradigma fungsional dan sesuatu yang dengan cepat terbiasa.
Berlatihlah dalam paradigma fungsional dan Anda dengan cepat mengatasi keinginan menuju upacara dan belajar untuk menghargai kemampuan untuk berbuat lebih banyak dengan lebih sedikit. Meskipun ini merupakan pilihan subjektif berdasarkan preferensi dengan cara yang sama banyak orang memiliki preferensi mengenai manajemen spasi putih. Dengan cara ini saya tidak mengatakan satu cara yang lebih baik, melainkan bahwa mereka adalah hal-hal yang biasa dilakukan orang, yang mungkin mengapa jQuery memiliki pendekatan yang dilakukannya.
Ini akan menjadi mengapa saya percaya para pengembang jQuery melakukan ini dan secara umum mengapa seseorang mungkin mengambil pendekatan ini.
sumber
Formulir
dapat menyiratkan sejumlah hal. Paling umum, ini menyarankan
foo
objek, dengan metode yang disebuttext
menerima string, yang melakukan sesuatu . Tidak ada implikasi bahwa ini adalah properti sama sekali.Dalam banyak bahasa, ini dapat dianggap sebagai bentuk disingkat dari
di mana hasilnya dibuang. Jadi pendekatan ini terlalu ambigu untuk menjadi cara yang efektif untuk mengatur properti (dari sudut pandang keterbacaan kode).
sumber
Agak spekulatif, tapi ini kesempatan saya.
jQuery merangkul sepenuhnya sifat fungsional javascript. Itulah yang membuatnya sangat mengagumkan, tetapi bisa membuat banyak pengembang menggaruk-garuk kepala ketika mereka berasal dari bahasa OO yang lebih murni seperti java. Tampaknya melanggar semua konvensi dan praktik yang baik.
Bahasa fungsional cenderung menekankan sintaksis deklaratif. Itu cenderung membaca pernyataan seperti fakta daripada perintah seperti. Contoh
yang dapat dibaca sebagai "pelanggan yang memenuhi syarat adalah pelanggan yang usianya di atas 30". Secara konstrast, bahasa imperatif dibaca seperti urutan perintah
Itu dapat dibaca sebagai "Periksa setiap pelanggan, dan jika usianya lebih dari 30, tambahkan mereka ke koleksi yang memenuhi syarat"
Menambahkan aa
set
danget
operasi akan membuat jQuery terasa seperti perpustakaan wajib. Anda dapat menyusun cara untuk membaca pernyataan berikutDengan menjaga kata kerja tindakan dari api jQuery, mereka membuatnya terasa seperti API deklaratif. Ini memberikan nuansa fungsional yang konsisten ke perpustakaan. Itu sebabnya saya pikir mereka kelebihan kata kunci.
sumber
Itu membuatnya berperilaku agak lebih seperti properti , yang baru-baru ini diperkenalkan ke JavaScript, dan karena itu belum banyak digunakan, terutama di perpustakaan seperti jQuery yang dimaksudkan untuk membantu abstrak ketidaksesuaian browser.
Jika Anda pernah melihat definisi kelas yang penuh dengan properti seperti itu, awalan "set" dan "get" terlihat berlebihan, karena penambahan parameter nilai sudah memberitahu Anda itu adalah setter. Martin Fowler membuat poin bagus tentang getter yang memerlukan parameter, tetapi meskipun demikian, dalam konteks itu parameter nilai tambahan dengan jelas menunjukkan setter, serta fakta bahwa setter jarang muncul di sisi kanan penugasan. Dan ketika Anda menulis kode, Anda harus tetap melihat dokumentasi untuk perpustakaan.
Karena Anda hanya meminta keuntungan, saya tidak akan menutupi kekurangannya.
sumber