253 測定値

Refactoring 025 - Decompose Regular Expressions (レイファクタリング025)

Maximiliano Contieri5m2025/03/31
Read on Terminal Reader

長すぎる; 読むには

複雑な検証正規表現を小さな部分に分割して、各部分を個別にテストし、正確なエラーを報告できます。
featured image - Refactoring 025 - Decompose Regular Expressions (レイファクタリング025)
Maximiliano Contieri HackerNoon profile picture
0-item

定期的な表現をテスト可能かつ理解可能にする

Make Regular Expressions Testable and Understandable

TL;DR:複雑な検証レジェックスを小さい部分に分割して、個別に各部品をテストし、正確なエラーを報告できます。

TL;DR:複雑な検証レジェックスを小さなパーツに分解して、個別に各パーツをテストし、正確なエラーを報告できます。

問題解決

トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ >
  • Hard-to-test 普通の表現
  • 通常の表現
  • 不明確なエラーレポート
  • 悪夢の解消
  • メンテナンスの課題
  • Too 長い行と方法
  • 長い行と方法
  • 不適切な表現
  • トップページ
  • トップページ
  • エラー隔離
  • 知識シロス
  • 古いコメント
  • 古いコメント
  • エラーなしの共感エラーなし

    Related Code Smells

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvii

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvii

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xx-we-have-reached-100

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xx-we-have-reached-100

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ix-7rr33ol

    https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ix-7rr33ol

    ステップ

    1. REGEXを解析してその論理的構成要素を識別します。
    2. REGEXをそれぞれの構成要素に対してより小さい、命名されたサブパターンに分割します。
    3. Write unit tests for each sub-pattern to ensure it works correctly.
    4. Combine the tested sub-patterns into the full validation logic.
    5. Refactor the code to provide clear error messages for every failing part.
      1. regexを分析してその論理的構成要素を識別する。
      2. regexをそれぞれのコンポーネントの名前を付けた小さいサブパターンに分割します。
      3. Write ユニットテスト for each sub-pattern to ensure it works correctly.
      4. 単位テスト
      5. テストされたサブパターンを完全な検証論理に組み合わせる。
      6. Refactor the code to provide clear error messages for each failing part.
      7. すべてのエラーメッセージを提供するためにコードを再現します。

        サンプルコード

        機能 validateURL(url) { const urlRegex = /^(https?:\/\//)([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/.*)?$/; // Criptic and untesteable return urlRegex.test(url); } 
        機能 validateURL(url) { const urlRegex = /^(https?:\/\//)([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/.*)?$/; // Criptic and untesteable return urlRegex.test(url); }

        トップページ > トップページ > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト >トップページ > トップページ > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト > テスト >

        タイプ

      8. [x]セミ自動
      9. [x]

        セキュリティ ️

        このリファクタリングは、注意深く手順に従って安全です。

        各コンポーネントをテストすると、早期にエラーを発見できます。

        Why is the Code Better? ✨

        The refactored code is better because it improves readability, maintenanceability, and testability.

        リファクター化されたコードは、読み取り、メンテナンス、およびテスト可能性を向上させます。

        regexを小さな部分に分割すると、それぞれの部分が何をしているかを理解しやすくなります。

        Validation が失敗した場合の特定のエラーを報告することもできますので、ユーザーが入力を修正するのに役立ちます。

        This is also a great opportunity to apply the Test-Driven Development technique, gradually increasing complexity by introducing new subparts.

        テストドライブ開発

        How Does it Improve the Bijection? ️

        regexをより小さく、意味のあるコンポーネントに分割することにより、あなたは Real-World要求(例えば、「URLは有効なプロトコルを持たなければならない」)とコードの間のより近いマッピングを作成します。リアルワールド

        これは曖昧さを減らし、コードが問題ドメインを正確に反映することを保証します。

        制限 ⚠️

        このアプローチは、非常に単純なregexパターンにいくつかのオーバーヘッドを追加する可能性がありますが、それらを破壊することは不要です。

        Refactor with AI

        AI ツールを使用して regex コンポーネントの識別に役立つことができます。

        AI に regex のそれぞれの部分が何をしているかを説明するように依頼し、次にそれをより小さいテスト可能なパーツに分解する方法を教えてください。例えば、「この regex は何をしているのですか?」と尋ね、次に「どのようにしてそれを小さなパーツに分割できますか?」と答えます。

        It's 2025, No programmer should write new Regular Expressions anymore.

        普通の表現

        あなたはこの機械的なタスクをAIに残すべきです。

        Suggested Prompt: 1. regex を分析してその論理的構成要素を識別する2. regex をそれぞれの構成要素に対してより小さい、命名されたサブパターンに分割する3.それぞれのサブパターンのユニットテストを書き、正しく機能することを確認する4.テストされたサブパターンを完全な検証論理に組み合わせる5.コードをリファクターして、すべての失敗した部分に対して明確なエラーメッセージを提供する。

        Suggested Prompt: 1. regex を分析してその論理的構成要素を識別する。2. regex をそれぞれの構成要素のためのより小さい、名付けられたサブパターンに分割します。3.各サブパターンのユニットテストを書き、正しく動作するようにします。4.テストされたサブパターンを完全な検証論理に組み合わせます。5.コードをリファクターして、すべての失敗した部分に明確なエラーメッセージを提供します。オオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオオ

        Without Proper Instructions

        With Specific Instructions

        Without Proper Instructions


        適切な指示なし

        With Specific Instructions


        With Specific Instructions

        トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

        トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ >

        トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップトップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ >

        トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ >

        トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップトップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ >

        トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ >

        トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップページ > トップ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

        ジェミニ

        ジェミニ

        ジェミニ

        ジェミニ

        ジェミニ

        ジェミニ

        DeepSeek

        DeepSeek

        DeepSeek

        DeepSeek

        DeepSeek

        DeepSeek

        DeepSeek

        DeepSeek

        Meta AI

        Meta AI

        Meta AI

        Meta AI

        Meta AI

        Meta AI

        Meta AI

        Meta AI

        Qwen

        Qwen

        Qwen

        Qwen

        Qwen

        Qwen

        Qwen

        Qwen

        タグ ️

        • テスト
      10. テスト性
      11. レベル

        トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ > トップ >[x]

        Related Refactorings

        また見る

        クレジット ↓

        イラスト: Gerd Altmann on Pixabay

        エイド・オルトマンPixabay「hr」

        This article is part of the Refactoring Series.

        この記事はリファクターシリーズの一部です。


  • Trending Topics

    blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks