Or
'un OrElse
'dan daha iyi olduğu herhangi bir durum var mı?"OrElse" den ne daha iyi kullanılır?
Değilse, neden sadece "yükseltme" do not iç şifresi?
Or
'un OrElse
'dan daha iyi olduğu herhangi bir durum var mı?"OrElse" den ne daha iyi kullanılır?
Değilse, neden sadece "yükseltme" do not iç şifresi?
Or
kullanmak için sadece çözüm istediğinizde olan bit seviyesinde aritmetik, yani, bir dizi bit işlemek istiyorum:
Sub SetBit(value As Integer, Bit As Integer)
value = value Or (1 << Bit)
End Sub
Bu tür Or
için uygun tek durumdur. Diğer tüm durumlarda (yani, Boole mantığı kullanılırken), OrElse
kullanın. Benzer adlarına rağmen, Or
ve OrElse
, birbirleriyle karıştırılmaması gereken semantik olarak oldukça farklı işlemlerdir. Boolean
s'nin dahili gösteriminin Or
bitinin OrElse
'a benzer (ama aynı değil) bir etkiyi elde etmesini mümkün kıldığını görürüz. (. BASIC ve VB eski sürümleri - .NET önce - hayır OrElse
bir Or
çalışmasını sağlayan sadece tarafından bu ilişkiyi istismar)
Düzenleme: Bu kod kötü olduğu; Bunun mümkün olduğunu belirtmek için sadece bu cevabı ekledim.
Sub DoSomething()
Dim succeeded As Boolean
succeeded = FirstThing() Or SecondThing() Or ThirdThing()
If succeeded Then
' Do something here
End If
End Sub
FirstThing, SecondThing ve ThirdThing bir bütün olarak icra edilmesi gereken yöntemlerdir Bu durumda: gerçekleşmelidir yan etki çeşit gerçekleştirmek ifadeleri değerlendirirken
Başka bir durum kullanmaktır Ya olurdu bunlardan herhangi biri başarısız olursa olsun, bir başarı değeri biriktirir. Eğer OrElse kullandıysanız, FirstThing veya SecondThing başarısız olursa, başarısız olan yöntemin arkasındaki işlemler gerçekleşmez.
Umarım bu kodun kötülük olduğunu anlarsınız. Yan etkileri istiyorsanız, karşılaştırmaları sırayla yapın. Yukarıdaki kod oldukça iyi gizlenmiş: Ben biri için hemen bunun bir hata olduğunu ve amaçlanmamış olduğunu düşünürdüm. –
+1 cevabınız doğru olduğundan, ancak Konrad'a katılıyorum, bunu yapmak iyi bir uygulama değil! –
Beni yanlış anlamayın - Bunu en ufak bir şekilde savunmuyorum! –
Hep bit temelinde aritmetik yaparken dışında yerine Or OrElse kullanmalıdır.
OrElse ilk gerçek olsaydı ikinci maddesini değerlendirmek olmaz, yani kısa devre karşılaştırmasıdır. Bu son derece kullanışlıdır, çünkü genellikle kısa dolaşım olmadan başarısız olabilecek tümceleri (örneğin x'in hiçbir şey XEasSomeProperty değil OrElse olduğunu) isteyeceksiniz.
otomatik ikinci fıkra değerlendirilmesi önemli olabilir çünkü OrElse en tüm 'Ya da' s' yükseltmek mümkün değildir sebebi. Örneğin, "True Or SomeBooleanMethodWhichMightThrowAnEception()" yazabilirim. Bunu OrElse olarak değiştirmek programın anlamını değiştirir.
Konrad en doğru söylemiş ama VB dilinin önceki sürdürücü dan bu konuda daha fazla okumak istiyorsanız Paul Vick makaleye http://www.panopticoncentral.net/archive/2003/08/18/179 kontrol edebilirsiniz .aspx –
@ChrisHaas Maalesef @PaulV (http://panopticoncentral.net/2011/03/29/external-requests-versus-internal-requirements/) [onun eski blog mesajları damla] karar verdi, bu nedenle bu artık bir olduğunu ölü bağlantı. –
Huh, Microsoft'tan ayrıldığını bile bilmiyordum! –