Bird
Raised Fist0
Rubyprogramming~5 mins

Conditional assignment (||=) in Ruby - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Conditional assignment (||=)
O(n)
Understanding Time Complexity

We want to understand how fast a program runs when it uses conditional assignment with ||= in Ruby.

Specifically, how does the number of steps change as the input grows?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

def fill_defaults(data)
  data.each do |key, value|
    data[key] ||= expensive_computation(key)
  end
end

# expensive_computation simulates a costly operation

This code goes through each item in a hash and sets a default value only if the current value is nil or false.

Identify Repeating Operations
  • Primary operation: Looping through each key-value pair in the hash.
  • How many times: Once for each item in the hash (n times).
How Execution Grows With Input

As the number of items in the hash grows, the program checks each item once.

Input Size (n)Approx. Operations
10About 10 checks and possible assignments
100About 100 checks and possible assignments
1000About 1000 checks and possible assignments

Pattern observation: The work grows directly with the number of items, so doubling items doubles the work.

Final Time Complexity

Time Complexity: O(n)

This means the program takes longer in a straight line as the input size grows.

Common Mistake

[X] Wrong: "Using ||= makes the code run faster than looping through all items."

[OK] Correct: The ||= only skips assignment if the value exists, but the loop still checks every item, so the time still grows with input size.

Interview Connect

Understanding how conditional assignment affects performance helps you explain your code choices clearly and shows you know how programs scale.

Self-Check

"What if we replaced the hash with an array and used ||= inside a nested loop? How would the time complexity change?"

Practice

(1/5)
1. What does the Ruby operator ||= do when used like x ||= 10?
easy
A. Always assigns 10 to x, replacing any value
B. Assigns 10 to x only if x is true
C. Assigns 10 to x only if x is nil or false
D. Throws an error if x is already assigned

Solution

  1. Step 1: Understand the ||= operator

    The operator ||= assigns the right side value only if the left side variable is nil or false.
  2. Step 2: Apply to example x ||= 10

    If x is nil or false, it becomes 10; otherwise, it keeps its current value.
  3. Final Answer:

    Assigns 10 to x only if x is nil or false -> Option C
  4. Quick Check:

    Conditional assignment = Assign if nil/false [OK]
Hint: ||= sets value only if variable is nil or false [OK]
Common Mistakes:
  • Thinking ||= always assigns the value
  • Confusing ||= with simple assignment =
  • Assuming ||= assigns when variable is true
2. Which of the following is the correct syntax to assign 5 to variable a only if a is nil or false?
easy
A. a ||= 5
B. a =|| 5
C. a =| 5
D. a =|= 5

Solution

  1. Step 1: Identify correct operator syntax

    The correct Ruby operator for conditional assignment is ||=, not any variation with single or misplaced symbols.
  2. Step 2: Match syntax to options

    Only a ||= 5 uses ||= correctly as a ||= 5.
  3. Final Answer:

    a ||= 5 -> Option A
  4. Quick Check:

    Correct syntax = a ||= 5 [OK]
Hint: Remember ||= has two vertical bars before equals [OK]
Common Mistakes:
  • Using single | or misplaced symbols
  • Confusing with assignment =
  • Typing extra or missing characters
3. What will be the output of this Ruby code?
a = nil
b = 20
a ||= 10
b ||= 30
puts a
puts b
medium
A. 10\n30
B. nil\n30
C. nil\n20
D. 10\n20

Solution

  1. Step 1: Evaluate a ||= 10 when a is nil

    Since a is nil, a ||= 10 assigns 10 to a.
  2. Step 2: Evaluate b ||= 30 when b is 20

    Since b is already 20 (truthy), b ||= 30 does not change b.
  3. Final Answer:

    10 20 -> Option D
  4. Quick Check:

    nil replaced, truthy kept = 10 and 20 [OK]
Hint: ||= changes only nil or false variables [OK]
Common Mistakes:
  • Assuming b changes to 30
  • Thinking nil stays nil after ||= 10
  • Mixing up output order
4. Find the error in this Ruby code snippet:
count = 0
count ||= 5
puts count
medium
A. No error; output is 0
B. Syntax error due to ||= usage
C. Output is 5 instead of 0
D. Runtime error because count is zero

Solution

  1. Step 1: Understand value of count before ||=

    count is 0, which is not nil or false in Ruby (0 is truthy).
  2. Step 2: Apply count ||= 5

    Since count is truthy (0), count ||= 5 does not change it.
  3. Final Answer:

    No error; output is 0 -> Option A
  4. Quick Check:

    0 is truthy, ||= keeps original value [OK]
Hint: Remember 0 is truthy in Ruby, ||= won't overwrite [OK]
Common Mistakes:
  • Thinking 0 is false and gets replaced
  • Expecting syntax or runtime error
  • Confusing Ruby truthiness with other languages
5. Given this code:
settings = { theme: nil, font_size: 12 }
settings[:theme] ||= 'dark'
settings[:font_size] ||= 14
puts settings[:theme]
puts settings[:font_size]

What is the output and why?
hard
A. nil\n14 because theme is nil and font_size is replaced
B. dark\n12 because theme was nil and font_size was truthy
C. dark\n14 because both keys were nil or false
D. nil\n12 because ||= does not work on hashes

Solution

  1. Step 1: Check initial values in settings hash

    settings[:theme] is nil, settings[:font_size] is 12 (truthy).
  2. Step 2: Apply conditional assignment

    settings[:theme] ||= 'dark' sets theme to 'dark' because it was nil.
    settings[:font_size] ||= 14 does not change font_size because 12 is truthy.
  3. Final Answer:

    dark 12 -> Option B
  4. Quick Check:

    Nil replaced, truthy kept = dark and 12 [OK]
Hint: ||= sets defaults only if current value is nil or false [OK]
Common Mistakes:
  • Assuming 12 is replaced by 14
  • Thinking ||= doesn't work on hash values
  • Confusing nil with false values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard