0Pricing
Java Academy · レッスン

yieldキーワード

switchブロックから値を生成します

「yieldキーワード」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

1 行では足りない場合

case 1 -> 42; のようなアロー分岐では、値を直接返します。しかし、値を生成する前に複数の文を実行する必要がある場合はどうすればよいでしょうか。そのときに使うのが yield です。

yield キーワード

ブロック分岐 { } の中では、yield キーワードを使って switch 式が生成する値を指定します。return に似ていますが、switch 分岐のためのものだと考えてください。

public class Main {
    public static void main(String[] args) {
        int n = 3;
        int result = switch (n) {
            case 3 -> {
                int squared = n * n;
                yield squared;
            }
            default -> 0;
        };
        System.out.println(result);
    }
}

ブロック内の yield

yield を呼び出す前に、ブロック内で任意の処理を実行できます。ブロックの最後には、値を yield する処理を記述します。

public class Main {
    public static void main(String[] args) {
        int amount = 250;
        String label = switch (amount / 100) {
            case 0 -> "small";
            default -> {
                System.out.println("Computing label...");
                yield "large";
            }
        };
        System.out.println(label);
    }
}

アロー分岐とブロック分岐を組み合わせる

1 つの switch 式の中で、単純なアロー分岐と yield を使うブロック分岐を組み合わせることができます。それぞれの case に合った形式を使ってください。

public class Main {
    public static void main(String[] args) {
        int code = 2;
        String msg = switch (code) {
            case 1 -> "One";
            case 2 -> {
                String s = "T" + "wo";
                yield s;
            }
            default -> "Other";
        };
        System.out.println(msg);
    }
}

yield の前に計算する

ブロック分岐は、値の計算が必要な場合に適しています。ここでは、合計を yield する前に各桁の数字を合計しています。

public class Main {
    public static void main(String[] args) {
        int category = 1;
        int value = switch (category) {
            case 1 -> {
                int sum = 0;
                for (int i = 1; i <= 5; i++) {
                    sum += i;
                }
                yield sum;
            }
            default -> 0;
        };
        System.out.println(value);
    }
}

yield と return の違い

yield は switch 分岐だけを終了し、値を返します。return を使うとメソッド全体が終了します。switch 式のブロック内では、yield を使ってください。

public class Main {
    static int classify(int n) {
        int rank = switch (n) {
            case 0 -> 0;
            default -> {
                yield (n > 0) ? 1 : -1;
            }
        };
        return rank;
    }
    public static void main(String[] args) {
        System.out.println(classify(-7));
    }
}

古いコロン形式での yield

コロン形式の switch も、break の代わりに yield を使って式にできます。各ラベルのセクションで値を yield します。

public class Main {
    public static void main(String[] args) {
        int day = 2;
        String name = switch (day) {
            case 1: yield "Mon";
            case 2: yield "Tue";
            default: yield "Other";
        };
        System.out.println(name);
    }
}

条件付き yield

ブロック分岐には if の処理を含め、条件によって異なる値を yield できます。すべての経路で値を yield する必要があります。

public class Main {
    public static void main(String[] args) {
        int temp = 30;
        String advice = switch (temp / 10) {
            case 3 -> {
                if (temp > 35) {
                    yield "Very hot";
                }
                yield "Warm";
            }
            default -> "Mild";
        };
        System.out.println(advice);
    }
}

オブジェクトを yield する

yield はオブジェクトを含む任意の型で使用できます。ここでは、分岐で StringBuilder の結果を作成し、String として yield しています。

public class Main {
    public static void main(String[] args) {
        int count = 3;
        String stars = switch (count) {
            case 0 -> "";
            default -> {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < count; i++) {
                    sb.append("*");
                }
                yield sb.toString();
            }
        };
        System.out.println(stars);
    }
}

読みやすくするコツ

1 つの値だけで済む場合は、単純なアロー分岐を優先してください。分岐に本当に追加の文が必要な場合だけ、ブロックと yield を使います。これにより、switch をすっきりと保てます。

public class Main {
    public static void main(String[] args) {
        int level = 2;
        int xp = switch (level) {
            case 1 -> 100;
            case 2 -> {
                int base = 100;
                yield base * 2;
            }
            default -> 0;
        };
        System.out.println(xp);
    }
}

完全な例

ここまでの内容を組み合わせて、アロー分岐とブロック分岐の両方を使う HTTP 形式のステータスマッパーを作成します。

public class Main {
    public static void main(String[] args) {
        int status = 404;
        String message = switch (status / 100) {
            case 2 -> "Success";
            case 4 -> {
                String base = "Client error ";
                yield base + status;
            }
            case 5 -> "Server error";
            default -> "Unknown";
        };
        System.out.println(message);
    }
}

確認問題

複数の文を含む switch 式の分岐内で、結果の値を指定するキーワードはどれですか。

まとめ

yield キーワードについて学びました。

  • yield はブロック分岐から値を生成する
  • return に似ているが、switch 分岐だけを対象とする
  • アロー分岐とブロック分岐を自由に組み合わせられる
  • ブロック内のすべてのコード経路で yield が必要
  • 追加の文が必要な場合だけブロックを使う

よくある質問

「yieldキーワード」レッスンは無料ですか?

はい。「yieldキーワード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「yieldキーワード」で何を学びますか?

switchブロックから値を生成します ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「yieldキーワード」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 矢印形式のswitch
  2. 式としてのswitch
  3. yieldキーワード
  4. 複数ラベルのcase
← Java Academyに戻る