制御フロー · 05
条件分岐
条件によって違う処理をします:if・else if・else、そして switch。
条件文は「もし〜なら」をコードにしたものです。
上から順に条件を見て、最初に真になった分岐一つだけを実行します。
下の例は点数から成績をつけ、偶数かどうかも教えてくれます。
score = int(input())if score >= 90: print("A")elif score >= 80: print("B")elif score >= 70: print("C")else: print("F")print("even" if score % 2 == 0 else "odd")const score = Number(require("fs").readFileSync(0, "utf8"));if (score >= 90) { console.log("A");} else if (score >= 80) { console.log("B");} else if (score >= 70) { console.log("C");} else { console.log("F");}console.log(score % 2 === 0 ? "even" : "odd");import { readFileSync } from "node:fs";const score: number = Number(readFileSync(0, "utf8"));if (score >= 90) { console.log("A");} else if (score >= 80) { console.log("B");} else if (score >= 70) { console.log("C");} else { console.log("F");}console.log(score % 2 === 0 ? "even" : "odd");import java.util.Scanner; public class Main { public static void main(String[] args) { int score = new Scanner(System.in).nextInt(); if (score >= 90) { System.out.println("A"); } else if (score >= 80) { System.out.println("B"); } else if (score >= 70) { System.out.println("C"); } else { System.out.println("F"); } System.out.println(score % 2 == 0 ? "even" : "odd"); }}using System; class Program{ static void Main() { int score = int.Parse(Console.ReadLine()); if (score >= 90) Console.WriteLine("A"); else if (score >= 80) Console.WriteLine("B"); else if (score >= 70) Console.WriteLine("C"); else Console.WriteLine("F"); Console.WriteLine(score % 2 == 0 ? "even" : "odd"); }}#include <iostream> int main() { int score; std::cin >> score; if (score >= 90) { std::cout << "A\n"; } else if (score >= 80) { std::cout << "B\n"; } else if (score >= 70) { std::cout << "C\n"; } else { std::cout << "F\n"; } std::cout << (score % 2 == 0 ? "even" : "odd") << '\n';}#include <stdio.h> int main(void) { int score; scanf("%d", &score); if (score >= 90) { puts("A"); } else if (score >= 80) { puts("B"); } else if (score >= 70) { puts("C"); } else { puts("F"); } puts(score % 2 == 0 ? "even" : "odd"); return 0;}score = コンソール.行読み().数に();もし (score >= 90){ コンソール.書く("A");}でなければ もし (score >= 80){ コンソール.書く("B");}でなければ もし (score >= 70){ コンソール.書く("C");}でなければ{ コンソール.書く("F");}コンソール.書く(score % 2 == 0 ? "even" : "odd");75
C odd
ポイント
- 条件は上から見ます。
だから厳しい基準から書きます。score >= 70を先に書くと、95点でも C になります。 - すべて偽なら
elseの分岐を実行します。elseはなくてもかまいません。 - 条件をつなぐ論理演算子:かつ
&&、または||、でない!。
Python はand、or、notです。
前で答えが決まれば後ろは計算しません(x != 0 && 10 / x > 1は安全です)。 - 一つの値をいくつもの場合と比べるときは switch のほうが読みやすいです。
「次の場合へ続けて落ちるか」は言語によって違います。 - 短い二択は三項演算子で:
条件 ? 真のとき : 偽のとき(Python はA if 条件 else B)。
言語ごとの書き方
| Python | if 条件: / elif 条件: / else: — 括弧の代わりに : とインデント。switch は 3.10 から match x: + case 1 | 2: + case _: |
|---|---|
| JavaScript | if (条件) { } else if (条件) { } else { } — switch は case ごとに break がないと次の case へ続きます。値は === で比較 |
| TypeScript | JavaScript と同じです。 型の違う値どうしを比べると、コンパイル時に教えてくれます |
| Java | if (条件) { } else if (条件) { } else { } — switch は break が必要。Java 14 からの case 1, 2 -> … は続きません |
| C# | if (条件) { } else if (条件) { } else { } — switch は中身のある case ごとに break(または return)が必須です(忘れるとコンパイルエラー) |
| C++ | if (条件) { } else if (条件) { } else { } — switch は整数(文字を含む)だけ。break がないと次の case へ続きます |
| C | C++ と同じです。 真・偽は 0 以外の数と 0 です |
| Craykon | もし (条件) { } でなければ もし (条件) { } でなければ { } — 選択 (x) { 場合 1, 2: … それ以外: … } は合った場合を一つだけ実行し、続きません |
よくある間違い
1 < x < 10 のようにつなげて書いたJavaScript · C · C++ · Craykon
let x = 50;
console.log(1 < x < 10);→ true — (1 < x) が先に true になり、true < 10 が真
1 < x && x < 10 と分けて書きます。
数学のようにつなげられるのは Python だけです(TypeScript・Java・C# はコンパイルエラー)。
== の代わりに = を書いたC · C++ · JavaScript · TypeScript
if (x = 5) {
printf("五");
}→ x に 5 が入り、条件は常に真になります
比較は ==。
Java・C#・Python・Craykon はこのミスをエラーで教えてくれます。
switch で break を忘れたC · C++ · Java · JavaScript
switch (n) {
case 1: puts("一");
case 2: puts("二");
}→ n が 1 だと「一」と「二」の両方が出ます
case ごとに break;。
C# はコンパイルエラーで、Craykon の 選択 は最初から続かないように防ぎます。
言語ごとの違い
JavaScript・TypeScript で等しさを比べるときは
Craykon の
JavaScript・TypeScript で等しさを比べるときは
=== を使います。== は型を変換して比べるので、"1" == 1 も "" == 0 も true です。Craykon の
== は === と同じく厳密で、"1" == 1 は 偽 です。