Method chaining lets you call many methods one after another in a single line. It makes code shorter and easier to read.
Method chaining patterns in Ruby
class Example def initialize(value) @value = value end def add(number) @value += number self end def multiply(number) @value *= number self end def result @value end end obj = Example.new(5) obj.add(3).multiply(2).result # => 16
Each method returns self to allow chaining.
The last method can return a value instead of self to get the final result.
upcase and reverse changes the string step-by-step.class ChainExample def initialize(text) @text = text end def upcase @text = @text.upcase self end def reverse @text = @text.reverse self end def show @text end end obj = ChainExample.new("hello") puts obj.upcase.reverse.show
class ChainExample def initialize(text) @text = text end def clear @text = "" self end def add_text(new_text) @text += new_text self end def show @text end end obj = ChainExample.new("") puts obj.add_text("Hi").add_text("!").show
class ChainExample def initialize(text) @text = text end def upcase @text = @text.upcase self end def clear @text = "" self end def show @text end end obj = ChainExample.new("hello") puts obj.clear.upcase.show
This program creates a calculator object starting at 10. It then adds 5, subtracts 3, multiplies by 4, and divides by 2 using method chaining. Finally, it prints the result.
class Calculator def initialize(value) @value = value end def add(number) @value += number self end def subtract(number) @value -= number self end def multiply(number) @value *= number self end def divide(number) if number == 0 puts "Cannot divide by zero" self else @value /= number.to_f self end end def result @value end end calculator = Calculator.new(10) puts "Initial value: #{calculator.result}" calculator.add(5).subtract(3).multiply(4).divide(2) puts "After chaining operations: #{calculator.result}"
Time complexity depends on each method's work; chaining itself adds no extra cost.
Space complexity is usually constant since methods modify the same object.
Common mistake: forgetting to return self in methods breaks the chain.
Use method chaining when you want smooth, readable sequences of operations on the same object.
Method chaining calls multiple methods on the same object in one line.
Each method (except the last) returns self to continue the chain.
It makes code shorter and easier to read by avoiding repeated object names.
Practice
Solution
Step 1: Understand method chaining concept
Method chaining allows calling several methods one after another on the same object without repeating the object name.Step 2: Identify the main purpose
The main goal is to write shorter, cleaner code by linking method calls in one line.Final Answer:
To call multiple methods on the same object in one line -> Option AQuick Check:
Method chaining = calling multiple methods on one object [OK]
- Thinking it creates new objects automatically
- Confusing with threading or parallel execution
- Believing it converts objects to strings
Solution
Step 1: Recall Ruby method call syntax
In Ruby, methods are called on objects using dot notation: object.method.Step 2: Identify chaining syntax
Method chaining uses multiple dots to call methods one after another on the same object.Final Answer:
object.method1.method2.method3 -> Option BQuick Check:
Ruby chaining uses dots between methods [OK]
- Using arrows (->) which is not Ruby syntax
- Using double colons (::) which are for constants or modules
- Using pipes (|) which are not method call operators
class Box
def initialize(value)
@value = value
end
def add(x)
@value += x
self
end
def multiply(x)
@value *= x
self
end
def value
@value
end
end
box = Box.new(2)
result = box.add(3).multiply(4).value
puts resultSolution
Step 1: Trace the add method
Start with @value = 2. add(3) adds 3: 2 + 3 = 5, returns self.Step 2: Trace the multiply method
multiply(4) multiplies @value by 4: 5 * 4 = 20, returns self.Step 3: Call value method
value returns @value which is 20.Final Answer:
20 -> Option AQuick Check:
2 + 3 = 5; 5 * 4 = 20 [OK]
- Forgetting that add and multiply return self
- Calculating operations in wrong order
- Returning intermediate values instead of final
class Person
def initialize(name)
@name = name
end
def greet
puts "Hello, #{@name}!"
end
def farewell
puts "Goodbye, #{@name}!"
end
end
p = Person.new("Sam")
p.greet.farewellSolution
Step 1: Check method return values
greet prints a message but returns nil (default for puts).Step 2: Understand chaining requirement
For chaining, greet must return self to allow calling farewell next.Final Answer:
greet method does not return self, so chaining fails -> Option DQuick Check:
Method chaining needs methods to return self [OK]
- Assuming puts returns self
- Thinking initialize needs explicit return
- Believing object creation is the problem
TextFormatter that allows chaining methods to transform a string. The methods are:-
upcase: converts text to uppercase-
reverse: reverses the text-
append(str): adds str to the endWhich implementation correctly supports chaining all these methods and returns the final string with
result?Solution
Step 1: Understand chaining requirements
To chain methods, each must return self (the object) so next method can be called.Step 2: Provide final output method
Since methods return self, a separate method (like result) should return the final string.Final Answer:
Each method modifies @text, returns self; add aresultmethod returning @text -> Option CQuick Check:
Return self to chain, separate method to get final string [OK]
- Returning strings breaks chaining
- Printing inside methods returns nil
- Returning new objects breaks original chain
Ready to prove it?
Pass the test and this pattern moves unknown
