TypeScriptのif-else文を使うと、特定の条件に基づいてコードの流れを制御することができ、動的で応答性の高いプログラムを書くことができるようになります。
まず、TypeScriptのif-else文の基本的な構文を見てみましょう。構造は他のプログラミング言語と同様で、ifキーワード、それに続く条件式、そして条件が真の場合に実行されるコードのブロックから構成されています。条件が偽の場合は、elseブロックを追加して、別の命令を実行することができます。
if (predicate) {
// 述語がtrueである場合に実行するコード
} else {
// 述語がfalseである場合に実行するコード
}
条件を括弧でくくることと、ブーリアン値(真か偽のどちらか)で評価することに注意が必要です。
例えば、2つの値が等しいかどうかを調べるには==のような比較演算子を、複数の条件が真であるかどうかを調べるには「&&」のような論理演算子を使用することができます。
それでは実際に例を見てみましょう。
let age = 18;
if (age >= 21) {
console.log("You can legally purchase alcohol");
} else {
console.log("You are not old enough to purchase alcohol");
}
// "You are not old enough to purchase alcohol"
この例では、if-else文を使って、変数ageの値が21以上かどうかをチェックしています。もし21歳であれば、最初のコードのブロックが実行され、ユーザーが合法的にアルコールを購入できることを示す文字列が表示されます。この条件が偽の場合、elseブロックのコードが実行され、ユーザーがアルコールを購入できる年齢ではないことを示す文字列が表示されます。
今回の場合はageの値が18なのでelseブロックのコードが実行されます。
if-else文では、if節とelse節を複数使うことで、複数の条件を連鎖させることができます。
if (predicate1) {
// 述語1がtrueの場合に実行するコード
} else if (predicate2) {
// 述語1がfalseで述語2がtrueの場合に実行されるコード
} else {
// 両方の条件がfalseの場合に実行されるコード
}
それでは例を見てみましょう。
let score = 85;
if (score >= 90) {
console.log("You got an A!");
} else if (score >= 80) {
console.log("You got a B!");
} else if (score >= 70) {
console.log("You got a C!");
} else {
console.log("You got a failing grade.");
}
// "You got a B!"
この例では、複数のelse ifブロックを持つif-elseステートメントを使用して、スコアに基づいて成績を決定しています。最初の条件が偽の場合、2番目の条件をチェックし、スコアが80以上であれば、成績がBであることを示す文字列を表示します。
今回の場合はscoreの値が85なので成績がBであることを示す文字列を表示します。
短絡評価とは、TypeScriptを含む特定のプログラミング言語が、より効率的な方法で論理式を評価できるようにする機能です。この機能により、インタプリタやコンパイラは、最終的な結果が確定した時点で、式の評価を停止することができます。
TypeScriptでは、論理演算子&&と||は短絡的な評価を行います。
&&演算子が使われると、インタープリタやコンパイラはまず式の左辺を評価します。もし左辺が偽であれば、右辺を評価することなく直ちに偽を返します。これは、&&演算子の場合、左辺が偽であれば、右辺の値にかかわらず式全体が偽でなければならないからです。つまり、&&演算子は、左辺が真である場合にのみ右辺を評価するのです。
let x = 0;
let y = 10;
if (x > 0 && y > 0) {
console.log("x and y are greater than 0");
} else {
console.log("x or y is not greater than 0");
}
// "x or y is not greater than 0"
xは0なので、式の左辺(x > 0)は偽で、右辺は評価されません。それはfalse&&falseはfalseであり、false&&trueもfalseだからです。したがって、インタプリタやコンパイラは式の右辺をスキップしてすぐにelseブロックに飛び、x or y is not greater than 0という文字列を表示します。
同様に、||演算子が使われると、インタプリタやコンパイラはまず式の左辺を評価します。もしそれが真であれば、右辺を評価することなく直ちに真を返します。
let x = 1;
let y = 10;
if (x > 0 || y > 0) {
console.log("x or y is greater than 0");
} else {
console.log("x and y are not greater than 0");
}
// "x or y is greater than 0"
xは1なので、式の左辺は真で、右辺は評価されません。それはtrue||falseはtrueであり、true||trueもtrueだからです。したがって、インタプリタやコンパイラは式の右辺をスキップしてすぐにelseブロックに飛び、x or y is greater than 0という文字列を表示します。
短絡評価は、不要な評価を避けることでコードを効率化し、リソースを節約することができます。短絡的評価が正しく動作するように、式中の条件の順序が重要であることに留意してください。
条件付き三項演算子とは、3つのオペランドをとる条件演算子です。条件付き三項演算子は、if-else文を記述するための省略記法です。基本的な構文は次のとおりです。
predicate ? valueOfTrue : valueOfFalse
例えば、次のようなif-else文があります。
let weather = "cloudy";
let bringUmbrella;
if (weather === "rainy") {
bringUmbrella = "Bring an umbrella";
} else {
bringUmbrella = "No need for an umbrella";
}
console.log(bringUmbrella); // "No need for an umbrella"
条件付き三項演算子を用いて次のように書き換えることができます。
let weather = "cloudy";
let bringUmbrella = (weather === "rainy") ? "Bring an umbrella" : "No need for an umbrella";
console.log(bringUmbrella); // "No need for an umbrella"
この例では、三項演算子を使って天気をチェックし、傘を持ってくるかどうかを判断しています。
チェックされる条件は、変数weatherがrainyに等しいかどうか(weather === "rainy")で、もしそうであれば、コードは三項演算子の最初の部分を実行し、変数bringUmbrellaにBring an umbrellaという文字列を割り当て、それ以外はNo need for an umbrellaという文字列を割り当てることになります。
Note: if-else文については、CS基礎/初級/関数で詳しく学習できます。