Using for directive in Blockchain / Solidity - Time & Space Complexity
When we use a for directive in blockchain code, it usually means repeating some steps for many items. Understanding how long this takes helps us write faster programs.
We want to know: how does the time to run grow when we have more items to process?
Analyze the time complexity of the following code snippet.
for (uint i = 0; i < transactions.length; i++) {
processTransaction(transactions[i]);
}
This code goes through each transaction in a list and processes it one by one.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The
forloop that runsprocessTransactionon each item. - How many times: Exactly once for each transaction in the list.
As the number of transactions grows, the total steps grow in the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 times processing |
| 100 | 100 times processing |
| 1000 | 1000 times processing |
Pattern observation: If you double the number of transactions, the work doubles too.
Time Complexity: O(n)
This means the time to finish grows directly with the number of transactions.
[X] Wrong: "The loop runs only once no matter how many transactions there are."
[OK] Correct: The loop actually runs once for each transaction, so more transactions mean more work.
Knowing how loops affect time helps you explain your code clearly and shows you understand how programs grow with data size. This skill is useful in many blockchain tasks.
"What if we nested another for loop inside this one to process pairs of transactions? How would the time complexity change?"
Practice
for directive do in blockchain programming?Solution
Step 1: Understand the purpose of the for directive
The for directive is used to repeat code multiple times, once for each item in a list or collection.Step 2: Relate to blockchain data processing
In blockchain, it helps process multiple data items like transactions or blocks easily by looping through them.Final Answer:
Repeats a block of code for each item in a list -> Option DQuick Check:
for directive = repeat code per item [OK]
- Confusing for directive with data encryption
- Thinking for creates or deletes blockchain data
- Mixing for directive with transaction creation
blocks using the for directive?Solution
Step 1: Identify correct for loop syntax for arrays
In modern blockchain programming (JavaScript style),for...ofloops over array elements directly.Step 2: Compare options
for (let block of blocks) { /* code */ } usesfor (let block of blocks), which is correct. for (let block in blocks) { /* code */ } usesinwhich loops keys, not values. Options C and D are invalid syntax.Final Answer:
for (let block of blocks) { /* code */ } -> Option AQuick Check:
Use for...of to loop array values [OK]
- Using for...in to loop arrays (loops keys, not values)
- Writing invalid loop syntax
- Confusing loop keywords like loop or for blocks
const blocks = [101, 102, 103];
let result = '';
for (const block of blocks) {
result += block + '-';
}
console.log(result);Solution
Step 1: Understand the loop operation
The loop goes through each number in blocks: 101, 102, 103. Each number is added to result with a '-' after it.Step 2: Trace the string concatenation
After loop: result = '101-' + '102-' + '103-' = '101-102-103-'Final Answer:
101-102-103- -> Option BQuick Check:
Concatenate each block with '-' = 101-102-103- [OK]
- Expecting no trailing dash at the end
- Confusing for...of with for...in output
- Thinking output is concatenated without dashes
const transactions = [10, 20, 30];
for (transaction of transactions) {
console.log(transaction);
}Solution
Step 1: Check loop variable declaration
The loop variabletransactionis used withoutletorconst, which causes a ReferenceError in strict mode.Step 2: Validate other parts
Array name and syntax are correct. console.log can print numbers. So only missing declaration is the error.Final Answer:
Missing declaration keyword for loop variable -> Option CQuick Check:
Declare loop variable with let or const [OK]
- Forgetting let or const before loop variable
- Assuming console.log can't print numbers
- Thinking array name is wrong
[5, 10, 15, 20]. Using a for directive, how do you create a new array with each height doubled?Solution
Step 1: Understand the goal and data
We want to double each number in heights and store in doubled array. heights = [5,10,15,20]Step 2: Analyze each option
for (h of heights) { doubled.push(h * 2); } usesfor...ofbut missingletorconstdeclaration for loop variableh, so ReferenceError. for (let i = 0; i < heights.length; i++) { doubled[i] = heights[i] * 2; } uses classic for loop with index to assign doubled[i] = heights[i]*2, which works correctly. for (let h in heights) { doubled.push(h * 2); } usesfor...inwhich loops keys (indexes as strings), so multiplying keys is wrong. for (heights of doubled) { doubled.push(heights * 2); } has invalid syntax (for (heights of doubled)) and reversed arrays.Final Answer:
for (let i = 0; i < heights.length; i++) { doubled[i] = heights[i] * 2; } -> Option AQuick Check:
Use index loop to assign doubled values [OK]
- Using for...in to loop array values
- Not initializing doubled array before pushing
- Writing invalid loop syntax
Ready to prove it?
Pass the test and this pattern moves unknown
