Agar lebih jelas, saya akan menyatakan bahwa saya telah menghabiskan banyak waktu dengan berbagai bahasa. Tetapi sampai sekarang sudah baik itu akan menggunakannya sepanjang waktu atau tidak mendukung sama sekali.
Sekarang pekerjaan telah saya mulai pada proyek yang membutuhkan VB.net dan saya melihatnya menyediakan kedua - duanya dalam hal AND dan ANDALSO . Yang pertama tidak korsleting, dan yang kedua tidak.
Jadi ini membuat saya bertanya-tanya mengapa? Memiliki pengaturan seperti ini tampaknya menyiratkan bahwa itu akan muncul cukup sering sehingga seseorang ingin beralih mode. Tapi saya tidak bisa memikirkan situasi di mana itu akan menjadi hal yang buruk untuk menggunakan Sirkuit Pendek .
Saya tahu ini bisa menjadi pilihan, jadi jika saya harus meletakkan ini di tempat lain, katakan saja di mana.
Meskipun saya berharap setidaknya ada jawaban resmi, mengapa memiliki kedua opsi akan lebih baik daripada selalu melakukan Sirkuit Pendek , ketika tersedia.
sumber
Jawaban:
Beberapa istilah dalam ekspresi logis dapat memiliki efek samping. Kadang-kadang diperlukan untuk memastikan semua efek samping terjadi dalam urutan yang dinyatakan, dan tidak ada yang dilewati dan itu adalah hasil evaluasi yang memandu logika:
Dalam kasus lain, Anda tidak ingin mengevaluasi salah satu istilah yang tersisa jika evaluasi sebelumnya menghasilkan false.
Beberapa orang akan / berpendapat bahwa mengandalkan perilaku hubung-pendek dalam contoh kedua adalah bentuk yang buruk, tetapi itu masuk ke gaya pengkodean dan sistem kepercayaan. Ada banyak bit kode yang sangat bagus di dunia yang bergantung pada hampir setiap fitur yang disediakan bahasa, dan memang begitu adanya.
ANDALSO VB renyah dan tampaknya menjadi upaya untuk membuat praktik lebih dapat diterima.
Seperti yang ditunjukkan JimmyJames dalam jawabannya, mungkin ada implikasi kinerja yang dapat diukur seputar evaluasi hubung singkat. Bahasa yang tidak menyediakan mekanisme, selalu mengevaluasi setiap istilah dari ekspresi, sedangkan yang menyediakannya, dapat menghasilkan pernyataan cabang tambahan. Either way, banyak tergantung pada jumlah langkah pemrosesan yang diperlukan untuk mengevaluasi setiap persyaratan dan juga pada kompiler dan arsitektur CPU. Anda biasanya tidak akan peduli tentang hal-hal seperti itu sampai Anda memiliki hambatan yang diukur dalam kode dan perlu mencari cara untuk meringankannya. Aturan apa pun yang dilakukan atau tidak terkait dengan mengizinkan evaluasi hubung singkat dalam kode Anda akan memiliki peluang yang kira-kira sama untuk menyebabkan kode lebih lambat dan mengoptimalkan lebih awal bisa menghabiskan banyak waktu, jadi selalu ukur, lalu optimalkan.
sumber
if
kondisi Anda dan masih hubungan pendek. Saya setuju bahwa itu adalah, dalam beberapa hal, perbedaan gaya, tetapi memang memiliki keutamaan membuat hal-hal sejernih kristal.Tampaknya, pertanyaan Anda bukan tentang hubungan arus pendek yang baik atau buruk secara umum, tetapi tentang mengapa VB.NET memberikan operator dengan dan tanpa itu. Dengan mengingat hal ini, jawabannya
sederhana: ketika melanggar kompatibilitas ke belakang .
Ok, sekarang Anda dapat mengatakan VB.NET tidak kompatibel dengan VB6 atau VBA lama, namun setidaknya bagian-bagian tertentu dari bahasa tersebut. Keputusan Microsoft untuk menjaga semantik AND dan OR lama (tanpa hubungan arus pendek) membuat kategori kesalahan yang sangat kecil kemungkinannya terjadi ketika ketika porting program VB lama ke VB.NET.
Di sisi lain, perancang bahasa VB.NET mungkin membagikan pendapat Anda tentang hubungan arus pendek menjadi hal yang baik. Ketika saya ingat dengan benar, versi pra-rilis VB.NET pertama menyediakan hubungan pendek DAN atau OR dengan operator, tetapi umpan balik pengembang pastilah sangat buruk MS menarik keputusan ini sebelum VB.NET 1.0 muncul. Jadi para desainer memutuskan untuk menerapkannya dalam hal kata kunci baru
ANDALSO
danORELSE
sebagai trade-off antara kompatibilitas mundur dan kegunaan.IMHO ini adalah keputusan yang bagus. Saya harus mem-porting beberapa program yang lebih tua dalam dekade terakhir, dan tidak harus membuat analisis dampak yang berat untuk setiap ekspresi logika termasuk DAN dan / atau OR (pun intended) membuat tugas itu jauh lebih mudah dan lebih ekonomis. Di sisi lain, setiap kali saya harus menulis ekspresi logis baru di VB.NET, pilihan default saya untuk operator adalah bentuk hubung singkat, itulah yang biasa saya gunakan dari C, C ++, C # dll, dan memungkinkan saya menulis beberapa idiom dalam bentuk yang lebih ringkas (walaupun ANDALSO membutuhkan 4 karakter lebih banyak untuk diketik).
Jika Anda tidak yakin, saya sarankan untuk membaca artikel hebat Joel Spolsky tentang Mars Headset , yang tentang mengapa keputusan desain awal dalam pengembangan perangkat lunak tidak dapat dengan mudah dicabut setelah komponen atau bahasa atau API yang dipertaruhkan telah mencapai basis pengguna dengan ukuran tertentu. .
sumber
And
operasinya tidak mengalami hubungan pendek, tidak juga dalam SQL (1974), maupun FORTRAN (1956), atau Pascal (1970).Mereka menjadi buruk , segera setelah Anda mulai mengandalkan efek samping dari ekspresi yang Anda harapkan akan dieksekusi dalam evaluasi hasil keseluruhan boolean.
sumber
Peringatan : Ini agak esoteris karena dalam hampir semua kasus, pengembang tidak perlu khawatir. Tapi ... mungkin ada hit kinerja karena evaluasi bersyarat karena menciptakan percabangan dalam eksekusi. Operasi hubung singkat tidak bercabang dan lebih mudah diprediksi.
Alasan mengapa hal ini jarang penting adalah bahwa biayanya biasanya kecil dan juga biasanya lebih besar daripada biaya mengevaluasi kondisi kedua (atau ketiga, dll.). Ini hanya akan menjadi masalah dalam rutinitas mahal komputasi ketika kinerja tinggi diperlukan dan itu mungkin masih tidak menjadi masalah juga.
sumber
Pascal tidak menentukan apakah AND dan OR menggunakan evaluasi hubung singkat atau tidak, memberi Anda yang terburuk dari kedua dunia.
C dan C ++ memiliki operasi bitwise & dan | yang dalam praktiknya memberi Anda operasi hubung singkat. Dan kompiler bebas untuk mengevaluasi apa pun yang mereka suka jika itu tidak membuat perbedaan yang bisa diamati.
sumber