Ruby return Keyword
last modified October 18, 2026
This tutorial explains how to use Ruby's return keyword. The return
statement controls method execution flow and output values.
The return keyword exits a method immediately and optionally provides a value. Without return, Ruby methods return the last evaluated expression.
Return statements make control flow explicit and allow early termination. Ruby collects multiple return values into an array.
Basic Method Return
This example shows a simple method with an explicit return statement. The method calculates and returns the square of a number.
def square(num)
return num * num
end
result = square(5)
puts "The square is #{result}"
The return statement sends the calculated value back to the caller.
Without it, the method would still work but explicit returns improve clarity.
Early Return from Method
Return statements can exit methods before reaching the end. This example checks input validity and returns early if invalid.
def divide(a, b) return "Error: division by zero" if b == 0 a / b end puts divide(10, 2) puts divide(5, 0)
The method returns an error message immediately if the divisor is zero. This pattern avoids nested conditionals and improves readability.
Returning Multiple Values
Ruby methods can return multiple values using arrays. This example returns both quotient and remainder from division.
def divmod(a, b)
return [a / b, a % b]
end
quotient, remainder = divmod(10, 3)
puts "Quotient: #{quotient}, Remainder: #{remainder}"
The return statement packages both values in an array. The caller can destructure them into separate variables for convenient access.
Conditional Return Values
Methods can return different values based on conditions. This example implements a simple scoring system with tiered responses.
def evaluate_score(score) return "Excellent!" if score >= 90 return "Good job" if score >= 70 return "Needs improvement" if score >= 50 "Fail" end puts evaluate_score(95) puts evaluate_score(65)
Each condition returns a different string. The final implicit return handles the lowest score case. This pattern creates readable decision trees.
Return in Blocks
The return keyword behaves differently in blocks versus methods. This example demonstrates how return exits the enclosing method, not just the block.
def find_first_even(numbers)
numbers.each do |n|
return n if n.even?
end
nil
end
puts find_first_even([1, 3, 5, 2, 4])
puts find_first_even([1, 3, 5])
The return statement exits the entire method when finding an even number. Without
it, each would continue through all elements, and the method would
return nil if none were even.
Return in Procs and Lambdas
A lambda return exits only the lambda, so the surrounding method continues. A
proc return exits the method where the proc was created. If that method has
already returned, calling the proc raises LocalJumpError.
def lambda_vs_proc
lambda_return = lambda { return :from_lambda }
proc_return = proc { return :from_proc }
puts lambda_return.call
puts proc_return.call
:method_end
end
puts lambda_vs_proc
def make_proc
proc { return :too_late }
end
begin
make_proc.call
rescue LocalJumpError => e
puts "LocalJumpError: #{e.message}"
end
The lambda call prints from_lambda and continues. The proc call
returns from lambda_vs_proc before its puts runs, so
:method_end is never reached; the method returns
:from_proc, which the outer puts prints. The detached
proc then raises LocalJumpError because its defining method has
already returned.
Return with begin-rescue
Return statements work with exception handling. This example shows how return values interact with rescue blocks.
def safe_divide(a, b)
begin
a / b
rescue ZeroDivisionError
return "Cannot divide by zero"
end
end
puts safe_divide(10, 2)
puts safe_divide(5, 0)
The method returns either the division result or an error message. The return in the rescue block provides an alternative execution path.
Explicit vs Implicit Return
This example compares explicit return statements with Ruby's implicit return behavior. Both styles work but have different use cases.
def explicit_return return "Hello" "World" end def implicit_return "Hello" "World" end puts explicit_return # Outputs "Hello" puts implicit_return # Outputs "World"
The explicit return exits immediately, ignoring subsequent code. The implicit version evaluates all expressions and returns the last one.
Source
This tutorial covered Ruby's return keyword with practical examples showing method control flow, multiple returns, and special cases.
Author
List all Ruby tutorials.