[ruby-de] nils vermeiden - Kurzform

Martin J. Dürst duerst at it.aoyama.ac.jp
Do Jun 1 14:19:45 JST 2017


On 2017/06/01 03:01, Nicolai Constantin Reuschling wrote:
> Hallo Andreas,
> 
> in Ruby sind die Objekte nil und false beide falsch -- alles andere
> evaluiert zu wahr.
> 
> Du könntest also schreiben: erg = x.func if(x && x.func) oder noch kürzer:
> erg = x && x.func, vorausgesetzt Du willst nicht mit false für x arbeiten.
> In jedem Fall musst du bei x gleich nil (oder false) damit leben, dass erg
> false werden kann (das ist in Deinem Beispiel nicht so). In jedem Fall
> würde ich das doppelte Kaufmanns-Und ("&&") dem "and" bevorzugen.

Statt x && x.meth1 && x.meth1.meth2 oder so kann man seit Ruby 2.3 auch
x&.meth1&.meth2 schreiben. Aus doc/NEWS-2.3.0:

* safe navigation operator:

   * new method call syntax, `object&.foo', method #foo is called on
     `object' if it is not nil.
     this is similar to `try!' in Active Support, except:
     * method name is syntactically required
           obj.try! {} # valid
           obj&. {}    # syntax error
     * arguments are evaluated only if a call is made:
           obj.try!(:foo, bar())  # bar() is always evaluated
           obj&.foo(bar())        # bar() is conditionally evaluated
     * attribute assignment is valid
           obj&.attr += 1
     [Feature #11537]

Ich bin mir nicht sicher, dass das direkt passt, aber es kann vermutlich 
gebraucht werden.

Grüße,    Martin.


Mehr Informationen über die Mailingliste ruby-de