『コードクリーンの道』ノート1を読む
1867 ワード
『コードクリーンの道』ノート1を読む
一、関数について(1)
1.関数はできるだけ短くしなければならない(コードの行数は20行を超えてはならず、最大1画面の長さを超えない).各関数は1つのことしかできず、同じレベルのことしかできません(たとえば、印刷出力のコードとデータ処理のコードは同じ関数に現れるべきではありません)
複数の関数をどのように直列に接続しますか?
各関数にパラメータを渡し、大きな関数に直接関連するコードを書くのではなく、大きな関数で各小さな関数を呼び出します.//
int a,b; //
char yunSuanFu //
**************************************
int yunSuan1(int a, int b, char yunSuanFu){
switch(yunSuanFu){
case '+': return a+b;break;
default: reutrn a-b;
}
}
**************************************
/*yunSuan1(); , , 、 , , , , ;*/
**************************************
int jiaFa(int a, int b){
return a+b;
}
int jianFa(int a, int b){
return a-b;
}
**************************************
};
関数が1つしかできないかどうかをどのように判断しますか?
この関数のコードを見て、もっと小さな関数を分割できますか?(パラメータの面倒を気にしないでください.これは後でコードの修正、再構築、機能の追加に良い敷居と貢献があります.)
パラメータ伝達
複数のパラメータが伝達されるのは本当に煩わしいです.関数はパラメータがないほうがいいです.1つはまあまあですが、2つはまあまあです.3つ以上は許容できます.3つ以上は恥ずかしいです.パラメータの順序を覚えるだけでなく、伝達されたパラメータの意味や役割を読むだけでなく、テストもできません.他のプログラマーにとって、あなたが書いたコードを読むには、もっと時間がかかります.一、一つのパラメータについて:1.関数を1つだけ書き換えたと仮定すると、関数名についても慎重に考えてみましょう.たとえば、次のようにします. void writeName(string Name);
void write(string Name);
一つ目は二つ目の関数より意味がはっきりしている.
二、二つのパラメータについて:1.パラメータの順序、たとえば上の演算の関数を区別するために、関数名を変更します.int a_Jia_b (int a, int b){
return a+b;
}
int a_jian_b (int a, int b){
return a-b;
}
2.パラメータはできるだけ少なくしなければならないが、いくつかの正確な意味を持つ関数については、2つのパラメータを使用しなければならない.point(0,0);
point(p);
直角座標系では、最初の関数を2番目よりも使用します.
三、複数のパラメータ1について.クラスを作成してカプセル化することも考えられます.もちろん、チェーンテーブルの各ノードはクラスにカプセル化され、ツリーの各ノードはクラスにカプセル化されます.
2.判断操作だけでなく、複数のパラメータの中で識別パラメータ(bool)をなるべく渡さないことは、関数が1つのことをしているだけではないことを示します(間違っているのか、間違っているのか、実行しているのか・・・、正しいのか・・)
3.複数のパラメータはよく考える
//
int a,b; //
char yunSuanFu //
**************************************
int yunSuan1(int a, int b, char yunSuanFu){
switch(yunSuanFu){
case '+': return a+b;break;
default: reutrn a-b;
}
}
**************************************
/*yunSuan1(); , , 、 , , , , ;*/
**************************************
int jiaFa(int a, int b){
return a+b;
}
int jianFa(int a, int b){
return a-b;
}
**************************************
};
void writeName(string Name);
void write(string Name);
int a_Jia_b (int a, int b){
return a+b;
}
int a_jian_b (int a, int b){
return a-b;
}
point(0,0);
point(p);