Project

General

Profile

Actions

Feature #11034

closed

Nil Conditional

Added by grzesiek (Grzegorz Bizon) over 9 years ago. Updated about 9 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:<unknown>]

Description

Hi everyone !

Some time ago I was thinking about Nil Conditional Operator in Ruby (??). This would be particularly useful to avoid frequent checking for nil, and should behave and look like Null Conditional Operator introduced in C# 6.0.

I was thinking about something like this (assume var is nil or doesn't exist):

var??.method1.method2(123, 345).method3 { |i| i == 1 }
=> nil

When var is nil or doesn't exist, code above should return nil or NilConditionalClass object instead of raising NoMethodError or NameError.
This can also work with methods (assume var exists):

var.method1??.method2(a, b)
=> nil

When var exists and can receive method1, but method1 returns nil - this shouldn return nil instead of raising NoMethodError: undefined method method2' for nil:NilClass`

When var exists and is not nil, and can receive method1, and object returned by method1 can receive method2 this, of course should behave as expected (like version without ?? operator) and return value according to implementation of method2.

When var doesn't exist - this should raise NameError.

I tried to create gem for that (https://github.com/grzesiek/nil-conditional) but from now on, only native implementation seems reasonable.

What do you think about that feature ? Maybe it is already considered, but I couldn't find anything similar at Google/this issue tracker (in that case I'm sorry for duplicate).

Thanks in advance for feedback !

Kind regards,
Grzegorz


Related issues 2 (0 open2 closed)

Related to Ruby master - Feature #1122: request for: Object#tryRejectedauthorNari (Narihiro Nakamura)02/07/2009Actions
Related to Ruby master - Feature #11537: Introduce "Safe navigation operator"Closedmatz (Yukihiro Matsumoto)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0