Słyszałem o użyciu terminu „zwarcie” w językach C, C ++, C #, Java i wielu innych. Co to oznacza i w jakim scenariuszu zostałby zastosowany?
concepts
conditions
if-statement
fasil
źródło
źródło
&&
operatora.||
również ... przynajmniej powinno.||
i&&
do&
i|
zobaczyć subtelną różnicę. Mieć prosty program do oceny1 || printf("yay");
vs0 || printf("yay");
i1 | printf("yay");
vs,0 | printf("yay");
aby zobaczyć różniceOdpowiedzi:
Zwarcie w C występuje, gdy operator logiczny nie ocenia wszystkich swoich argumentów.
Weźmy na przykład i
&&
, to oczywiste, że0 && WhoCares
będzie to fałsz bez względu na to, coWhoCares
jest. Z tego powodu C po prostu pomija ocenęWhoCares
. To samo dotyczy1 || WhoCares
, zawsze będzie to prawdą. Z tego powodu możemy pisać jak kodW ten sposób unikamy wykonywania potencjalnie niemożliwych operacji. Jeśli nie możemy wystrzelić pocisków, z pewnością nie chcemy próbować. Jest to powszechnie używane ze wskaźnikami, zwłaszcza wskaźnikami plików.
Działa to na wiele innych przydatnych sposobów, aby uniknąć niepotrzebnego przetwarzania
Pozwala to uniknąć dodatkowej pracy, jeśli nie jest to konieczne.
źródło
CanFireMissiles && FireMissiles()
, ponieważ podejrzewam, że nadużywacie zwarcia, aby wywołać skutki uboczne. Czuję, że ukrywasz działania w warunkach warunkowych. Taki kod lepiej napisać jakoif(CanFireMissiles){FireMissiles();}
lubif(CanFireMissles){didFireMissiles = TryFireMissiles(); if(didFireMissiles){...}}
.IsInCache(value) || IsInDatabase(value)
, gdzie IsInDatabase może zająć trochę czasu (zwłaszcza jeśli korzystanie z urządzenia mobilnego i opóźnienie sieci jest problemem).„Zwarcie” zazwyczaj odnosi się do „ oceny zwarcia ”, która jest ogólną koncepcją, a nie tylko C.
Operatory logiczne oceniają od lewej do prawej, więc wszelkie warunki, które spowodują, że inne warunki będą niepotrzebne, będą przydatne. Możesz więc sprawdzić stan, który później wyklucza inne warunki, umożliwiając w ten sposób częściową ocenę operacji logicznych zamiast oceny całości.
Przykład:
Bardziej złożony przykład:
źródło
== 0
nie tylko jest to niepotrzebne, ale może dezorientować niektórych ludzi.Ocena krótkiego obwodu może prowadzić do tego, że niektóre części stanu nie będą oceniane.
Na przykład:
nie będzie
f
.źródło