Dalam Visual Basic, apakah ada perbedaan kinerja saat menggunakan IIf
fungsi daripada If
pernyataan?
vb.net
if-statement
iif-function
Bryan Roth
sumber
sumber
IIf
.If
lebih efisien daripadaIIf
fungsinya sejauh ini.That's all you need to know, really
tidak terdengar seperti sikap yang kondusif untuk situs web yang didedikasikan untuk berbagi pengetahuan;)IIf()
menjalankan kode benar dan salah. Untuk hal-hal sederhana seperti penugasan numerik, ini bukan masalah besar. Tetapi untuk kode yang memerlukan pemrosesan apa pun, Anda membuang-buang siklus menjalankan kondisi yang tidak cocok, dan mungkin menyebabkan efek samping.Ilustrasi kode:
Keluaran:
sumber
Selain itu, masalah besar lainnya dengan IIf adalah ia akan benar-benar memanggil fungsi apa pun yang ada dalam argumen [1], jadi jika Anda mengalami situasi seperti berikut:
Ini sebenarnya akan memunculkan pengecualian, yang bukan merupakan cara kerja sebagian besar orang saat pertama kali melihatnya. Ini juga dapat menyebabkan beberapa bug yang sangat sulit diperbaiki dalam suatu aplikasi juga.
[1] Fungsi IIf - http://msdn.microsoft.com/en-us/library/27ydhh0d(VS.71).aspx
sumber
Lebih baik gunakan If daripada IIf untuk menggunakan mekanisme inferensi tipe dengan benar (Option Infer On)
Dalam contoh ini, Kata kunci dikenali sebagai string saat saya menggunakan If:
Jika tidak, itu dikenali sebagai Objek:
sumber
Menurut orang ini , IIf bisa memakan waktu hingga 6x selama If / Then. YMMV.
sumber
Selain itu, keterbacaan mungkin lebih disukai daripada kinerja dalam kasus ini. Bahkan jika IIF lebih efisien, itu hanya kurang dapat dibaca oleh target audiens (saya asumsikan jika Anda bekerja di Visual Basic, Anda ingin programmer lain dapat membaca kode Anda dengan mudah, yang merupakan keuntungan terbesar VB ... dan yang kalah dengan konsep seperti IIF menurut saya).
Juga, "IIF adalah fungsi, versus IF menjadi bagian dari sintaks bahasa" ... yang menyiratkan kepada saya bahwa, memang, Jika akan lebih cepat ... jika tidak ada yang lain selain itu pernyataan If dapat diringkas secara langsung ke satu set kecil opcode daripada harus pergi ke ruang lain dalam memori untuk melakukan logika yang ditemukan dalam fungsi tersebut. Ini perbedaan basi, mungkin, tapi perlu diperhatikan.
sumber
Saya percaya bahwa perbedaan utama antara If dan IIf adalah:
Jika (test [boolean], pernyataan1, pernyataan2) itu berarti bahwa menurut nilai pengujian baik satement1 atau pernyataan2 akan dieksekusi (hanya satu pernyataan yang akan dieksekusi)
Dim obj = IIF (test [boolean], statement1, statement2) artinya kedua statement akan dieksekusi tetapi menurut nilai test salah satunya akan mengembalikan nilai menjadi (obj).
jadi jika salah satu pernyataan akan menampilkan pengecualian, ia akan tetap memasukkannya ke dalam (IIf) tetapi di (Jika) ia akan membuangnya jika kondisi akan mengembalikan nilainya.
sumber
... mengapa bisa memakan waktu hingga 6x, kata wiki:
Pada dasarnya IIf adalah ekuivalen dengan operator terner di C ++ / C #, jadi ini memberi Anda beberapa pernyataan tipe 1 baris if / else yang bagus jika Anda menginginkannya. Anda juga dapat memberinya fungsi untuk mengevaluasi jika Anda menginginkannya.
sumber
Fungsi itu berbeda! Mungkin Anda hanya perlu menggunakan pernyataan IF. IIF akan selalu lebih lambat, karena IIF akan melakukan kedua fungsi plus akan melakukan pernyataan IF standar.
Jika Anda bertanya-tanya mengapa ada fungsi IIF, mungkin ini penjelasannya:
Jadi penghitung akan menjadi 2 setelah ini, tetapi s hanya akan menjadi "YA". Saya tahu hal-hal penghitung ini tidak berguna, tetapi terkadang ada fungsi yang Anda perlukan keduanya untuk dijalankan, tidak masalah jika IF benar atau salah, dan cukup tetapkan nilai dari salah satunya ke variabel Anda.
sumber
IIf()
cara ini hanya akan membingungkan orang yang membaca kode Anda.