Apakah ada orang di sini menggunakan VB.NET dan memiliki preferensi yang kuat untuk atau menentang menggunakan IsNothing
sebagai lawan Is Nothing
(misalnya, If IsNothing(anObject)
atau If anObject Is Nothing...
)? Jika demikian, mengapa?
EDIT: Jika Anda pikir keduanya sama-sama dapat diterima, apakah Anda pikir yang terbaik untuk memilih satu dan tetap menggunakannya, atau apakah boleh mencampurnya?
IsNothing()
Jawaban:
Jika Anda melihat MSIL saat dijalankan, Anda akan melihat bahwa MSIL tidak dikompilasi ke kode yang sama persis. Ketika Anda menggunakan IsNothing () itu benar-benar membuat panggilan ke metode itu sebagai lawan hanya mengevaluasi ekspresi.
Alasan saya cenderung cenderung menggunakan "Is Nothing" adalah ketika saya meniadakannya menjadi "IsNot Nothing" daripada "Not IsNothing (objek)" yang secara pribadi saya merasa terlihat lebih mudah dibaca.
sumber
Saya menemukan bahwa Patrick Steele menjawab pertanyaan ini dengan sangat baik di blognya: Avoiding IsNothing ()
Saya tidak menyalin jawaban apa pun di sini, untuk memastikan Patrick Steele mendapatkan kredit untuk jabatannya. Tapi saya pikir jika Anda mencoba memutuskan apakah akan menggunakan Is Nothing atau IsNothing Anda harus membaca postingnya. Saya pikir Anda akan setuju bahwa Is Nothing adalah pilihan terbaik.
Edit - komentar VoteCoffe di sini
Isi artikel parsial: Setelah meninjau lebih banyak kode saya menemukan alasan lain Anda harus menghindari ini: Ini menerima jenis nilai! Jelas, karena IsNothing () adalah fungsi yang menerima 'objek', Anda dapat meneruskan apa pun yang Anda inginkan. Jika itu tipe nilai, .NET akan mengotakkannya menjadi objek dan meneruskannya ke IsNothing - yang akan selalu mengembalikan false pada nilai kotak! Kompiler VB.NET akan memeriksa sintaks gaya "Tidak Ada" dan tidak akan dikompilasi jika Anda mencoba melakukan "Tidak Ada" pada tipe nilai. Tetapi fungsi IsNothing () mengkompilasi tanpa keluhan. -PSteele - VoteCoffee
sumber
Anda harus benar-benar menghindari penggunaan
IsNothing()
Berikut adalah 4 alasan dari artikel IsNothing () VS Is Nothing
Yang paling penting,
IsNothing(object)
semuanya telah diteruskan sebagai objek, bahkan tipe nilai! Karena tipe nilai tidak bisaNothing
, itu adalah cek yang benar-benar sia-sia.Ambil contoh berikut:
Ini akan mengkompilasi dan berjalan dengan baik, sedangkan ini:
Tidak akan dikompilasi, sebagai gantinya kompiler akan meningkatkan kesalahan:
IsNothing(object)
sebenarnya merupakan bagian dari bagianMicrosoft.VisualBasic.dll
.Ini tidak diinginkan karena Anda memiliki ketergantungan yang tidak dibutuhkan pada perpustakaan VisualBasic.
Ini lambat - 33,76% lebih lambat pada kenyataannya (lebih dari 1000000000 iterasi)!
Mungkin preferensi pribadi, tetapi
IsNothing()
dibaca seperti Kondisi Yoda . Saat Anda melihat variabel yang Anda periksa statusnya, dengan itu sebagai subjek investigasi Anda.yaitu apakah itu dilakukan x? --- TIDAK Apakah
x
ing milik itu ?Jadi saya pikir
If a IsNot Nothing
membaca lebih baik daripadaIf Not IsNothing(a)
sumber
Saya setuju dengan "Is Nothing". Seperti yang dinyatakan di atas, mudah untuk meniadakan dengan "IsNot Nothing".
Saya menemukan ini lebih mudah dibaca ...
dari ini ...
sumber
VB penuh dengan hal-hal seperti itu yang berusaha menjadikannya "seperti bahasa Inggris" dan nyaman bagi orang-orang yang terbiasa dengan bahasa yang menggunakan () dan {} banyak. Misalnya, di sisi "seperti bahasa Inggris" ... VB memiliki kata kunci " Tidak " ... dan tidak, saya tidak bercanda. Dan di sisi lain, karena Anda mungkin sudah tahu sebagian besar waktu Anda dapat menggunakan () dengan panggilan fungsi jika Anda mau, tetapi tidak harus.
Saya lebih suka IsNothing () ... tapi saya menggunakan C dan C #, jadi hanya itu yang nyaman. Dan saya pikir itu lebih mudah dibaca. Tetapi pergi dengan apa pun yang terasa lebih nyaman bagi Anda.
sumber
Saya condong ke arah alternatif "Is Nothing", terutama karena sepertinya lebih banyak OO.
Tentunya Visual Basic tidak punya kata kunci Ain't.
sumber
Saya juga cenderung menggunakan versi Is Nothing sebagian dari menggunakannya sebanyak yang saya lakukan di SQL.
sumber
Saya awalnya menggunakan IsNothing tapi saya sudah bergerak ke arah menggunakan Is Nothing di proyek-proyek baru, terutama untuk keterbacaan. Satu-satunya waktu saya tetap dengan IsNothing adalah jika saya mempertahankan kode di mana itu digunakan sepanjang dan saya ingin tetap konsisten.
sumber
Is Nothing memerlukan objek yang telah ditetapkan ke nilai Nothing. IsNothing () dapat mengambil variabel apa pun yang belum diinisialisasi, termasuk tipe numerik. Ini berguna misalnya saat menguji apakah parameter opsional telah lulus.
sumber
Nothing
Is Nothing