Project

General

Profile

Actions

Feature #20914

closed

Constructor Parameter Shortcuts

Added by artemb (Artem Borodkin) 24 days ago. Updated 23 days ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:120029]

Description

Constructor Parameter Shortcuts

I propose adding a new syntax to simplify the constructor definition in the classes. Defining a constructor often involves repetitive assignments of parameters to instance variables. This pattern is verbose and can easily become cumbersome, especially in classes with many instance variables. The proposed syntax allows instance variables to be automatically assigned from constructor arguments, improving code clarity and brevity.

Basic Usage:

  • Current:

    class User
      def initialize(name, age, email = nil)
        @name = name
        @age = age
        @email = email
      end
    end
    
  • Proposed:

    class User
      def initialize(@name, @age, @email = nil) =
    end
    

Named Parameters:

  • Current:

    class Product
      def initialize(name:, price:, description: 'No description available')
        @name = name
        @price = price
        @description = description
      end
    end
    
    product = Product.new(name: 'Laptop', price: 1000)
    
  • Proposed:

    class Product
      def initialize(@name:, @price:, @description: 'No description available') =
    end
    
    product = Product.new(name: 'Laptop', price: 1000)
    

Mixing Named and Positional Parameters:

  • Current:

    class Booking
      def initialize(date, time, customer:, notes: '')
        @date = date
        @time = time
        @customer = customer
        @notes = notes
      end
    end
    
    booking = Booking.new('2023-04-01', '14:00', customer: 'Alice', notes: 'First-time client')
    
  • Proposed:

    class Booking
      def initialize(@date, @time, @customer:, @notes: '') =
    end
    
    booking = Booking.new('2023-04-01', '14:00', customer: 'Alice', notes: 'First-time client')
    

Related issues 1 (1 open0 closed)

Related to Ruby master - Feature #5825: Sweet instance var assignment in the object initializerAssignedmatz (Yukihiro Matsumoto)Actions
Actions #1

Updated by mame (Yusuke Endoh) 24 days ago

  • Related to Feature #5825: Sweet instance var assignment in the object initializer added

Updated by nobu (Nobuyoshi Nakada) 24 days ago

  def initialize(@name, @age, @email = nil) =

What is the equal sign at the end?
nil is missed?

Updated by artemb (Artem Borodkin) 23 days ago · Edited

You’re absolutely right; this part does seem ambiguous. I initially added it as an empty block, modeled after the short syntax, like this:

def initialize(name, age, email = nil) = (@name, @age, @email = name, age, email)

What do you think about this option:

def initialize(@name, @age, @email = nil) = ()

The nil is also possible

def initialize(@name, @age, @email = nil) = nil

Updated by mame (Yusuke Endoh) 23 days ago

What do you think about this option:

Then this proposal is almost the same as #5825.

Updated by artemb (Artem Borodkin) 23 days ago

Thank you! This appears to be literally the same proposal, so it can be closed.
I will review #5825 and follow for updates.

Actions #6

Updated by mame (Yusuke Endoh) 23 days ago

  • Status changed from Open to Closed
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0