Ruby has added a new method definition syntax as an experimental feature.

As to why:

Ruby syntax is full of “end”s. I’m paranoid that the ends end Ruby. I hope Ruby is endless. So, I’d like to propose a new method definition syntax.
- mame (Yusuke Endoh)

## Syntax

def value(args) = expression


The above “endless” syntax can be used to write single-line method definitions.

### Example

def say_hello() = puts("Hello World!")

say_hello() #=> "Hello World!"

def sum(x,y) =
x + y

sum(2,3)  #=> 5


The above examples show the most basic usage of this syntax.

Let’s see some other ways to use this new method definition syntax.

### With an object

Without the endless syntax, we’d add a method to an Object instance like this:

person = Object.new

def person.speak()
puts("Good morning!")
end


With the new single-line method definition syntax, we can write the same method as:

person = Object.new

def person.speak() = puts("Good morning!")

person.speak() #=> Good morning!


### As a private method

Without the endless syntax, we’d add a single private method to a class like this:

class User

def points_left
is_active? @points : 0
end

private def is_active?
@membership_end_datetime > Time.now
end


With the new single-line method definition syntax, we can write the same method as:

class User

def points_left
is_active? @points : 0
end

private def is_active?() = @membership_end_datetime > Time.now


## Limitations

There are few limitations while using this syntax:

• Parentheses for formal arguments are mandatory while writing the definition
• Parentheses for method call parameters (if any) in the expression are mandatory
• The body must be an argument expression.
# Without parentheses around formal argument(s)

def square x = x**2
#=> circular argument reference - x
#=> syntax error, unexpected end-of-input, expecting ';' or '\n'

# Without parentheses around formal argument(s)

def greet = puts("Hello everyone!")
#=> syntax error, unexpected '=', expecting ';' or '\n'

# Without parentheses around a method call parameters in expression

def greet() = puts "Hello everyone!"
#=> syntax error, unexpected '=', expecting ';' or '\n'


In the snippet above, the first two examples resulted in a syntax error because parentheses for formal arguments were not used.

And the last one also resulted in a syntax error because parentheses were not used while calling the method puts.

# Using multiple lines for definition
def logout =
...


The above code will result in a NameError. Hence, multiple line definitions should always be put inside a def end block.

## Summary

Ruby has added a new way to define single-line methods. However, this syntax is still in an experimenting phase, and its spec may change before the release.