Switch文の使用
条件ロジックが依存する式が多数の異なる値を取る場合があり、異なるコード・ブロックを実行する場合は、switch文を使用してタスクを簡略化します。
次の例に示すように、switch
文に単一の引数として渡された式は、各case
ブロックの値と比較されます。 最初に一致したcase
ブロック内のコードが実行されます。 各case
ブロック内でbreak
文を使用することに注意してください。 このbreak
文を含めないと、後続のcase
ブロックからコードが実行され、通常はアプリケーションのバグが発生します。
さらに、'A'
や'B'
などの特定の値を使用する以外に、'C'..'P'
などの値の範囲や['Q','X','Z']
などの値のリストを使用することもできます。 switch
式は、この例で使用されている文字列に制限されません。任意のオブジェクト型にできます。
def logMsg
def maxDiscount = 0
// warehouse code is first letter of product SKU
// uppercase the letter before using it in switch
def warehouseCode = upperCase(left(SKU,1))
// Switch on warehouseCode to invoke appropriate
// object function to calculate max discount
switch (warehouseCode) {
case 'A':
maxDiscount = Warehouse_A_Discount()
logMsg = 'Used warehouse A calculation'
break
case 'B':
maxDiscount = Warehouse_B_Discount()
logMsg = 'Used warehouse B calculation'
case 'C'..'P':
maxDiscount = Warehouse_C_through__P_Discount()
logMsg = 'Used warehouse C-through-P calculation'
break
case ['Q','X','Z']:
maxDiscount = Warehouse_Q_X_Z_Discount()
logMsg = 'Used warehouse Q-X-Z calculation'
break
default:
maxDiscount = Default_Discount()
logMsg = 'Used default max discount'
}
println(logMsg+' ['+maxDiscount+']')
// return expression that will be true when rule is valid
return Discount == null || Discount <= maxDiscount