Groovyには、?:という演算子があって、たとえば、
x ?: y
という式があった場合、
x != null ? x : y
と同じような働きをする(xの評価が2回行われない事を除いて)。で、これと同じ働きをする演算子をOnionにも追加してみた。使い方はGroovyのそれとほぼ同じ。たとえば、以下のようなコードが動作する。
x: String = null; if(args.length > 0) { x = args[0]; } System::out.println(x ?: "BAR");
コマンドライン引数が無い場合は、xがnullなので、"BAR"が表示され、そうでない場合、最初のコマンドライン引数が表示される。
ちなみに、Onionで型チェックやコード生成を行うやり方を思い出すためのリハビリがてらに追加してみただけなので、そのうち削除するかも。
追記:
id:SiroKuroさんのブクマコメントより:
同じですね。以前、??演算子は調べたことあったんですが、馴染みが無かった
のですっかり忘れてました。
追記2:
@masahiro_sakaiさんより
@kmizu Groovyの ?: 演算子というか、起源はgccのような。
http://twitter.com/masahiro_sakai/statuses/1292379292