Я слышал, что термин «короткое замыкание» используется в C, C ++, C #, Java и многих других. Что это значит и в каком сценарии это будет использоваться?
concepts
conditions
if-statement
Фазиль
источник
источник
&&
оператора.||
... по крайней мере, так должно быть.||
и&&
чтобы&
и|
увидеть тонкую разницу. Имейте простую программу оценки1 || printf("yay");
против0 || printf("yay");
и1 | printf("yay");
против,0 | printf("yay");
чтобы увидеть различияОтветы:
Короткое замыкание в C - это когда логический оператор не оценивает все свои аргументы.
Возьмите для примера, и
&&
это довольно очевидно, что0 && WhoCares
будет ложным, несмотря ни на чтоWhoCares
. Из-за этого C просто пропускает оценкуWhoCares
. То же самое1 || WhoCares
, всегда будет правдой. Из-за этого мы можем написать кодТаким образом, мы избегаем выполнения потенциально невозможной операции. Если мы не можем запустить ракеты, мы, конечно, не хотим пытаться. Это обычно используется с указателями, особенно файловыми указателями.
Это приводит к множеству других полезных способов избежать ненужных вычислений.
Это позволяет избежать дополнительной работы, если нам не нужно.
источник
CanFireMissiles && FireMissiles()
, так как это заставляет меня подозревать, что вы злоупотребляете коротким замыканием, чтобы вызвать побочные эффекты. Я чувствую, что вы прячете действия в условных. Такой код лучше писать какif(CanFireMissiles){FireMissiles();}
илиif(CanFireMissles){didFireMissiles = TryFireMissiles(); if(didFireMissiles){...}}
.IsInCache(value) || IsInDatabase(value)
, когда IsInDatabase может занять некоторое время (особенно если использование мобильного устройства и задержка в сети являются проблемой).«Короткое замыкание» обычно относится к « оценке короткого замыкания », которая является общей концепцией, а не только специфической для языка C.
Оценка логических операторов слева направо, поэтому любые термины, которые делают другие термины ненужными, являются полезными. Таким образом, вы можете проверить условие, которое позже исключает другие условия, что позволяет частично оценить логические операции, а не оценивать все это.
Пример:
Более сложный пример:
источник
== 0
это не только излишне, это может даже запутать некоторых людей.Оценка короткого замыкания может привести к тому, что некоторые части состояния не будут оцениваться.
Например:
не будет подвергать
f
.источник