Project

General

Profile

Feature #12820

Shorter syntax for assigning a method argument to an instance variable

Added by fornellas (Fabio Pugliese Ornellas) over 3 years ago. Updated over 2 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:77520]

Description

Hello,

The pattern:

class Person
  def initialize(name:)
    @name = name
    @age  = 0
  end
end

is so common, that Cristal Programming Language has a shortcut for it:
https://crystal-lang.org/docs/syntax_and_semantics/methods_and_instance_variables.html

class Person
  def initialize(@name : String)
    @age = 0
  end
end

This is a feature request to implement the same style to Ruby syntax, supporting both isolated parameters and Hash style parameters. Eg:

class Person
  attr_reader :name, :age
  def initialize(@name, @age:)
  end
end
fabio = Person.new("Fabio", age: 34)
fabio.name #=> "Fabio"
fabio.age  #=> 34

This will be very useful in methods that accept a lot of parameters and certainly will avoid bugs due to decreased duplicated code (eg: addind a new parameter to a method, and forgetting to set the instance variable to it). Other than implementing support for the syntax itself, I believe RDoc would also have to be updated, not to expose the "@" on documentation (as it is not relevant there).

What do you think?

Thank you.


Related issues

Related to Ruby master - Feature #15192: Introduce a new "shortcut assigning" syntax to convenient setup instance variablesOpenmatz (Yukihiro Matsumoto)Actions
Is duplicate of Ruby master - Feature #5825: Sweet instance var assignment in the object initializerAssignedmatz (Yukihiro Matsumoto)Actions
Is duplicate of Ruby master - Feature #8563: Instance variable argumentsRejectedmatz (Yukihiro Matsumoto)Actions
Is duplicate of Ruby master - Feature #12023: Allow ivars to be used as method argumentsOpenActions
Is duplicate of Ruby master - Feature #12578: Instance Variables Assigned In parameters ( ala Crystal? )RejectedActions

Also available in: Atom PDF