それは、コーヒーがちょうどよく、コードがカップに淹れたコーヒーと同じくらいスムーズに流れているように見えた朝のことでした。あなたはデスクに座り、プロジェクトの特に厄介な部分、つまり何日も苦労させられていたモジュールに取り組む準備をしていました。問題はロジックの複雑さではなく、むしろ、何行も続くように見えるぎこちない繰り返しコードでした。
あなたはため息をつき、椅子にもたれかかりました。 もっと良い方法があるはずです、あなたはそう思いました。
あなたの心は、昨夜遅くまで起きていた虫のことを思い出しました。これは、潜伏性があり追跡が困難なバグの 1 つであり、広範に宣言された変数によって引き起こされるエラーでした。原因は、数週間前に作成した if else ステートメントであり、必要になった後も外部スコープに変数が残っていたことが原因でした。
Object obj = 123; String result; if (obj instanceof String) { result = (String) obj; } else { result = obj.toString(); } System.out.println(result);
コードは確かに機能しました。しかし、何か気になることがありました。変数の結果は、以前のフローからの幽霊のようにより広い範囲にぶら下がっており、混乱やさらに悪いことに別のバグを引き起こす可能性がありました。
しかし、Java 17 について読んだことを思い出しました。フロー スコープ と呼ばれる小さな機能です。それは、一見小さな変化に見えても、大きな変化をもたらす可能性のある変化の 1 つでした。フロースコープを使用すると、変数を必要な特定のブロックに限定して、コードの残りの部分をクリーンかつ集中的に保つことができます。
あなたは試してみることにしました。
Object obj = 123; if (obj instanceof String str) { System.out.println(str); } else { System.out.println(obj.toString()); }
まるで重荷が取れたかのようでした。コードはよりタイトで、よりエレガントになりました。不必要な変数がなくなり、完全に理にかなったフローが残りました。思わず微笑みました。小さな勝利ではありましたが、それでも満足のいく勝利でした。
成功に勇気づけられて、あなたは、悩まされていたコードの別のセクションに目を向けました。これは古典的なシナリオでした。オブジェクトは String、Integer、Double など何でもあり、それに対して何かを行う前にその型を確認する必要がありました。
古い方法は不格好で、良い部分に到達するために複数の手順が必要でした:
Object obj = "Hello, World!"; if (obj instanceof String) { String str = (String) obj; System.out.println(str.toUpperCase()); }
それを見てあなたはうめきました。確かに、それはうまくいきましたが、なぜタイプを確認してからキャストする必要があったのでしょうか?もっとシンプルにできないのでしょう?
そこで、Java 17 のもう 1 つの小さな宝石を思い出しました。instanceof のパターン マッチング これは単なる構文糖衣ではありません。これは、コードを合理化し、より読みやすく、より少ないコードを作成する方法でした。エラーが発生しやすい
あなたはコードをリファクタリングしました。違いを確認したいと考えています:
Object obj = "Hello, World!"; if (obj instanceof String str) { System.out.println(str.toUpperCase()); }
効果はすぐに現れました。コードはよりクリーンで簡潔になりました。型チェックとキャストは 1 つのものになり、すべて 1 行になりました。あたかもコードがユーザーの言語を話しているかのようで、余分なノイズは一切なく、ユーザーが望んでいることを正確に実行します。
日が経つにつれて、これらの機能をますます使用し、熟練した職人のようにコードに組み込んでいることに気づきました。あなたは、これらの小さな変化、つまり、各部分の合計よりも大きなものを生み出すために協力する方法の美しさに気づき始めました。
午後までに、あなたはいつも少しぎこちないと感じていた古いコードのリファクタリングに没頭していました。これは、混合型の配列を処理するループであり、各要素には独自の特別な処理が必要でした。以前は、コードは冗長で、各型チェックの後に明示的なキャストが続いていました。
しかし、Java 17 のフロー スコープとパターン マッチングにより、より良い方法が見つかりました。
public class PatternMatchingDemo { public static void main(String[] args) { Object[] elements = {"Java", 17, 3.14, "Pattern Matching"}; for (Object element : elements) { if (element instanceof String str) { System.out.println("String: " + str.toUpperCase()); } else if (element instanceof Integer i) { System.out.println("Integer: " + (i * 2)); } else if (element instanceof Double d) { System.out.println("Double: " + (d * 2)); } else { System.out.println("Unknown type"); } } } }
コードは合理化され、ロジックの各ブロックは独自のスコープ内に含まれ、変数は特定のフローにきちんと結び付けられました。あなたは、このような小さな変化がどのようにして大きな影響を与えることができるかに驚きました。定型的な繰り返しはなくなり、適切だと感じられる明確さと単純さに置き換えられました。
その日の準備を整えるとき、Java 17 がコードをどれほど変えたかを考えずにはいられませんでした。これらは派手な新機能ではありませんでしたが、それ自体が静かな方法で強力でした。フロー スコープとパターン マッチングは、より効率的であるだけでなく、読みやすく保守しやすいコードを作成するのに役立ちました。
ソフトウェア開発の世界では、小さなことが大きな違いを生むことがよくあります。そして今日、Java 17 の小さなトリックであるフロー スコープとパターン マッチングが、コードを 1 行ずつ改善するために必要なものであることがわかりました。
以上が小さな調整の力: Java #s のフロー スコープとパターン マッチングが明らかにの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。