_三項演算子_は、シンプルな_if/else_文のための、軽量でコンパクトな代替手段です。
通常はreturn文で使われますが、それだけに限りません。たった1行で判断できます。式がtrueなら左の値、falseなら右の値を返します。次のとおりです:
boolean expr = 0 != 200;
// Ternary statement
int value = expr ? 22 : 33;
// => 22
多くのシンプルな_if/else_式は、_三項演算子_を使って簡略化できます。
この演習では、ある従業員の1か月の給与の総額を計算するためのルールを実装します。International Siderurgy Company(ISC)は、最終的な賃金に影響を与えるさまざまな要素を考慮しながら、従業員の給与を計算する支援を必要としています。
タスクは3つあり、実装にはif/else文ではなく三項演算子を使います。
salaryMultiplierメソッドを実装します。このメソッドは、従業員が仕事を休んだ日数に応じて給与の倍率を返します。従業員が5日以上休んだ場合は、15%のペナルティを適用します。
int daysSkipped = 3;
salaryMultiplier(daysSkipped);
// => 1.0
daysSkipped = 7;
salaryMultiplier(daysSkipped);
// => 0.85
bonusMultiplierメソッドとbonusForProductsSoldメソッドを実装します。ISCは販売した製品1つにつき10の貨幣単位を支払い、従業員が20個以上の製品を販売した場合は、倍率が13に上がります。bonusMultiplierはどの倍率を適用するかを決め、bonusForProductSoldはボーナスの合計を貨幣単位で返します。
int productsSold = 21;
bonusMultiplier(productsSold);
// => 13
bonusForProductsSold(productsSold);
// => 273
productsSold = 5;
bonusMultiplier(productsSold);
// => 10
bonusForProductsSold(productsSold);
// => 50
finalSalaryメソッドを実装します。このメソッドは、基本給1000.00に給与の倍率を掛け、ボーナスを足した結果を返します。ただし、給与は2000.00を上限とします。
int daysSkipped = 2;
int productsSold = 3;
finalSalary(daysSkipped, productsSold);
// => 1030.00
productsSold = 90;
finalSalary(daysSkipped, productsSold);
// => 2000.00