Czy ktoś tutaj używa VB.NET i zdecydowanie preferuje lub nie używa IsNothing
w przeciwieństwie do Is Nothing
(na przykład If IsNothing(anObject)
lub If anObject Is Nothing...
)? Jeśli tak, dlaczego?
EDYCJA: Jeśli uważasz, że oba są równie akceptowalne, czy uważasz, że najlepiej wybrać jeden i trzymać się go, czy też można je mieszać?
IsNothing()
Odpowiedzi:
Jeśli spojrzysz na MSIL podczas wykonywania, zobaczysz, że nie kompiluje się do dokładnie tego samego kodu. Kiedy używasz IsNothing (), w rzeczywistości wywołuje tę metodę, a nie tylko ocenia wyrażenie.
Powodem, dla którego skłaniałbym się do używania „Is Nothing” jest to, że kiedy zaprzeczam, staje się „IsNot Nothing” zamiast „Not IsNothing (obiekt)”, co osobiście wydaje mi się bardziej czytelne.
źródło
Uważam, że Patrick Steele najlepiej odpowiedział na to pytanie na swoim blogu: Unikanie niczego ()
Nie skopiowałem tutaj żadnej z jego odpowiedzi, aby upewnić się, że Patrick Steele jest uznany za jego stanowisko. Ale myślę, że jeśli próbujesz zdecydować, czy użyć Is Nothing czy IsNothing, powinieneś przeczytać jego post. Myślę, że zgodzisz się, że Is Nothing to najlepszy wybór.
Edytuj - tutaj komentarz VoteCoffe
Częściowa treść artykułu: Po przejrzeniu większej ilości kodu znalazłem inny powód, dla którego powinieneś tego unikać: akceptuje typy wartości! Oczywiście, ponieważ IsNothing () jest funkcją, która akceptuje „obiekt”, możesz przekazać do niej wszystko, co chcesz. Jeśli jest to typ wartości, .NET umieści go w obiekcie i przekaże do IsNothing - co zawsze zwróci false w przypadku wartości pudełkowej! Kompilator VB.NET sprawdzi składnię stylu „Is Nothing” i nie będzie kompilował, jeśli spróbujesz wykonać operację „Is Nothing” na typie wartości. Ale funkcja IsNothing () kompiluje się bez skarg. -PSteele - VoteCoffee
źródło
Należy bezwzględnie unikać używania
IsNothing()
Oto 4 powody z artykułu IsNothing () VS Is Nothing
Co najważniejsze,
IsNothing(object)
wszystko zostało przekazane do niego jako obiekt, nawet typy wartości! Ponieważ typy wartości nie mogą byćNothing
, jest to całkowicie zmarnowany czek.Weźmy następujący przykład:
Dim i As Integer If IsNothing(i) Then ' Do something End If
To się skompiluje i będzie działać dobrze, podczas gdy to:
Dim i As Integer If i Is Nothing Then ' Do something End If
Nie skompiluje się, zamiast tego kompilator zgłosi błąd:
IsNothing(object)
jest w rzeczywistości częścią częściMicrosoft.VisualBasic.dll
.Jest to niepożądane, ponieważ masz niepotrzebną zależność od biblioteki VisualBasic.
Jest wolna - w rzeczywistości o 33,76% wolniejsza (ponad 1000000000 iteracji)!
Być może osobiste preferencje, ale
IsNothing()
brzmi jak stan Yody . Kiedy patrzysz na zmienną, sprawdzasz jej stan, jako przedmiot twojego badania.tj. czy to robi x? --- NIE Czy
x
ing właściwość nim ?Więc myślę, że
If a IsNot Nothing
czyta lepiej niżIf Not IsNothing(a)
źródło
Zgadzam się z „Is Nothing”. Jak wspomniano powyżej, łatwo jest zaprzeczyć za pomocą „Nie ma nic”.
Uważam to za łatwiejsze do odczytania ...
If printDialog IsNot Nothing Then 'blah End If
od tego...
If Not obj Is Nothing Then 'blah End If
źródło
VB jest pełen takich rzeczy, próbując uczynić go zarówno "jak angielski", jak i wygodnym dla osób przyzwyczajonych do języków, które często używają () i {}. Na przykład po stronie „jak angielski”… VB ma słowo kluczowe „ Ain't ”… i nie, nie żartuję. Z drugiej strony, jak zapewne już wiesz, w większości przypadków możesz użyć () z wywołaniami funkcji, jeśli chcesz, ale nie musisz.
Wolę IsNothing () ... ale używam C i C #, więc to jest po prostu wygodne. Myślę, że jest bardziej czytelny. Ale idź z tym, co jest dla ciebie wygodniejsze.
źródło
Skłaniam się ku alternatywie „Is Nothing”, przede wszystkim dlatego, że wydaje mi się bardziej OO.
Z pewnością Visual Basic nie ma słowa kluczowego Ain't.
źródło
Mam również tendencję do używania wersji Is Nothing, częściowo dzięki używaniu jej w takim samym stopniu, jak w SQL.
źródło
Początkowo używałem IsNothing, ale starałem się używać Is Nothing w nowszych projektach, głównie ze względu na czytelność. Jedyny raz, kiedy trzymam się IsNothing, to utrzymywanie kodu tam, gdzie jest on używany i chcę zachować spójność.
źródło
Is Nothing wymaga obiektu, któremu przypisano wartość Nothing. IsNothing () może przyjmować dowolną zmienną, która nie została zainicjowana, w tym typ liczbowy. Jest to przydatne na przykład podczas testowania, czy przekazano opcjonalny parametr.
źródło
Nothing
Is Nothing