2016-10-26 21 views
0

私は、この関数は、短い手のいくつかの並べ替え(長い形式を思い出すか把握することはできません)であることを理解することができますが、私はGroovyの構文、について説明

def some_name = {a, b, c -> a==c?bumpUp(b):b} 

、以下の機能に出くわしました。それは等しいが

bumpUp(b)

別の関数を呼び出すのであれば問題はあり、均等& Cのために比較し、3つの引数を取る:
1は、論理右の私の仮定でありますか?
2.これを書くための長い道のりとは何ですか?
bumpUp(b):b

+0

いくつかのグルーヴィーな読書をしました。そして、これは 'クロージャー'のセクションで説明されています – OK999

答えて

1

Ternary operatorには、?と:は、if文と同等のものを使うための短くクリーンな方法です。コードの冗長性を減らすことで、読みやすくなります。例えば

:条件(1 == 1)が真である場合、結果の割り当ては他'等しい'、あろう

String result = (1==1) ? 'equals' : 'not equals' 

は、上記の行を説明でき結果の割り当ては'以外は'と等しくなります。

次のようにして、あなたはおそらくおなじみの長い道のりがある:

String result = "" 
if(1==1) { 
    result = 'equals' 
} else { 
    result = 'not equals' 
} 

あなたの3つの質問に答えるために:

  1. をロジック上のあなたの仮定が正しいです。 :-)
  2. それを書いている長い方法は、質問2セクションに記載されています。
  3. :bは、elseセクションに関連しています。 ':'はb変数の単​​なるセパレータです。 if(a == c)がfalseの場合、 ':'の後のセクションコードに行き、その特定のケースではbです。

質問2セクション

if(a==c){ 
    some_name = bumpUp(b) 
} else { 
    some_name = b 
} 
1

とは何ですか?:操作は、両方とも?そして、:、if文のような:

Boolean?true:false 
それはそう、真または偽の値を返すことを除いて

if(Boolean) 
    true 
else 
    false 

に相当

a==c?bumpUp(b):b 

if(a == c) 
    return bumpUp(b) 
else 
    return b 
のようなものです

また、groovyにはasあなたは "Elvis"演算子と呼ばれる中心値を取り除きます。変数をデフォルト値にするためによく使用されます。あなたが名前の値をプリントアウトしたかったが、それがnullだときにnullを印刷したくない場合は、あなたが言うかもしれない:

println "Your name is ${name?:'unknown'}" 

を変数名に値がない場合は、それが「不明」に印刷されますnullの代わりに "groovy true"(nullでも空でもない)の場合は、クエリ値を返します。