Ruby Methods

Objetives

Methods

# Define Methods

def sum_two(number)
  number + 2
end
# Invoque methods

sum(2)
sum(3)
sum(rand(8))
# Return

# Implicit return
puts sum(3)

# Explicit return
def always_even(number)
  
  if number.odd?
    return number + 1
  else 
    return number + 2
end

always_even(3)
always_even(6)
always_even

Arguments

# Default arguments

def say_hello(name, is_angry = false)
 response = "Hello #{name}"
	
 if is_angry
  response = response.upcase
 end

 response
end

puts say_hello("Paulo")
# Keyword arguments (args)

def say_hello(name, is_angry: false)
 response = "Hello #{name}"
	
 if is_angry
  response = response.upcase
 end

 response
end

puts say_hello("Paulo")
# Keyword arguments (args)

def say_hello(name, prefix:, is_angry: false, time: "")
 response = "Hello #{prefix} #{name}"

 if !time.empty?
  response += ", good #{time}"
 end
	
 if is_angry
  response = response.upcase
 end

 response
end

puts say_hello("Paulo", is_angry: true, time: "evening", prefix: "Mr.")

To Consider

# Scope

def add_title(name)
  "Mr. " + name
end
 
puts name
# Returns based on conditions

def say_hello(name, prefix:, is_angry: false, time: "")
 return "Hi 😐" if is_angry

 response = "Hello #{prefix} #{name}"

 if !time.empty?
  response += ", good #{time}"
 end

 response
end

puts say_hello("Paulo", is_angry: true, time: "evening", prefix: "Mr.")

Splat

# *Splat operator

def order_pizza(*pizzas)
  "#{pizzas.size} pizza!"
end 

p order_pizza("Big pizza A")
p order_pizza("Big pizza A", "Big pizza B")
p order_pizza("Big pizza A", "Big pizza B", "Big pizza C")
# double **Splat operators

def say_hello(name, **context)
 response = "Hello #{context[:prefix]} #{name}"

 if !context[:time].empty?
  response += ", good #{context[:time]}"
 end
	
 if context[:is_angry]
  response = response.upcase
 end

 response
end

puts say_hello("Paulo", is_angry: true, time: "evening", prefix: "Mr.")

Ruby Methods

By Paulo Tijero

Ruby Methods

  • 83