Logical operators (&&, ||, !) in Ruby - Time & Space Complexity
Logical operators help decide true or false in code. We want to see how using them affects how long the code takes to run.
How does the number of checks grow when we use these operators?
Analyze the time complexity of the following code snippet.
def check_values(a, b, c)
if a && b || !c
return true
else
return false
end
end
This code checks three values using logical AND, OR, and NOT to decide true or false.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Evaluating three logical conditions once each.
- How many times: Each condition is checked only once per call.
Each time the function runs, it checks three values. The number of checks stays the same no matter what.
| Input Size (n) | Approx. Operations |
|---|---|
| 3 | 3 checks |
| 10 | 3 checks |
| 100 | 3 checks |
Pattern observation: The number of operations does not grow with input size; it stays constant.
Time Complexity: O(1)
This means the time to run the code stays the same no matter how big the input is.
[X] Wrong: "Logical operators slow down the program a lot when inputs grow."
[OK] Correct: Logical operators here only check a fixed number of values once, so time does not grow with input size.
Understanding how simple checks like logical operators behave helps you explain code efficiency clearly and confidently.
"What if we checked logical operators inside a loop over an array? How would the time complexity change?"
Practice
&& do?Solution
Step 1: Understand the meaning of
The&&&&operator means 'and' in Ruby, so it returns true only if both sides are true.Step 2: Compare with other operators
||returns true if one or both are true, and!reverses truth. Equality checks with==.Final Answer:
Returns true only if both conditions are true -> Option DQuick Check:
&&means AND = D [OK]
- Confusing && with ||
- Thinking && reverses values
- Mixing && with equality operator
Solution
Step 1: Identify Ruby's NOT operator syntax
Ruby uses!before a value to reverse its truth value.Step 2: Check other options
not xis valid but less common;~xis bitwise NOT;x != trueis a comparison, not logical NOT.Final Answer:
!x -> Option AQuick Check:
Logical NOT = C [OK]
- Using ~ instead of ! for logical NOT
- Confusing != with NOT operator
- Using 'not' keyword instead of !
puts (true || false) && !false
Solution
Step 1: Evaluate inside parentheses
true || falseis true because at least one side is true.Step 2: Evaluate the NOT operator
!falseis true because NOT false is true.Step 3: Evaluate the AND operator
Now we havetrue && true, which is true.Final Answer:
true -> Option CQuick Check:
(true || false) && !false = A [OK]
- Evaluating && before ||
- Forgetting to apply ! operator
- Assuming false because of || false
if !true || false puts "Yes" else puts "No" end
Solution
Step 1: Check syntax of logical operators
Using!withtrueis valid and reverses it to false. The||operator is also valid here.Step 2: Evaluate the condition
!trueis false, so condition isfalse || false, which is false. The else branch runs printing "No".Step 3: Confirm no syntax errors
The code syntax is correct and will run without errors.Final Answer:
No error; code runs and prints "No" -> Option AQuick Check:
Logical operators used correctly = B [OK]
- Thinking !true is invalid
- Confusing || with &&
- Expecting syntax error without parentheses
x is NOT between 10 and 20 inclusive in Ruby. Which condition correctly uses logical operators?Solution
Step 1: Understand the range condition
Being between 10 and 20 inclusive meansx >= 10 && x <= 20.Step 2: Find the NOT of the range
The NOT of being between 10 and 20 is being less than 10 OR greater than 20, sox < 10 || x > 20.Step 3: Check options
!(x >= 10 && x <= 20) negates the range but is correct logically; x < 10 || x > 20 directly expresses the NOT condition without negation. x <= 10 && x >= 20 is impossible (x can't be both <=10 and >=20). !(x < 10 || x > 20) negates the NOT condition, so it's the original range.Final Answer:
x < 10 || x > 20 -> Option BQuick Check:
NOT between 10 and 20 = A [OK]
- Using AND instead of OR for NOT condition
- Confusing negation placement
- Choosing impossible conditions
Ready to prove it?
Pass the test and this pattern moves unknown
