質問

これらの2つのコードがありますが、1つは読みやすいですか?

  1. foreach

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
  2. linq

    return risks.Sum(risk => risk.TechnicalPremium);
    
役に立ちましたか?

解決

コードで作業するチームがLinqバージョンが何をするかを知っていて、その内部の仕組みを知っている場合、それはより読みやすくなります。

他のヒント

任意の方法を使用しますが、メソッドでは非表示にします:

return risks.SumTechnicalPremium();

どちらでもない。最初のものはより冗長で、誰もが理解する可能性があります。 2番目の方法は、linqの知識さえあれば、より簡潔で理解しやすいものです。

お住まいの環境に基づいて選択できると思います。

LINQを読むことができる人、LINQの人。

ステップバイステップでコードを解釈する必要がある人(短いインテリセンス/ドキュメントを使用することにより。

linqを使用します。説明が必要と思われる場合は、1行のコメントで対応します。人々がlinqに慣れるにつれて、コメントの必要性はなくなります。

LINQコードは非常に読みやすく、自己文書化されています。

最初のオプションは、より多くの人にとって読みやすいです。 2番目のオプションには、読者がLINQを知っているか、理解している可能性があるという点で、「エントリバリア」があります。簡潔であるため、視聴者がその入り口の壁を越えている方が良いかもしれません。

2番目のオプションはより効率的であるという点で優れていると思います。ただし、何が起こっているのかは明らかではありません(少なくとも私には)。

linqがわからないので、最初に言っておきます。文書化のリスクがあるので、何が起こっているのかを簡単に説明したものを使用します。または、それがわからないかもしれない人々のためのlinqだと言ってください。

その目的を説明するコメントを提供したら、Linqオプションを選択します。

Linqの知識がない場合の最初の方法。開発者は誰でも最初のドキュメントを読んで理解できます。

ここでは読みやすさの問題はありません。 SumをクリックしてF1を押します。

勝利のためのリンク。

各言語には、そのようなことをコーディングするための最善の方法に関する規則があるため、その言語を定期的に使用する人々にとって最も読みやすいものは普遍的ではありません。 Javaまたは通常のC#プログラマーの場合、最初のオプションの方が読みやすいです。 LINQまたは関数型プログラミングに慣れている人にとっては、2番目の方が読みやすくなります。

c#がわからないが、2番目の選択肢はずっときれいに見え、それが何をするのか理解できました(最初のバージョンでいくつかの推測とクロスチェックを行いました)。おそらく機能的な背景が原因です。しかし、最初は4(!)の場所でtechnicalPremiumを探す必要があります。 2番目の方法は、コードを読んでいるだけの場合ははるかに短く、理解しやすいです。

または

decimal technicalPremium = 0;

foreach(リスクのリスクリスク)technicalPremium = technicalPremium + risk.TechnicalPremium;

return technicalPremium;

「Linqがわからない場合」という最初のものが好きだという人がいます。ええ、C#がわからなければ最初の1つは読めません。これは「どちらの方が読みやすいか」という問題ではありませんが、「どの言語機能を使いやすいですか?」

最初に、誰もが嫌いな言語/フレームワーク/ツールセットの部分についてチームと会話し、制限なしで宣言します。それ以外はすべて標準語彙の一部とみなされ、全員が流fluentであることが期待されます。このリストは、コーディング標準ドキュメントの" 変更可能な値型を作成しない"および" 非公開の些細なプロパティに煩わされないメンバー"。

Linqが「除外」にない限り、リストの2番目の例は、最初の例よりも far 読みやすいです。どうして?読者が解読するメカニズムを単に提示するのではなく、コードの意図を宣言するからです。

「誰でも」が読みやすいようにすることが目標の場合それはあなたの後に来るかもしれません、それからforeachを使用してください。 「より読みやすい」と解釈します言語の基礎の経験がある人なら誰でも理解できるはずです。 linqに不慣れで、VS2005以前をまだ使用している人にとっては、linq構文はわかりにくいでしょう。

最初のコードは間違いなく読みやすく、少なくとも変数riskの名前を変更してクラスとは異なる名前にすると、さらに読みやすくなります。おそらく配列リスクの名前を変更した方が良いでしょう。

私は、Linqがより広く採用されるようになるにつれて、2番目のものが容易に理解されると言う人々に同意します。確かにもっと簡潔です。

ただし、デバッグの容易さには懸念があります。 foreachのコードをステップスルーして、各パスで何をしているかを正確に確認する方がはるかに簡単に思えます。

「読みやすい」の意味に依存すると思います。最初の例は、プログラムロジックを明確に示しており、プログラミングのバックグラウンドを持つ人なら誰でも理解できるはずです。

2番目の例は、コンテキストに基づいてより直感的です(つまり、配列(または他のコレクション型)を取得し、その配列の各要素でSumという名前のメソッドを実行しています)。 2番目の例があまり明確にならない唯一の場所は、実際のラムダ式自体です。特に、ラムダの経験がなかったり、関数プログラミングの経験がある人にとっては。

.NETプログラミングでラムダが普及するにつれて、問題は少なくなると思います。現状では、.NETでラムダ式を使用する方法の基本を理解するための非常に小さな学習曲線があると思います。

間違いなく、2番目。加算のような単純なことを行うために、このような大きなコードブロックを用意する必要はありません。また、LINQが何であるかはわかりませんが、完全に読みやすいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top