「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java 21 の Switch を使用したパターン マッチングの威力を探る

Java 21 の Switch を使用したパターン マッチングの威力を探る

2024 年 8 月 17 日に公開
ブラウズ:613

Exploring the Power of Pattern Matching with Switch in Java 21

switch を使用したパターン マッチングの一般的な使用例の 1 つは、プログラム内でさまざまな種類のデータを操作する場合です。さまざまなタイプのセンサーを持ち、現在の温度を返す WeatherStation クラスの次の例を考えてみましょう:

`パブリック クラス WeatherStation {

private Sensor sensor;

 public double getCurrentTemperature() {
    return switch (sensor) {
        case TemperatureSensor t -> t.reading();
        case HumiditySensor h -> h.reading() * 0.9; // apply a 10% moisture correction
        default -> 0.0; // in case of an unhandled sensor type, return 0
    };
}

}
`
ここでは、Sensor インターフェイスがセレクター式に使用されており、ケース ラベルが特定の Sensor 実装 (TemperatureSensor と HumiditySensor) に基づくパターンを使用していることがわかります。これにより、switch ステートメントでさまざまなタイプのデータを処理する、より簡潔で読みやすい方法が可能になります。

スイッチを使用したパターン マッチングのもう 1 つの使用例は、列挙型を処理する場合です。パターン マッチングが導入される前は、列挙型は case ラベルの定数としてのみ使用でき、switch ステートメントでテストできる値が制限されていました。新しい機能により、列挙型を大文字と小文字のラベルで修飾できるようになり、より正確かつ柔軟なマッチングが可能になりました。

パブリック列挙型の方向 {
北、
東、
南、
西
}

public void move(Direction 方向) {
スイッチ (方向) {
case NORTH,NORTH_WEST,NORTH_EAST -> moveUp();
case EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
case SOUTH,SOUTH_EAST,SOUTH_WEST -> moveDown();
WEST,WEST_NORTH,WEST_SOUTH の場合 -> moveLeft();
}
}

ここで、move() メソッドは switch ステートメントを使用して、指定された Direction enum 値に基づいてさまざまな方向への移動を簡単に処理します。パターン マッチングを使用すると、NORTH_WEST や EAST_SOUTH などの方向の組み合わせも指定できるため、コードがより堅牢かつ柔軟になります。

最後に、パターン マッチングが switch ステートメントのエラー処理にどのように役立つかの例を見てみましょう。従来のスイッチでは、セレクター式がいずれの case ラベルにも一致しない場合、デフォルトの case を使用してエラーを処理できます。ただし、複数のケースラベルを扱う場合、これは面倒な作業となり、コードの重複が発生する可能性があります。パターン マッチングでは、どの case ラベル パターンもセレクター式に一致しない場合に例外がスローされ、エラー処理がより均一になり、エラーが発生しにくくなります。

public String getPlanetaryObject(PlanetaryBody 本体) {
リターンスイッチ(本体) {
case 惑星 p && p.getMass() > 1e29 -> p.getName() " はガス巨人です";
case 惑星 p && p.getMass() > 1e23 -> p.getName() " は岩石惑星です";
case Star s && s.getLuminosity() > 1e32 -> s.getName() " は明るい星です";
case Star s && s.getLuminosity() s.getName() " は暗い星です";
デフォルト -> throw new MatchException("惑星天体のタイプを決定できません: " body.getName());
};
}

この例では、getPlanetaryObject() メソッドは、惑星または星のいずれかである PlanetaryBody オブジェクトを受け取ります。ケースのラベルに使用されるパターンでは、惑星の質量や星の明るさなどの追加の条件が考慮されています。どのパターンも一致しない場合は、MatchException がスローされ、エラー処理の一貫性が高まり、潜在的なエラーが防止されます。

結論
スイッチのパターン マッチングは、最近 Java に導入された最も重要な機能の 1 つです。これにより、より柔軟で簡潔な制御フロー構造が可能になります。

Java SE 21 Professional Certified Developer 認定資格を取得して、Java スキルをアップグレードしましょう。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/myexamcloud/exploring-the-power-of-pattern-matching-with-switch-in-java-21-506a?1 侵害がある場合は、study_golang にご連絡ください。 @163.com 削除
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3