開発標準のPHPプログラムコード命名規則

WBOY
リリース: 2016-06-20 13:01:56
オリジナル
850 人が閲覧しました

コード内の命名規則: 間違った比較と正しい比較

プログラミング初心者は、プログラミング言語、構文、テクニック、プログラミング ツールの使用法を学ぶのに常に多くの時間を費やします。彼らは、これらの技術スキルを習得すれば、優れたプログラマーになれると信じています。ただし、コンピューター プログラミングの目的は、これらのテクノロジやツールを習得することではなく、特定の分野における特定の問題に対する解決策を作成することであり、プログラマーはこれらを達成するために協力します。したがって、コードを通じて他の人があなたの意図を理解できるように、自分の考えをコードで正確に表現できることが非常に重要です。

まず、プログラミングの巨匠、ロバート C. マーティンの傑作「クリーン コード」からの一文を見てみましょう。

「コメントの目的は、コード自体の表現の不足を補うことです。」 この文は単純に次のように理解できます。

コードにコメントが必要な場合は、コードの書き方が不十分である可能性が高くなります。

同様に、問題やアルゴリズムについての考えをコメントなしでコードで完全に表現できない場合、これは失敗の兆候です。これは最終的に、コードには表示されていない考え方の部分を明確にするためにコメントを使用する必要があることを意味します。 優れたコードは、コメントなしで誰でも理解できます。 優れたコーディング スタイルには、コードの問題を理解するのに役立つすべての情報が含まれています。 プログラミング理論には、「自己記述型ソースコード」と呼ばれる概念があります。コードの一部の場合、一般的な自己記述メカニズムは、変数、メソッド、オブジェクトに対して厳密に定義されていない命名規則に従うことです。この主な目的は、ソース コードを読みやすく理解しやすくすることです。したがって、保守と拡張が容易になります。

この記事では、「悪いコード」とは何か、「明確なコード」とは何かを説明するためにいくつかの例を示します

名前は意図を明らかにする必要があります

名前をどう付けるかは、プログラミングにおいて常に難しい問題です。プログラマの中には、自分だけが理解できるように名前を簡略化、短縮、または暗号化することを好む人もいます。以下にいくつかの例を見てみましょう:

不正なコード:

「d」にはあらゆる意味があります。作者はコメントを使用して意図を示しますが、それをコードで表現することは選択しません。また、「faid」はIDと誤解されやすいです。
int d;
// 天数
int ds;
int dsm;
int faid;
ログイン後にコピー

クリアコード:

命名時の誤解を避けるための情報
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
ログイン後にコピー

間違った情報は、情報がないより悪いです。プログラマーの中には、重要な情報を「隠す」ことを好む人もおり、誤解を招くコードを作成する場合もあります。

不正なコード:

変数「customerList」は実際にはリストではありません。これはプレーンな配列 (またはクライアントのコレクション) です。さらに、「theTable」は Table 型のオブジェクトであり (IDE を使用するとその型を簡単に確認できます)、「the」という単語は不必要に邪魔になります。
Customer[] customerList;
Table theTable;
ログイン後にコピー

クリアコード:

名前は適切な長さでなければなりません
Customer[] customers;
Table customers;
ログイン後にコピー

高級プログラミング言語では、通常、変数名の長さの制限はそれほど厳しくありません。変数名は、ほぼ任意の長さにすることができます。ただし、これによりコードが混乱する可能性もあります。

不正なコード:

良い名前には、コンセプトを表現するために必要な単語だけが含まれている必要があります。不要な単語があると、名前が長くなり、わかりにくくなります。コンテキスト内で完全な意味を表現できる限り、名前は短い方が良いです (注文のコンテキストでは、「list」よりも「customersInOrder」の方が適しています)。
var theCustomersListWithAllCustomersIncludedWithoutFilter;
var list;
ログイン後にコピー

クリアコード:

名前を付けるときはコーディング標準の一貫性を保ち、標準をコードの理解に役立ててください
var allCustomers;
var customersInOrder;
ログイン後にコピー

すべてのプログラミング技術 (言語) には、コーディング標準と呼ばれる独自の「スタイル」があります。他のプログラマーもこれらの規則を知っており、このスタイルで記述しているため、プログラマーはコードを記述するときにこれらの規則に従う必要があります。明らかな仕様のない悪いコードの例を見てみましょう。次のコードは、よく知られている「コーディング規約」(パスカルケース、キャメルケース、ハンガリー語の規約など)に従っていません。さらに悪いことに、これには無意味なブール変数「change」が含まれています。これは動詞 (アクションを説明するために使用されます) ですが、ここでの bool 値は状態を説明するものであるため、ここでは形容詞の方が適切です。

不正なコード:

コードの一部、その一部を見るだけで、その名前付け方法を見るだけで、それがどのような型であるかを直接理解できるはずです。
const int maxcount = 1
bool change = true
public interface Repository
private string NAME
public class personaddress
void getallorders()
ログイン後にコピー

例: 「_name」が表示される場合、それがプライベート変数であることがわかります。例外なく、あらゆる場所でこの表現を活用する必要があります。

クリアコード:

名前を付けるときは同じ概念を同じ言葉で表現します
const int MAXCOUNT = 1
bool isChanged = true
public interface IRepository
private string _name
public class PersonAddress
void GetAllOrders()
ログイン後にコピー

概念を定義するのは難しいです。ソフトウェア開発プロセスでは、ビジネス シナリオを分析し、その中のすべての要素の正しい定義を考えるのに多くの時間が費やされます。これらの概念はプログラマーにとって常に頭の痛い問題です。

不正なコード:

最初:
//1.
void LoadSingleData()
void FetchDataFiltered()
Void GetAllData()
//2.
void SetDataToView();
void SetObjectValue(int value)
ログイン後にコピー

代码的作者试图表达“get the data”的概念,他使用了多个词“load”,“getch”,“get”。一个概念只用一个词表达就行了(在同一个场景中)。

第二:

“set”这个词用在了2个概念里:第一是“data loading to view”,第二个是“setting a value of object”。这是两个不同的概念,你应该使用不同的词。

清楚的代码:

//1.
void GetSingleData()
void GetDataFiltered()
Void GetAllData()
//2.
void LoadDataToView();
void SetObjectValue(int value)
ログイン後にコピー

命名时使用跟业务领域相关的词

程序员写的所有代码都是跟业务领域场景逻辑相连的。为了让所有关系到这个问题的人都能更好的理解,程序中应该使用在领域环境中有意义的名称。

不好的代码:

public class EntitiesRelation
{
Entity o1;
Entity o2;
}
ログイン後にコピー

当在编写针对某个领域的代码时,你应该始终考虑使用领域有联系的名称。在将来,当另外一个人(不仅是程序员,也许是测试人员)接触你的代码时,他能轻松的理解这个业务领域里你的代码是什么意思(不需要业务逻辑知识)。你首先考虑的应该是业务问题,之后才是如何解决。

清楚的代码:

public class ProductWithCategory
{
Entity product;
Entity category;
}
ログイン後にコピー

命名时使用在特定环境里有意义的词

代码里名称都有自己的上下文。上下文对于理解一个名称非常重要,因为它能提供额外的信息。让我们来看看一个典型的“地址”上下文:

不好的代码:

string addressCity;
string addressHomeNumber;
string addressPostCode;
ログイン後にコピー

在大多数情况中,“Post Code”通常是地址的一部分,很显然,邮政编码不能单独使用(除非你是在开发一个专门处理邮编的应用)。所以,没有必要在“PostCode”的前面加上“address”。更重要的,所以的这些信息都有一个上下文容环境,一个命名空间,一个类。

在面向对象编程中,这里应该用一个“Address”类来表达这个地址信息。

清楚的代码:

class Address
{
string city;
string homeNumber;
string postCode;
}
ログイン後にコピー

命名方法总结

概述起来,做为一个程序员,你应该:

命名是来表达概念的

注意名称长度,名称里只该含有必要的词语

编码规范有助于理解代码,你应该使用它

名称不要混用

名称在业务领域里要有意义,在上下文里有意义

 


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート