Short-circuiting helps your program skip unnecessary checks to save time and avoid errors.
Short-circuiting in conditions in Blockchain / Solidity
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Blockchain / Solidity
if (condition1 && condition2) { // code runs if both are true } if (condition1 || condition2) { // code runs if at least one is true }
In &&, if the first condition is false, the second is not checked.
In ||, if the first condition is true, the second is not checked.
Examples
Blockchain / Solidity
if (userBalance > 0 && userIsVerified) { // allow transaction }
Blockchain / Solidity
if (isOwner || isAdmin) {
// allow access
}user exists before checking if active.Blockchain / Solidity
if (user != null && user.isActive) {
// safe to use user
}Sample Program
This smart contract checks if a user can spend money only if they have enough balance and are verified. The second check is skipped if balance is low.
Blockchain / Solidity
pragma solidity ^0.8.0; contract ShortCircuitExample { uint public balance = 100; bool public isVerified = false; function canSpend(uint amount) public view returns (bool) { // Check if balance is enough and user is verified if (balance >= amount && isVerified) { return true; } else { return false; } } function test() public view returns (string memory) { if (canSpend(50)) { return "Allowed to spend 50"; } else { return "Not allowed to spend 50"; } } }
Important Notes
Short-circuiting helps avoid errors like checking properties of a null object.
It can make your code faster by skipping unnecessary checks.
Summary
Short-circuiting stops checking conditions as soon as the result is known.
Use && to require all conditions true, and || to require any condition true.
This helps avoid errors and improve performance in your blockchain code.
Practice
1. What does short-circuiting mean in blockchain condition checks using
&& and ||?easy
Solution
Step 1: Understand short-circuiting concept
Short-circuiting means the program stops checking conditions as soon as the final result is known.Step 2: Apply to
For&&and||&&, if the first condition is false, no need to check further. For||, if the first condition is true, no need to check further.Final Answer:
It stops checking further conditions once the result is decided. -> Option AQuick 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
Solution
Step 1: Identify correct AND operator syntax
The short-circuit AND operator is&&, which checks the second condition only if the first is true.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.Final Answer:
if (condition1 && condition2) { execute(); } -> Option DQuick 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:
What is the returned value?
bool a = false;
bool b = true;
if (a && (b = false)) { }
return b;
What is the returned value?
medium
Solution
Step 1: Analyze short-circuit AND behavior
Sinceais false, theb = falsepart is not executed due to short-circuiting.Step 2: Determine final value of
bbremains true because the assignment did not happen. So,return b;returns true.Final Answer:
true -> Option CQuick 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:
where
if (isValid || checkStatus()) {
execute();
}where
checkStatus() is a function that must run always.medium
Solution
Step 1: Understand short-circuit OR behavior
IfisValidis true,checkStatus()will not run because of short-circuiting.Step 2: Identify problem with function call
SincecheckStatus()must always run, using||causes it to sometimes skip, which is an error.Final Answer:
FunctioncheckStatus()may not run due to short-circuiting. -> Option AQuick 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
Solution
Step 1: Identify when
logAccess()must runlogAccess()must run always, so it should be called outside the condition.Step 2: Check condition for
transfer()transfer()runs only if bothisOwnerandhasBalanceare true, so use&&inside the if.Step 3: Analyze options
if (isOwner && hasBalance) { logAccess(); transfer(); } putslogAccess()inside the if, so it only runs if conditions true. if (isOwner && hasBalance && logAccess()) { transfer(); } callslogAccess()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(); } callslogAccess()first always, then conditionallytransfer().Final Answer:
logAccess(); if (isOwner && hasBalance) { transfer(); } -> Option BQuick 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
