万年素人からHackerへの道

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

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    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