コンテキスト
できれいなコード、35ページ、それは言います
これは、ifステートメント、elseステートメント、whileステートメントなど内のブロックが1行の長さであることを意味します。おそらくその行は関数呼び出しであるべきです。これにより、囲んでいる関数が小さく保たれるだけでなく、ブロック内で呼び出される関数にわかりやすい名前を付けることができるため、ドキュメントの価値も高まります。
私は完全に同意します、それはとても理にかなっています。
後で40ページで、関数の引数について説明します
関数の理想的な引数の数はゼロ(niladic)です。次に1つ(単項)、2つ(2項)が続きます。可能な場合は、3つの引数(3項)を避ける必要があります。3つ以上(ポリアディック)には非常に特別な正当化が必要です。引数は難しいです。彼らは多くの概念的な力を取ります。
私は完全に同意します、それはとても理にかなっています。
問題
しかし、しばしば私は別のリストからリストを作成していることに気づき、2つの悪の1つと一緒に暮らさなければなりません。
ブロック内で2つの行を使用します。1つは物を作成するため、もう1つは結果に追加するためです。
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
Flurp flurp = CreateFlurp(badaBoom);
flurps.Add(flurp);
}
return flurps;
}
または、事物が追加されるリストの関数に引数を追加し、「1つの引数が悪化する」ようにします。
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
CreateFlurpInList(badaBoom, flurps);
}
return flurps;
}
質問
私が見ていない(不利な)利点はありますか?または、特定の状況でそのような利点があります。その場合、決定を下すときに何を探すべきですか?
f(g(x))
あなたのスタイルガイドに対して単純なものがあれば、私はあなたのスタイルガイドを修正することはできません。つまり、sqrt(x*x + y*y)
4行に分割しないでください。そして、それは、2つの(!)内側のネストレベル上の3つの(!)ネストされた部分式です(gasp!)。単一の演算子ステートメントではなく、読みやすさを目標にする必要があります。後で欲しい場合は、アセンブラーという完璧な言語があります。
mov
命令とjmp toStart
最後に1つだけを使用してチューリング完全なコンピューターを作成できます。誰かが実際にそれを行うコンパイラを実際に作成しました:D
rlwimi
PPC での悪名高い命令について語らないこと。(これはRotate Left Word Immediate Mask Insertの略です。)このコマンドは5つ以上のオペランド(2つのレジスターと3つのイミディエート値)を取り、次の操作を実行しました。他の2つの即値オペランドによって制御される1ビットの1回の実行で作成され、他のレジスタオペランドのそのマスクの1ビットに対応するビットは、ローテーションされたレジスタの対応するビットで置き換えられました。非常にクールな指示:-)
flurps.Add(CreateFlurp(badaBoom));
ですか?