万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

null合体演算子(ぬるがったいえんざんし、null coalescing operator)C#

今までJavaScriptで「xがnullでなければxをそのまま、そうでなければ、y」というのを以下の三項演算子でやってた。
Rubyではもっと短くかけた気がする。

hoge = x ? x : y

でも、先程のxが以下のように式が長い時が凄い冗長。
同じ式を2度も書くのは嫌。DRYしたい。

hoge = hoge+bar*foo ? hoge+bar*foo : y

変数×に入れてやろうと思ったが、これはできない

hoge = (x=hoge+bar*foo) ? x : y

C#にはnull合体演算子でこんな書き方ができる。

hoge = x ?? y

だから先程のうざい式もこんな風にできるはずだ。実行してないけど。

hoge = (hoge+bar*foo) ? ? : y

C#うらやましーって思ってたら、JavaScriptではこんな書き方がOK。

hoge = (hoge+bar*foo) || y

RubyはなんかややこしいなFixnumとか

>> hoge=1
=> 1
>> bar=2
=> 2
>> foo=3
=> 3
>> y=4
=> 4
>> hoge = (hoge+bar*foo) || y
=> 7
>> hoge
=> 7
>> hoge=nil
=> nil
>> foo=nil
=> nil
>> hoge = (hoge+bar*foo) || y
TypeError: nil can't be coerced into Fixnum
	from (irb):9:in `*'
	from (irb):9