Short-Circuit Evaluation
π« Short-Circuit Evaluation
λ¨λ½ λ°©μ
μ°Έκ³ - μν€νΌλμ, μ°Έκ³ - μ λ‘λλͺ¨λμ κΈ
λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μμλ, λΆ μ°μ°μ Short-Circuit Evaluation μ΄ μ μ©λλ€.
μ κ·Έλ¦Όμ²λΌ,
μμλλ‘ μ°μ°νλ λμ€ μ΄λ―Έ κ²°κ³Όκ° κ²°μ λλ κ²½μ°,
κ΅³μ΄ λ¨μ νΌμ°μ°μλ€κΉμ§ κ³μ°ν νμκ° μκΈ° λλ¬Έμ, κ²°κ³Όκ° κ²°μ λ μμ μμ κ³μ°μ λ§μΉλ€.
1
2
SomeObject a = null;
if (a != null && a.SomeFunc())
C# μμ &&
μ Short-Circuit Evaluation μ΄ μ μ©λκΈ° λλ¬Έμ,
μ μ½λμμλ a != null
μμ κ³μ°μ΄ λλκ³ , a.SomeFunc()
κ° μ€νλμ§ μμ λ°νμ μλ¬κ° λ°μνμ§ μλλ€.
μ΄λ°μμΌλ‘ νμ©ν μ μλ€.
λ§μ½ Short-Circuit Evaluation μ΄ μ μ©λμ§ μμλ€λ©΄,
μ μ½λμμ a
κ° null
μΈμ±λ‘ a.SomeFunc()
κ° μ€νλμ΄ NullReferenceException
μ΄ λ°μνμ κ²μ΄λ€.
1
2
3
4
5
6
7
8
9
// 1 : μ΅μ 1ms
if (takes1ms() || takes1s())
// 2 : μ΅μ 1s
if (takes1s() || takes1ms())
// a : μ΅μ O(1)
if (boolVariable || take1s())
// b : μ΅μ 1s
if (takes1s() || boolVariable)
λ, λ§μ½ ν¨μμ λ°ν κ°μ νΌμ°μ°μλ‘ μ¬μ©νλ κ²½μ°,
μλμ μΌλ‘ λΉμ©μ΄ λμ ν¨μλ₯Ό λ·μͺ½μ λ°°μΉνμ¬ μκ° λ³΅μ‘λλ₯Ό μ€μΌ μλ μλ€.
1
2
if (false & SomeFunc())
if (true | SomeFunc())
λ°λ©΄, κ²°κ³Όμ μκ΄μμ΄ νΌμ°μ°μλ‘ μ‘΄μ¬νλ λͺ¨λ ν¨μλ€μ μ€νμν€κ³ μΆμ κ²½μ°κ° μμ μ μλ€.
(μμκ° λ± λ μ€λ₯΄μ§λ μμ§λ§)
μ΄ κ²½μ°, C# μμλ &
μ΄λ |
λ₯Ό μ¬μ©ν μ μλ€.
&
μ |
λ λΉνΈ μ°μ°μλ‘ μ°μ΄κΈ°λ νμ§λ§, λΆ μ°μ° μμ μ¬μ©λ κ²½μ°, λΆ λ
Όλ¦¬ μ°μ°μλ‘μ¨ μ¬μ©λλ€.
&
μ΄λ |
λ₯Ό λΆ λ
Όλ¦¬ μ°μ°μλ‘μ¨ μ¬μ©νλ©΄, κ²°κ³Όμ μκ΄μμ΄ λͺ¨λ νΌμ°μ°μλ€μ κ³μ°νλ€.
λλ¬Έμ μ λ μ€μ μ½λλ, 첫 λ²μ§Έ νΌμ°μ°μμμ μ΄λ―Έ κ²°κ³Όκ° κ²°μ λμ΄λ²λ¦¬μ§λ§, κ³μ°μ λλ΄μ§ μκ³ SomeFunc() ν¨μλ₯Ό μ€νμν¨λ€.
μ΄λ, μ΄λ° &
μ |
λ₯Ό &&
μ ||
μ ꡬλΆμ§μ΄,
Eager Operators (&
, |
) μ Short-Circuit Operators (&&
, ||
) λ‘ λΆλ₯Ό μ μλ€.
C# νν λΉκ΅ μ, Short-Circuit Evaluation μ΄ μ μ©λλ€.