Java 21 のスイッチのパターン マッチング

王林
リリース: 2024-07-19 00:46:41
オリジナル
293 人が閲覧しました

Pattern Matching for Switch in Java 21

パターン マッチングは Java で非常に期待されている機能であり、言語にさらなるパワーと柔軟性をもたらします。 Java 21 では switch ステートメントのパターン マッチングが導入されており、これによりコードが簡素化され、ボイラープレートが削減されます。この新機能がどのように機能し、なぜ有益なのかを見てみましょう。

Switchのパターンマッチングとは何ですか?

スイッチのパターン マッチングを使用すると、値をパターンと照合できるため、コードがより表現力豊かで読みやすくなります。複数の if-else ステートメントや複雑な switch ケースを使用する代わりに、より簡潔で保守しやすいコードを作成できるようになりました。

スイッチのパターン マッチングの利点

  • 可読性: コードを読みやすく、理解しやすくします。
  • 簡潔性: 定型コードの量を削減します。
  • 型安全性: コンパイル時の型チェックを強化します。

スイッチのパターンマッチングの使用方法

スイッチのパターン マッチングがどのように機能するかを示す簡単な例を次に示します。

static String formatterPatternSwitch(Object obj) {
    return switch (obj) {
        case Integer i -> String.format("int %d", i);
        case Long l    -> String.format("long %d", l);
        case Double d  -> String.format("double %f", d);
        case String s  -> String.format("String %s", s);
        default        -> obj.toString();
    };
}
ログイン後にコピー

この例では、formatterPatternSwitch はオブジェクトを受け取り、その型に基づいてフォーマットされた文字列を返します。何が起こっているかの内訳は次のとおりです:

  1. Switch 式: switch 式は obj を取得し、それをさまざまなパターンと照合します。
  2. ケースのパターン: 各ケースは、一致するパターンを指定します。
    • Integer i: obj が Integer のインスタンスであるかどうかに一致し、値を i にバインドします。
    • Long l: obj が Long のインスタンスであるかどうかに一致し、値を l にバインドします。
    • Double d: obj が Double のインスタンスであるかどうかに一致し、値を d にバインドします。
    • String s: obj が String のインスタンスであるかどうかに一致し、値を s にバインドします。
  3. デフォルトのケース: デフォルトのケースは、指定されたパターンに一致しない値を処理し、obj.toString() を使用して文字列に変換します。

詳細な例を挙げてみましょう: さまざまな形状の処理

さまざまな形状を処理し、その面積を計算する必要があるシナリオを考えてみましょう。スイッチのパターン マッチングによってコードが簡素化される方法は次のとおりです:

abstract sealed class Shape permits Circle, Square, Rectangle {}

final class Circle extends Shape {
    double radius;
    Circle(double radius) { this.radius = radius; }
}

final class Square extends Shape {
    double side;
    Square(double side) { this.side = side; }
}

final class Rectangle extends Shape {
    double length, width;
    Rectangle(double length, double width) { this.length = length; this.width = width; }
}

static double calculateArea(Shape shape) {
    return switch (shape) {
        case Circle c -> Math.PI * c.radius * c.radius;
        case Square s -> s.side * s.side;
        case Rectangle r -> r.length * r.width;
    };
}
ログイン後にコピー

この例では:

  1. Sealed クラス: Shape はシールド クラスであり、CircleSquare、および Rectangle のみがそれを拡張できます。
  2. スイッチ式: calculateArea メソッドは、スイッチ式を使用して shape のタイプを決定し、その面積を計算します。
  3. ケース パターン: 各ケースは特定の形状タイプに一致し、対応する面積計算を実行します。
    • Circle c: shapeCircle である場合に一致し、それを c にバインドします。c.radius を使用して面積を計算します。
    • Square s: shapeSquare である場合に一致し、それを s にバインドします。s.side を使用して面積を計算します。
    • Rectangle r: shapeRectangle である場合に一致し、それを r にバインドします。r.length を使用して面積を計算します。 および r.width.

結論

Java 21 のスイッチのパターン マッチングは、コードの読みやすさ、簡潔さ、タイプ セーフを強化する強力な機能です。 switch ステートメントで値をパターンと直接照合できるため、多くの一般的なコーディング タスクが簡素化されます。 Java 開発者は、よりクリーンで保守しやすいコードを作成するために、この機能をぜひ検討して採用する必要があります。

ニーズに合わせてこのセクションを自由に変更または拡張してください。

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

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!