Feature #11034


Nil Conditional

Added by grzesiek (Grzegorz Bizon) over 6 years ago. Updated almost 6 years ago.

Target version:


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 methodmethod2' 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 ( 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,

Related issues

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

Also available in: Atom PDF