Method in Ruby
A method allows us to write the piece of code at one place which get executed many times. This encourages modularity in the programs since writing the same code at different places tend to create more errors.
NOTE: Ruby methods are similar to functions in other languages.
Defining Method
In order to use a method, we need to first define it.
A method is defined with the def
keyword followed by method name and at the end we need to use end
keyword to denote end of that method.
Syntax
def method_name
# code ...
end
NOTE: The Ruby method name should be written as snake_case
.
See Naming Conventions.
Method with arguments
As like other programming languages, we may pass arguments to a method in Ruby.
def hello(name)
puts "Hello, #{name}"
end
hello("Ruby") # output: Hello, Ruby
Default arguments
Ruby method can have default arguments. This arguments is used when call the method without passing any argument.
def hello(name = 'Foo')
puts "Hello, #{name}"
end
hello() # or just `hello` which is usually preferred with no argument
hello("Ruby")
Output:
# output
Hello, Foo
Hello, Ruby
The parentheses are usually not used when using a method without arguments. |
Return Values
By default, a method returns the result of the last statement evaluated in the body of the method.
However, you can explicitly use the return
keyword anywhere in the body to return from that point.
def hello(name)
return "Returned" # our early return
puts "Hello, #{name}" # this expression is never evaluated
end
def add(number1, number2)
number1 + number2 # no need of 'return' keyword
end
add(10, 5) # output: 15
Multiple Return values
In Ruby, only a single object may be returned. If we need multiple values from a method call, then we store those in an Array.
def swap(number1, number2)
[number2, number1]
end
number1 = 10
number2 = 5
number1, number2 = swap(number1, number2)
puts number1 # output: 5
puts number2 # output: 10
Chaining Methods
We can chain methods together if we know the return value properly. This will help us to write expressive code.
def add(number1, number2)
number1 + number2
end
add(2, 3).times { |i| puts "#{i} Hello" }
Output:
0 Hello
1 Hello
2 Hello
3 Hello
4 Hello
Method calls as arguments
In Ruby, we can use a method call as an argument to other methods.
def add(number1, number2)
number1 + number2
end
def subtract(number1, number2)
number1 - number2
end
def multiply(number1, number2)
number1 * number2
end
puts multiply(add(3, 7), subtract(10, 5)) # output: 50
Local Variable Scope in Method
A method creates its own scope. A variable defined in the method are only accessible within that method and cannot be invoked from outside of method definition.
# we might assume that the 'update_name' will
# update the name variable from 'Foo' to 'Ruby'
name = "Foo"
def update_name
name = "Ruby"
end
puts name # output: Foo
However, we are able to access some of the data if passed as argument.
languages = ['Ruby', 'C', 'Python', 'Go']
def update_language(languages)
languages << 'JavaScript'
end
update_language(languages)
puts languages
Output:
Ruby
C
Python
Go
JavaScript
NOTE: We can update the array here since it is passed as reference to method.
Help me to improve Dhanu Sir.