ホームページ  >  記事  >  Java  >  Java 21 の Switch を使用したパターン マッチングの威力を探る

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

WBOY
WBOYオリジナル
2024-08-15 06:43:32937ブラウズ

Exploring the Power of Pattern Matching with Switch in Java 21

スイッチを使用したパターン マッチングの一般的な使用例の 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 ステートメントでさまざまな種類のデータを処理する、より簡潔で読みやすい方法が可能になります。

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

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

public void move(Direction 方向) {
スイッチ (方向) {
ケース NORTH、NORTH_WEST、NORTH_EAST -> moveUp();
ケース EAST、EAST_NORTH、EAST_SOUTH -> moveRight();
南、南東、南西 -> の場合moveDown();
WEST、WEST_NORTH、WEST_SOUTH の場合 -> moveLeft();
}
}

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

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

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

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

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

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

以上がJava 21 の Switch を使用したパターン マッチングの威力を探るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。