Saya perhatikan posting di sini menunjukkan penggunaan fungsi delegasi \ lambda untuk memecahkan lubang di ide tengah tanpa banyak pengulangan: http://www.markhneedham.com/blog/2009/04/04/functional-c -the-hole-in-the-middle-pattern /
Masalahnya tampaknya bahwa pengembang junior dan yang lainnya tidak perlu memahami apa konsep fungsi pointer \ delegate \ lambda, yang tampaknya membuat pembacaan (dan mungkin debugging) kode lebih sulit.
Haruskah kita menghindari atau sangat membatasi penggunaan alat ini dalam menulis perangkat lunak bisnis, terutama di tim kecil atau toko pengembang tunggal?
Atau apakah dapat diterima untuk menggunakannya dengan komentar yang sesuai dan berharap bahwa ketika saya tidak lagi tahu bahwa pengembang berikutnya akan memahami atau mempelajari tentang fungsi lambda?
Array
kelas hingga ORM yang rumit. Yah, tidak ada yang mengeluh.Jawaban:
Sejujurnya, itu masalah mereka. Untuk itulah Anda memastikan mereka memiliki pelatihan. Anda tidak dapat tidak menggunakan teknik yang baik hanya karena beberapa orang mungkin tidak memahaminya. Jika mereka butuh bantuan, mereka bisa datang bertanya kepada penulis. Lebih penting lagi, fungsi lambda menjadi fitur bahasa yang sangat umum.
Haruskah kita tidak menggunakan warisan karena beberapa orang tidak memahaminya? Sial, beberapa orang menolak untuk percaya pada sains atau kuman atau hal-hal konyol apa pun. Anda harus dapat melanjutkan dan tidak membiarkan kemungkinan orang lain tidak dapat mengikuti Anda menghentikan Anda dari menulis kode terbaik yang Anda bisa. Fungsi Lambda adalah fitur hebat dan sangat membantu dalam penulisan kode, dan Anda harus mengambil semua bantuan yang bisa Anda dapatkan.
Pengembang harus tahu cara menggunakan bahasa yang mereka miliki atau tidak. Jika mereka tidak melakukannya, maka pecat mereka dan temukan seseorang yang melakukannya, atau latih mereka begitu mereka melakukannya.
sumber
Ya, gunakan itu.
Saya adalah pengembang junior, dan saya tahu / mengerti lambdas (dan konsep lain yang Anda sebutkan). Tidak ada yang bisa kulihat untuk mencegah pengembang junior mempelajari semua konsep itu dalam waktu yang sangat singkat. Junior mungkin tidak memiliki jumlah pengalaman / keahlian yang sama ketika datang ke banyak gotcha pengembangan perangkat lunak, namun, konsep seperti lambdas dapat dengan mudah dipahami oleh siapa saja dengan pemahaman dasar pemrograman dan koneksi internet. Juga, tampaknya aneh bahwa Anda memilih lambdas sebagai contoh, mengingat jika Anda menggunakan C # kemungkinan Anda bahkan tidak memiliki banyak kesempatan untuk mulai belajar lambdas daripada pengembang junior (mereka baru diperkenalkan pada 2008, jika saya ingat dengan benar).
Singkatnya, tidak perlu membodohi kode Anda untuk kami orang baru. Kami akan baik-baik saja, dan akan benar-benar memilih untuk bekerja pada implementasi sebaik mungkin yang dapat Anda lakukan. :)
sumber
Jika mereka solusi yang masuk akal untuk masalah Anda maka Anda harus menggunakannya.
Jangan membatasi diri secara artifisial - Anda cenderung berakhir dengan kode berkualitas buruk yang sulit dipertahankan.
Jika kode ditulis dengan baik dengan komentar yang sesuai maka mereka yang mengikuti harus dapat belajar dari Anda.
sumber
Letakkan tautan ke dokumentasi msdn di komentar di bagian atas blok yang menggunakannya lalu lanjutkan. Anda tidak perlu takut untuk menggunakan teknologi baru / kompleks, bagian dari pekerjaan pengembang untuk mempelajari hal-hal yang tidak mereka ketahui.
sumber
Maka mereka perlu mempelajarinya. Periode.
Hanya perlu beberapa menit untuk menjelaskannya kepada mereka. Itu tidak sulit.
sumber
Anda harus menggunakan alat yang tepat untuk pekerjaan itu. Jika ada cara yang lebih sederhana dan jelas untuk menyelesaikan masalah yang ada, gunakan itu. Jika Anda perlu masuk ke sesuatu yang menurut Anda mungkin menjadi topik lanjutan untuk pengelola masa depan, tandai dengan jelas dan sertakan penunjuk ke dokumentasi yang menjelaskan teknik tersebut.
Perlu dicatat bahwa itu adalah tiga hal yang berbeda.
sumber
Dua skenario yang mungkin:
a) Rekan kerja Anda (atau kebanyakan dari mereka) cukup terampil. Mereka perlu belajar lambda, mereka bagian dari bahasa, dan kadang-kadang, mereka adalah alat yang tepat untuk pekerjaan itu. Jadi ketika mereka memang alat terbaik, tentu saja, gunakan mereka. Hindari menggunakannya karena Anda baru saja mempelajarinya sendiri dan Anda semua bersemangat dan menganggapnya sebagai peluru perak.
b) Anda, kolega (atau kebanyakan dari mereka) tidak kompeten. Tidak ada cara mereka akan sepenuhnya memahami lambdas, penutupan, pointer fungsi, atau konsep meta-coding serupa lainnya. Mereka mungkin sedang berjuang untuk memahami petunjuk, referensi, dan rekursi. Dalam situasi ini, yang terbaik yang dapat Anda lakukan adalah menggigit peluru, menggunakan solusi canggung, bebas-lambda, lambda, dan memoles cv Anda, karena Anda harus mencari pekerjaan.
sumber
Di sinilah konsistensi dapat banyak membantu. Jika Anda menggunakannya secara konsisten dengan gaya yang sama, dll., Maka pembaca hanya perlu mempelajarinya sekali, dan kemudian mereka mengenalinya di mana-mana.
Juga, mungkin membantu untuk menjadi eksplisit, setidaknya pada awalnya. Misalnya, keduanya setara:
... tetapi dalam kasus pertama, jelas, jika Anda tahu sintaks lambda, apa yang kami lakukan. Bahkan jika Anda tidak tahu sintaks lambda, sudah jelas Anda melihat sesuatu yang baru, dan Anda harus mencarinya. Dalam kasus kedua, sepertinya Anda melewati variabel.
Saya tahu bahwa ReSharper mendorong Anda untuk mengubahnya ke kasus kedua, tapi saya ingin tahu apakah itu selalu merupakan ide yang bagus. Dalam kasus kedua, Anda harus tahu bahwa
doSomething
membutuhkanAction
.sumber
doSomething
perluAction
." Dan bagaimana bisa berbeda dari harus tahu yangfunctionWithNameThatDoesNotSpecifyItsArgumentTypes
membutuhkanObjectOfSomeType
? Faktanya, dalam bahasa-bahasa di mana fungsi adalah objek kelas satu, itu tidak berbeda.Saya sering menemukan konsep-konsep tertentu sulit dipahami karena mereka hanya dijelaskan secara abstrak, daripada menjumpainya dalam situasi praktis dan kehidupan nyata. Jadi saya pribadi akan setuju untuk menemui konstruksi seperti itu.
Skenario utama yang dapat saya pikirkan untuk menghindari melakukan ini adalah jika pemrograman bukan tugas utama orang lain. Sebagai contoh, seorang administrator sistem, atau seorang ahli bioinformatika yang menghabiskan sebagian besar waktunya untuk melakukan percobaan yang sebenarnya ("tikus lab").
sumber
Sekarang, mungkin di sini kita memanggil DoAction karena tubuhnya terlalu panjang untuk masuk ke dalam lambda itu sendiri. Dalam hal itu, menggunakan metode ekstensi ForEach () ke Daftar tidak memberi kita banyak manfaat dibandingkan menggunakan loop foreach biasa, meskipun itu menghemat beberapa baris kode, saya kira. Tetapi dalam kasus khusus ini, menggunakan ForEach () mungkin telah menidurkan kami untuk melakukan sesuatu yang sebenarnya mengambil lebih banyak kode, dan menyebabkan beberapa pukulan tambahan pada stack daripada yang diperlukan; Argumen yang Berlalu Tidak Perlu Menjadi Lambda Sama sekali
Anda cukup memanggil DoAction seperti ini:
Tidak ada Lambda sama sekali. Kuncinya adalah untuk mengingat apa yang sebenarnya Anda lewati ketika Anda membuat ekspresi lambda: sesuatu cara pintas untuk mendefinisikan contoh delegasi. Ya, itu juga memiliki manfaat seperti penutupan, tetapi orang tidak boleh kehilangan situs apa yang diharapkan metode panggilan. Dalam hal ini, itu mengharapkan alamat ke metode yang cocok dengan tanda tangan Tindakan. DoAction sudah merupakan metode seperti itu, jadi membuat lambda hanya menambahkan panggilan metode yang sama sekali tidak perlu.
sumber
IMHO, menulis pada tingkat teknis apa pun yang lebih tinggi dari tingkat teknis tim, salah. Jika anggota tim Anda tidak benar-benar nyaman dengan ekspresi dan fungsi lambda dan mereka tidak punya waktu untuk mempelajarinya (mereka harus menghabiskan waktu mereka di database penyempurnaan kinerja, bekerja di UI lebih banyak, membuat komponen, dll.), Maka saya sangat sarankan untuk tidak menggunakannya . Namun, jika mereka mau belajar dan memiliki waktu luang, atau mereka sudah tahu pengetahuannya, lalu mengapa tidak?
Saya pikir ini adalah masalah relatif yang harus dinilai per tim dan tingkat teknis tim. Dan ini bukan hanya kasus fungsi lambda. Ini adalah kasus pengetahuan teknis. Jadi, misalnya setiap kali tim tahu tentang pola penyimpanan memiliki keahlian untuk menerapkan dan memeliharanya, maka mari kita lakukan. Tetapi jika tidak, cukup cari cara lain. Jika mereka tahu tentang OO JavaScript, maka biarkan mereka membuat kode yang lebih skalabel dalam JavaScript. Tetapi jika tidak, cukup kembali ke JavaScript prosedural.
sumber