DEV Community

Michel Sánchez Montells
Michel Sánchez Montells

Posted on • Edited on

Exploring the Power of Keyword Arguments in Ruby

Keyword Arguments was introduced in Ruby 2.0.

This seems a very nice and attractive feature.

In a few words and code examples I will delve into keyword arguments in Ruby based on my own experience, opinion, and how I understand it.

This technique eliminates the Dependency on Parameter Order and Provide More Flexibility for Default Values.

🚥

Eliminating the Dependency on Parameter Order:

When using positional arguments, developers must know/remember the order in which the parameters are defined in the method definition. This can lead to confusion and errors, especially when methods have a large number of parameters. Keyword arguments eliminate this dependency by allowing developers to pass arguments by name instead of position. Let's consider an example:

With positional(traditional) parameters:

def greet(name, age)
  puts "Hello, #{name}! You are #{age} years old."
end

greet("Montells", 44)
> Hello, Montells! You are 44 years old.
greet(44, 'Montells')
> Hello, 44! You are Montells years old.

Enter fullscreen mode Exit fullscreen mode

Here the developer must know the order of the parameters.

With hash options:

def greet(params)
  puts "Hello, #{params[:name]}! You are #{params[:age]} years old."
end

person = { name: 'Montells', age: '44' }
greet(person)
> Hello, Montells! You are 44 years old.
unordered_person = { age: '44', name: 'Montells' }
greet(unordered_person)
> Hello, Montells! You are 44 years old.
Enter fullscreen mode Exit fullscreen mode

Here the dependency of order parameters is eliminated however developer needs to deal with hash.

With Keyword Arguments:

def greet(name:, age:)
  puts "Hello, #{name}! You are #{age} years old."
end

greet(name: "Montells", age: 44)
> Hello, Montells! You are 44 years old.
greet(age: 44, name: "Montells")
> Hello, Montells! You are 44 years old.
Enter fullscreen mode Exit fullscreen mode

Here the developer must to know the name of each parameter but not the order.

Ease of Providing Default Values:

Keyword arguments also provide a convenient way to assign default values to parameters, regardless of their order. This is particularly useful when some parameters have default values and others do not. Let's illustrate this with an example:

With positional(traditional) parameters:

def create_user(name, age = 18, country = 'Unknown')
  puts "Name: #{name}, Age: #{age}, Country: #{country}"
end

create_user("Montells", "Cuba") # I want to omit age
> Name: Montells, Age: Cuba, Country: Unknown
Enter fullscreen mode Exit fullscreen mode

With Keyword Arguments:

def create_user(name:, age: 44, country: 'Unknown')
  puts "User: #{name}, Age: #{age}, Country: #{country}"
end

create_user(name: "Montells", country: 'Cuba')
> User: Montells, Age: 44, Country: Cuba
Enter fullscreen mode Exit fullscreen mode

In the first example, using positional arguments, we need to remember the order of the default parameters. However, in the second example, with keyword arguments, we can explicitly provide values only for the parameters we want to override, while the rest use their default values. This makes the code more flexible and less error-prone.

Bonus Track

Some similarity can be detected between hash and keyword arguments. Sometimes you have a hash options like {name: "Montells", country: 'Cuba'}. It can be passed to a method declared with keyword arguments using the double splat operator **

def create_user(name:, age: 44, country: 'Unknown')
  puts "User: #{name}, Age: #{age}, Country: #{country}"
end

hash_options = {name: "Montells", country: 'Cuba'}

create_user(**hash_options)
>User: Montells, Age: 44, Country: Cuba
Enter fullscreen mode Exit fullscreen mode

🏁

Conclusion:
Keyword arguments in Ruby, introduced in version 2.0, offer significant advantages over traditional positional arguments. They eliminate the need to remember the order of parameters, making code more readable and self-explanatory. Additionally, keyword arguments provide a convenient way to assign default values to parameters, regardless of their order. By leveraging the power of keyword arguments, Ruby developers can write more expressive, flexible, and maintainable code.

Incorporating keyword arguments into your Ruby code can greatly enhance its readability and maintainability. Embrace this powerful feature and unlock the full potential of your Ruby programming skills. Happy coding!

Top comments (2)

Collapse
 
bop profile image
bop

I like how swift made named parameters the default and you actually need to be specific when you don’t want them.

Great article

Collapse
 
frankmatos profile image
Frank Matos

Excellent. Thank you for sharing!