まず、プログラミングの巨匠ロバート C. マーティンの傑作「クリーン コード」からの一文を見てみましょう:
この文は、コードにコメントが必要である場合、コードの書き方が不十分である可能性が高いと単純に理解できます。同様に、問題やアルゴリズムについての考えをコメントなしでコードで完全に表現できない場合、これは失敗の兆候です。これは最終的に、コードには表示されていない考え方の部分を明確にするためにコメントを使用する必要があることを意味します。優れたコードはコメントなしで誰でも理解できます。優れたコーディング スタイルには、コードの問題を理解するのに役立つすべての情報が含まれています。
プログラミング理論には「自己記述型ソースコード」という概念があります。コードの一部の場合、一般的な自己記述メカニズムは、変数、メソッド、オブジェクトに対して厳密に定義されていない命名規則に従うことです。この主な目的は、ソース コードを読みやすく理解しやすくすることです。したがって、保守と拡張が容易になります。
この記事では、「悪いコード」とは何か、「明確なコード」とは何かを説明するためにいくつかの例を示します
名前は意図を明らかにする必要があります
名前をどうするかはプログラミングにおいて常に難しい問題です。プログラマの中には、自分だけが理解できるように名前を簡略化、短縮、または暗号化することを好む人もいます。以下にいくつかの例を見てみましょう:
不正なコード: int d;//日数 int ds;int dsm;int faid; 「d」にはあらゆる意味があります。作者はコメントを使用して意図を示しますが、それをコードで表現することは選択しません。また、「faid」はIDと誤解されやすいです。
明確なコード: int elapsedTimeInDays;int daysSinceCreation;int daysSinceModification;int fileAgeInDays;名前を付けるときは誤解された情報を避けてください
間違った情報は、情報がないより悪いです。プログラマーの中には、重要な情報を「隠す」ことを好む人もおり、誤解を招くコードを作成する場合もあります。
不正なコード: Customer[] customerList;テーブル theTable; 変数「customerList」は実際にはリストではありません。これは単純な配列 (または顧客のコレクション) です。さらに、「theTable」は Table 型のオブジェクトであり (IDE を使用するとその型を簡単に確認できます)、「the」という単語は不必要に邪魔になります。
クリアコード: Customer[]顧客;テーブルテーブル;名前は適切な長さでなければなりません
高級プログラミング言語では、通常、変数名の長さに制限はありません。変数名は、ほぼ任意の長さにすることができます。ただし、これによりコードが混乱する可能性もあります。
不正なコード: var theCustomersListWithAllCustomersIncludedWithoutFilter;var list; 良い名前には、コンセプトを表現するために必要な単語のみが含まれている必要があります。不要な単語があると、名前が長くなり、わかりにくくなります。コンテキスト内で完全な意味を表現できる限り、名前は短い方が良いです (注文のコンテキストでは、「list」よりも「customersInOrder」の方が適しています)。
クリアコード: var allCustomers;var customerInOrder;名前を付けるときはコーディング標準の一貫性を保ち、標準をコードの理解に役立ててください
语 すべてのプログラミング技術 (言語) には、コーディング仕様と呼ばれる独自の「スタイル」があります。他のプログラマーもこれらの規則を知っており、このスタイルで記述しているため、プログラマーはコードを記述するときにこれらの規則に従う必要があります。明らかな仕様のない悪いコードの例を見てみましょう。次のコードは、よく知られている「コーディング規約」(パスカルケース、キャメルケース、ハンガリー語の規約など)に従っていません。さらに悪いことに、これには無意味なブール変数「change」が含まれています。これは動詞 (アクションを説明するために使用されます) ですが、ここでの bool 値は状態を説明するものであるため、ここでは形容詞の方が適切です。 不正なコード: const int maxcount = 1bool Change = truepublic Interface Repositoryprivate string NAMEpublic class personaddressvoid getallorders()
コードの一部、その一部を見るだけで、その名前付け方法を見るだけで、それがどのような型であるかを直接理解できるはずです。 例: 「_name」が表示されている場合、それがプライベート変数であることがわかります。例外なく、あらゆる場所でこの表現を活用する必要があります。 明確なコード: const int MAXCOUNT = 1bool isChanged = truepublic Interface IRepositoryprivate string _namepublic class PersonAddressvoid GetAllOrders()
ネーミングの際も同じコンセプトを同じ言葉で表現します
コンセプトを定義するのは難しいです。ソフトウェア開発プロセスでは、ビジネス シナリオを分析し、その中のすべての要素の正しい定義を考えるのに多くの時間が費やされます。これらの概念はプログラマーにとって常に頭の痛い問題です。 悪いコード: //1. void LoadSingleData ()void FetchDataFiltered ()Void GetAllData ()//2. void SetDataToView ();void SetObjectValue (int value)
まず第一に: コードの作成者は、「データを取得する」という概念を表現しようとして、「ロード」、「取得」、「取得」という複数の単語を使用しました。コンセプトは (同じ文脈内で) たった 1 つの単語で表現できます。 2つ目: 「設定」という言葉は2つの概念で使用されます。1つ目は「ビューへのデータのロード」、2つ目は「オブジェクトの値の設定」です。これらは 2 つの異なる概念であるため、異なる言葉を使用する必要があります。 クリアコード:
//1. void GetSingleData ()void GetDataFiltered ()Void GetAllData ()//2. void LoadDataToView ();void SetObjectValue (int 値)
名前を付けるときは、ビジネス分野に関連した単語を使用してください
プログラマーが書いたすべてのコードは、ビジネスドメインのシナリオと論理的に結びついています。問題に関係するすべての人がよりよく理解できるように、プログラムはドメインのコンテキストで意味のある名前を使用する必要があります。 不正なコード:
public class EntitiesRelation{Entity o1;Entity o2;} ドメインに固有のコードを記述するときは、ドメイン関連の名前の使用を常に考慮する必要があります。将来、別の人 (プログラマーだけでなく、おそらくテスター) があなたのコードに触れるとき、その人はこのビジネス ドメインであなたのコードが何を意味するのかを簡単に理解できるようになります (ビジネス ロジックの知識は必要ありません)。最初にビジネス上の問題を考慮し、次にそれを解決する方法を検討する必要があります。
クリアコード:
パブリック クラス ProductWithCategory{エンティティ製品;エンティティ カテゴリ;} 名前を付けるときは、特定の文脈で意味のある単語を使用してください
コード内の名前には独自のコンテキストがあります。コンテキストは追加情報を提供するため、名前を理解する上で重要です。典型的な「アドレス」コンテキストを見てみましょう:
間違ったコード:
文字列 addressCity;string addressHomeNumber;string addressPostCode; ほとんどの場合、「郵便番号」は通常、住所の一部です (郵便番号を特別に処理するアプリケーションを開発している場合を除いて) 郵便番号を単独で使用することはできません。したがって、「郵便番号」の前に「住所」を追加する必要はありません。さらに重要なのは、このすべての情報にはコンテキスト、名前空間、およびクラスがあるということです。
オブジェクト指向プログラミングでは、このアドレス情報を表現するには「Address」クラスを使う必要があります。
クリアコード: class Address{string city;string homeNumber;string postCode;}命名方法まとめ
要約すると、プログラマは次のことを行う必要があります:
· 名前付けは概念を表現することです
· 名前には必要な単語のみを含める必要があります
。 ・ コーディング規約はコードを理解するのに役立ちますので、それを使用する必要があります
・ 名前を混合しないでください
・ 名前はビジネスドメインで意味があり、コンテキストでも意味のあるものでなければなりません
添付ファイルやテキストのアップロードの制限により、一部の画像やテキストが表示されない場合があります。詳細については、http://mp.weixin.qq.com/s?__biz=MzI5ODI3NzY2MA==&mid=100000563&idx=2&sn= を参照してください。 528dc490ec0d0a230b8503d71d9a3e63#rd 誰でもコミュニケーションを取ることができます。 下のQRコードをスキャンすると、素敵な記事がどんどん増えていきます! (QR コードをスキャンしてフォローすると、予期せぬサプライズが待っています!!) WeChat サブスクリプション アカウント (uniguytech100) とサービス アカウント (uniguytech) をフォローして、より多くの優れた記事を入手してください。 [Everyone Technology Network Discussion QQ Group] (グループ番号: 256175955) への参加も大歓迎です。自己紹介に注目してください。一緒にそれについて話しましょう! |