Rekan kerja: Mari jujur di sini. Sintaks Linq menyebalkan. Ini membingungkan dan tidak intuitif.
Anda tidak bisa berdebat dengan kritik itu. Untuk rekan kerja Anda, itu menyebalkan . Kami gagal merancang sintaksis yang, bagi mereka, jelas dan intuitif. Itu gagal kami, dan Anda bisa menyampaikan permintaan maaf saya kepada rekan kerja Anda. Saya senang menerima saran tentang cara menjadikannya lebih baik; apa yang menurut rekan kerja Anda membingungkan atau tidak intuitif?
Namun, Anda tidak bisa menyenangkan semua orang. Pendapat pribadi saya, dan pendapat sebagian besar orang yang saya ajak bicara tentang masalah ini, adalah bahwa sintaks pemahaman kueri jauh lebih jelas daripada sintaksis imperatif yang setara. Jelas tidak semua orang setuju, tetapi untungnya kami tidak memerlukan konsensus dari semua jutaan pelanggan kami ketika kami melakukan desain bahasa.
Mengenai masalah apa yang "intuitif", saya diingatkan tentang kisah ahli bahasa Inggris yang mempelajari banyak bahasa berbeda dan akhirnya menyimpulkan bahwa bahasa Inggris adalah yang terbaik dari semua bahasa karena dalam bahasa Inggris, kata-katanya datang dalam urutan yang sama seperti yang Anda pikirkan mereka . Tidak seperti bahasa Prancis, di mana mereka terus-menerus mengatakan hal-hal seperti "anjing putih memakan daging merah". Betapa sulit bagi orang Prancis untuk memikirkan kata-kata dalam urutan yang benar dan kemudian harus mengucapkannya dalam urutan Prancis ! Bahasa Prancis sangat tidak intuitif! Sungguh menakjubkan bahwa Prancis berhasil berbicara itu. Dan Jerman? di mana mereka berpikir "anjing makan daging" tetapi kemudian harus mengatakan "anjing makan daging"!?!
Seringkali apa yang "intuitif" hanyalah masalah keakraban. Butuh berbulan - bulan saya bekerja dengan LINQ sebelum saya berhenti memulai pertanyaan saya dengan klausa "pilih". Sekarang sudah sifat kedua, dan urutan SQL tampaknya aneh.
Yang mana itu! Aturan pelingkupan semua kacau dalam SQL. Sesuatu yang Anda mungkin ingin tunjukkan kepada rekan kerja Anda adalah bahwa LINQ dirancang dengan hati-hati sehingga (1) pengenalan variabel dan cakupan terjadi dari kiri ke kanan (*), dan (2) urutan kueri muncul pada halaman tersebut. urutan pelaksanaannya. Itulah saat Anda mengatakannya
from c in customers where c.City == "London" select c.Name
c muncul di lingkup di sebelah kiri, dan tetap di lingkup di sebelah kanan. Dan urutan terjadinya adalah: "pelanggan" pertama dievaluasi. Kemudian "di mana" dievaluasi untuk menyaring urutan. Kemudian urutan yang difilter diproyeksikan oleh "pilih".
SQL tidak memiliki properti ini. Jika Anda mengatakan
SELECT Name FROM Customers WHERE City = 'London'
kemudian "Nama" dibawa ke ruang lingkup oleh sesuatu di kanannya, bukan ke kiri, dan kueri dieksekusi dalam urutan yang benar-benar kacau; klausa tengah dievaluasi pertama, kemudian klausa terakhir, dan kemudian klausa pertama. Itu sekarang tampak gila dan tidak intuitif bagi saya, telah bekerja hanya dengan LINQ begitu lama sekarang.
(*) Aturan pelingkupan agak aneh di LINQ dengan klausa gabungan. Tapi selain itu, cakupan sarangnya bagus.