絶対的にそう!!
TL;DR: 関数名が不明瞭だと、意図がわからなくなり、読者が混乱してしまいます。説明的で、アクション指向の名前を使用してください。
問題点
- 機能目的が不明瞭
- 認知負荷の増加
- 誤解を招く文脈
- 読みやすさの低下
- 困難なコラボレーション
- 隠された機能
ソリューション
- 行動指向の動詞を使用する
- わかりやすい名前を付ける
- 機能の目的を反映する
- 一般的な用語を避ける
- 意味のある文脈を提供する
- 責任を明確に表現する
- 行動と結果を一致させる
リファクタリング
https://hackernoon.com/improving-the-code-one-line-at-a-time
コンテクスト
一般的な用語で名前が付けられた関数の場合、読者は関数の動作を理解するために実装の詳細を調べる必要があります。
これにより、時間が無駄になり、エラーが発生する可能性が高まります。
クラス名が追加のコンテキストを提供しないスタンドアロン関数を扱う場合、命名はさらに重要になります。
この問題は、「聞くのではなく、伝える」原則に直接関係しています。
呼び出し元に機能を推測させる曖昧な動作を公開する代わりに、命令型の名前は正確なアクションを伝え、コードを調べることなく読者を導きます。
関数に説明的な名前を付けると、不必要な推測がなくなり、この原則に準拠することになります。
サンプルコード
間違っている
public String dateFormatting(Date date) { return new SimpleDateFormat("yyyy-MM-dd").format(date); } public void load() { System.out.println("Loading..."); }
右
public String formatDate(Date date) { return new SimpleDateFormat("yyyy-MM-dd").format(date); } public void loadUserPreferences() { System.out.println("Loading user preferences..."); }
検出
- [x]マニュアル
この臭いは、 do 、 run 、 process 、 loadなどのあいまいな用語を使用している関数名を確認することで検出できます。
自動化されたリンターは、これらのパターンにフラグを立てたり、過度に一般的な名前を持つ関数を強調表示したりできます。
タグ
- ネーミング
レベル
- [x]初心者
なぜ一対一変換が重要なのか
関数名は、その名前と機能の間に明確な1 対 1 の対応を作成する必要があります。
このバイジェクションを破ると、開発者はコンテキストのためにコードの詳細を調べる必要があり、デバッグ、レビュー、拡張が遅くなります。
AI生成
AI ツールは、ドメインを理解せずに一般的な関数名を生成することがあります。
AI を使用する場合は、関数名が説明的でアクション指向である必要があることを指定します。
AI検出
AI モデルは、関数シグネチャを事前定義された命名ベストプラクティスと比較することで、あいまいな名前を検出するのに役立ちます。
AI と手動のコードレビューを組み合わせると、最良の結果が得られます。
ぜひお試しください!
覚えておいてください:AIアシスタントは多くの間違いを犯します
適切な指示がなければ | 具体的な指示 |
---|---|
結論
関数名は単なるラベルではなく、読者との契約です。
曖昧な名前はこの契約を破り、混乱を招きます。
説明的でアクション指向の名前はコミュニケーションを簡素化し、コードの保守と拡張を容易にします。
関係
参照
免責事項
コードスメルは私の意見です。
クレジット
Unsplashのbritishlibraryによる写真
関数名は動詞または動詞句で、意味のあるものにする必要があります。
ロバート・C・マーティン
この記事は CodeSmell シリーズの一部です。