Bird
Raised Fist0
Rubyprogramming~5 mins

Type checking with .class and .is_a? in Ruby - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Type checking with .class and .is_a?
O(n)
Understanding Time Complexity

When we check an object's type in Ruby using .class or .is_a?, the program does some work to find out what kind it is.

We want to know how the time it takes to do this check changes as the program runs.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


items = [1, 'hello', 3.14, :symbol, [1,2,3]]
items.each do |item|
  if item.class == String
    puts "String found: #{item}"
  elsif item.is_a?(Array)
    puts "Array found with length #{item.length}"
  else
    puts "Other type: #{item.class}"
  end
end
    

This code goes through a list and checks each item's type using .class and .is_a?.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Looping through each item in the array and checking its type.
  • How many times: Once for every item in the list.
How Execution Grows With Input

As the list gets bigger, the program checks more items one by one.

Input Size (n)Approx. Operations
10About 10 type checks
100About 100 type checks
1000About 1000 type checks

Pattern observation: The number of checks grows directly with the number of items.

Final Time Complexity

Time Complexity: O(n)

This means the time to check types grows in a straight line as the list gets longer.

Common Mistake

[X] Wrong: "Type checking with .class or .is_a? takes a long time or depends on the type hierarchy depth."

[OK] Correct: These checks are simple and happen quickly for each item, so the time depends mostly on how many items you check, not on the complexity of the types.

Interview Connect

Understanding how type checks scale helps you write clear and efficient code, which is a useful skill in many programming tasks and interviews.

Self-Check

"What if we replaced the array with a nested structure and checked types recursively? How would the time complexity change?"

Practice

(1/5)
1. What does the .class method return when called on an object in Ruby?
easy
A. Whether the object is a kind of a class
B. The exact type (class) of the object
C. The parent class of the object
D. A boolean indicating if the object is a class

Solution

  1. Step 1: Understand what .class does

    The .class method returns the exact class of the object it is called on.
  2. Step 2: Compare with other options

    Options A, C, and D describe behaviors of other methods or incorrect meanings.
  3. Final Answer:

    The exact type (class) of the object -> Option B
  4. Quick Check:

    .class returns exact type [OK]
Hint: Remember: .class gives exact type, not inheritance [OK]
Common Mistakes:
  • Confusing .class with .is_a?
  • Thinking .class returns boolean
  • Assuming .class returns parent class
2. Which of the following is the correct syntax to check if variable x is an instance of the Integer class using .is_a??
easy
A. x.is_a?(Integer)
B. x.is_a(Integer)
C. x.is_a<Integer>
D. x.is_a? Integer

Solution

  1. Step 1: Recall the syntax of .is_a?

    The method .is_a? requires a class argument inside parentheses, like .is_a?(ClassName).
  2. Step 2: Check each option

    x.is_a?(Integer) uses correct syntax with parentheses and question mark. Options A, B, and D have syntax errors or missing parentheses.
  3. Final Answer:

    x.is_a?(Integer) -> Option A
  4. Quick Check:

    Use parentheses with .is_a? [OK]
Hint: Always use parentheses with .is_a? method [OK]
Common Mistakes:
  • Omitting parentheses after .is_a?
  • Using angle brackets instead of parentheses
  • Leaving out the question mark
3. What will be the output of the following Ruby code?
class Animal; end
class Dog < Animal; end

dog = Dog.new
puts dog.class
puts dog.is_a?(Animal)
medium
A. Dog true
B. Animal true
C. Dog false
D. Animal false

Solution

  1. Step 1: Understand dog.class

    The dog object is an instance of Dog, so dog.class returns Dog.
  2. Step 2: Understand dog.is_a?(Animal)

    Since Dog inherits from Animal, dog.is_a?(Animal) returns true.
  3. Final Answer:

    Dog true -> Option A
  4. Quick Check:

    .class exact type, .is_a? checks inheritance [OK]
Hint: Remember: .class exact, .is_a? true for subclasses too [OK]
Common Mistakes:
  • Thinking .class returns parent class
  • Assuming .is_a? false for subclasses
  • Confusing output order
4. Identify the error in the following Ruby code snippet:
num = 10
if num.is_a?(Integer)
  puts "Number is integer"
else
  puts "Number is not integer"
end
medium
A. Syntax error in if statement
B. Missing parentheses in is_a? call
C. No error, code runs correctly
D. Incorrect class name Integer

Solution

  1. Step 1: Check is_a? usage

    The method .is_a? is correctly called with parentheses and the class Integer.
  2. Step 2: Verify syntax correctness

    The if statement and puts calls are syntactically correct.
  3. Final Answer:

    No error, code runs correctly -> Option C
  4. Quick Check:

    Correct syntax and usage means no error [OK]
Hint: Check parentheses and class names carefully [OK]
Common Mistakes:
  • Removing parentheses from is_a?
  • Using wrong class name like 'int'
  • Misplacing if-end keywords
5. Given the following code, which option correctly filters only strings from the mixed array using .is_a??
items = ["apple", 42, :symbol, "banana", 3.14]
strings = items.select { |item| ??? }
hard
A. item.class != String
B. item.class == String
C. item.is_a?(Integer)
D. item.is_a?(String)

Solution

  1. Step 1: Understand filtering with .is_a?

    We want to select only elements that are strings, so we check if each item is a kind of String.
  2. Step 2: Compare options

    item.is_a?(String) uses .is_a?(String) which returns true for strings. item.class == String uses .class == String which also works but is less flexible if subclasses exist. Options C and D filter integers or non-strings, which is incorrect.
  3. Final Answer:

    item.is_a?(String) -> Option D
  4. Quick Check:

    Use .is_a?(String) to filter strings [OK]
Hint: Use .is_a?(String) to include subclasses too [OK]
Common Mistakes:
  • Using .class == String and missing subclasses
  • Filtering wrong types by mistake
  • Forgetting question mark in .is_a?
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