Bird
Raised Fist0
Blockchain / Solidityprogramming~10 mins

Short-circuiting in conditions in Blockchain / Solidity - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Short-circuiting in conditions
Evaluate first condition
Is first condition enough to decide?
Return result
Return combined result
END
Check the first condition; if it decides the result, skip the second. Otherwise, check the second condition and combine results.
Execution Sample
Blockchain / Solidity
bool a = true;
bool b = false;
if (a || b) {
  // do something
}
Checks if 'a' is true; if yes, skips checking 'b' because '||' short-circuits.
Execution Table
StepCondition EvaluatedValueShort-circuit?Action Taken
1a (true)trueYesSkip evaluating b, enter if-block
2b (false)Not evaluatedN/ASkipped due to short-circuit
3EndN/AN/AIf-block executed because a is true
💡 First condition 'a' is true, so '||' short-circuits and skips 'b'
Variable Tracker
VariableStartAfter Step 1After Step 2Final
atruetruetruetrue
bfalsefalseNot evaluatedfalse
Key Moments - 2 Insights
Why is the second condition 'b' not evaluated?
Because in the execution_table row 1, 'a' is true and the '||' operator stops checking further conditions to save time.
Does short-circuiting happen with both '||' and '&&'?
Yes, but for '||' it stops if the first condition is true, and for '&&' it stops if the first condition is false, as shown in the concept_flow.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'b' at Step 2?
Afalse
BNot evaluated
Ctrue
Dundefined
💡 Hint
Check the 'Condition Evaluated' and 'Value' columns at Step 2 in execution_table.
At which step does short-circuiting occur?
AStep 1
BStep 2
CStep 3
DNo short-circuiting
💡 Hint
Look at the 'Short-circuit?' column in execution_table.
If 'a' was false and 'b' true, what would happen?
AShort-circuiting would skip both
B'b' would not be evaluated
C'b' would be evaluated and if-block executed
DIf-block would not execute
💡 Hint
Think about how '||' works when first condition is false, referencing concept_flow.
Concept Snapshot
Short-circuiting means stopping condition checks early.
For '||', if first is true, skip rest.
For '&&', if first is false, skip rest.
Saves time and avoids unnecessary checks.
Used in blockchain smart contracts for efficiency.
Full Transcript
Short-circuiting in conditions means the program stops checking more conditions once the result is certain. For example, with '||' (OR), if the first condition is true, the whole condition is true, so it skips checking the second. This saves time and gas in blockchain smart contracts. The flow starts by checking the first condition. If it decides the result, it returns immediately. Otherwise, it checks the next condition. In the example, 'a' is true, so 'b' is not checked. This is shown in the execution table where step 1 evaluates 'a' as true and short-circuits, skipping 'b'. Variables 'a' and 'b' keep their values, but 'b' is not evaluated. Beginners often wonder why the second condition is skipped; it's because the first condition already decides the outcome. Also, short-circuiting works differently for '||' and '&&'. The quiz questions help reinforce these ideas by asking about variable values and when short-circuiting happens.

Practice

(1/5)
1. What does short-circuiting mean in blockchain condition checks using && and ||?
easy
A. It stops checking further conditions once the result is decided.
B. It always checks all conditions regardless of the first result.
C. It reverses the order of condition checks.
D. It only works with numeric conditions.

Solution

  1. Step 1: Understand short-circuiting concept

    Short-circuiting means the program stops checking conditions as soon as the final result is known.
  2. Step 2: Apply to && and ||

    For &&, if the first condition is false, no need to check further. For ||, if the first condition is true, no need to check further.
  3. Final Answer:

    It stops checking further conditions once the result is decided. -> Option A
  4. Quick Check:

    Short-circuiting = Stops early [OK]
Hint: Stop checking when outcome is certain [OK]
Common Mistakes:
  • Thinking all conditions always run
  • Confusing && and || behavior
  • Assuming short-circuiting only applies to numbers
2. Which of the following is the correct syntax for short-circuit AND in a blockchain smart contract condition?
easy
A. if (condition1 | condition2) { execute(); }
B. if (condition1 & condition2) { execute(); }
C. if (condition1 || condition2) { execute(); }
D. if (condition1 && condition2) { execute(); }

Solution

  1. Step 1: Identify correct AND operator syntax

    The short-circuit AND operator is &&, which checks the second condition only if the first is true.
  2. Step 2: Compare options

    if (condition1 && condition2) { execute(); } uses &&, correct for short-circuit AND. Options B and D use single & or | which are bitwise operators, not short-circuit. if (condition1 || condition2) { execute(); } uses OR operator.
  3. Final Answer:

    if (condition1 && condition2) { execute(); } -> Option D
  4. Quick Check:

    Short-circuit AND = && [OK]
Hint: Use double ampersand for AND short-circuit [OK]
Common Mistakes:
  • Using single & instead of &&
  • Confusing AND (&&) with OR (||)
  • Using bitwise operators by mistake
3. Consider this blockchain code snippet:
bool a = false;
bool b = true;
if (a && (b = false)) { }
return b;

What is the returned value?
medium
A. false
B. Syntax error
C. true
D. Runtime error

Solution

  1. Step 1: Analyze short-circuit AND behavior

    Since a is false, the b = false part is not executed due to short-circuiting.
  2. Step 2: Determine final value of b

    b remains true because the assignment did not happen. So, return b; returns true.
  3. Final Answer:

    true -> Option C
  4. Quick Check:

    False && skips second = b stays true [OK]
Hint: False && skips right side, no assignment [OK]
Common Mistakes:
  • Assuming b becomes false anyway
  • Ignoring short-circuit effect
  • Thinking code throws error
4. Find the error in this blockchain condition:
if (isValid || checkStatus()) {
execute();
}

where checkStatus() is a function that must run always.
medium
A. Function checkStatus() may not run due to short-circuiting.
B. No error, code is correct.
C. Syntax error: missing semicolon.
D. Logical AND should be used instead of OR.

Solution

  1. Step 1: Understand short-circuit OR behavior

    If isValid is true, checkStatus() will not run because of short-circuiting.
  2. Step 2: Identify problem with function call

    Since checkStatus() must always run, using || causes it to sometimes skip, which is an error.
  3. Final Answer:

    Function checkStatus() may not run due to short-circuiting. -> Option A
  4. Quick Check:

    OR short-circuit skips right if left true [OK]
Hint: OR skips right if left true, function may not run [OK]
Common Mistakes:
  • Assuming function always runs
  • Confusing syntax error with logic error
  • Using AND instead of OR without reason
5. You want to check two blockchain conditions: isOwner and hasBalance. You must run logAccess() always, but only execute transfer() if both conditions are true. Which code correctly uses short-circuiting?
hard
A. if (isOwner && hasBalance) { logAccess(); transfer(); }
B. logAccess(); if (isOwner && hasBalance) { transfer(); }
C. if (isOwner & hasBalance) { logAccess(); transfer(); }
D. if (isOwner && hasBalance && logAccess()) { transfer(); }

Solution

  1. Step 1: Identify when logAccess() must run

    logAccess() must run always, so it should be called outside the condition.
  2. Step 2: Check condition for transfer()

    transfer() runs only if both isOwner and hasBalance are true, so use && inside the if.
  3. Step 3: Analyze options

    if (isOwner && hasBalance) { logAccess(); transfer(); } puts logAccess() inside the if, so it only runs if conditions true. if (isOwner && hasBalance && logAccess()) { transfer(); } calls logAccess() inside condition, so it may not run due to short-circuiting. if (isOwner & hasBalance) { logAccess(); transfer(); } uses single & which is bitwise, not short-circuit. logAccess(); if (isOwner && hasBalance) { transfer(); } calls logAccess() first always, then conditionally transfer().
  4. Final Answer:

    logAccess(); if (isOwner && hasBalance) { transfer(); } -> Option B
  5. Quick Check:

    Call always outside, conditionally inside [OK]
Hint: Call always-run functions outside conditions [OK]
Common Mistakes:
  • Putting always-run function inside condition
  • Using bitwise & instead of &&
  • Calling functions in wrong order