1

私は現在C#を学んでおり、最初から良いコーディングスタイルを身につけたいと思っているので、この点についてプロの皆さんの意見をお聞きしたいと思います.

条件/計算に常に(またはほとんど)ローカル変数を使用する必要がありますか(例2)、またはステートメントを直接使用するのと同じくらい良い/良いですか(例1)

例 1。

if (double.TryParse(stringToParse, out dblValue)) ...

例 2。

bool parseSuccess = double.TryParse(stringToParse, out dblValue);
if (parseSuccess) ...

この例について、あなたの考えや推論を聞くのは興味深いでしょう。

4

7 に答える 7

4

すべてを 1 行にまとめると長くなりすぎたり、複雑になったりする場合は、より冗長なスタイルを使用する必要があります。

変数の名前がコードを理解しやすくする場合は、別の変数も使用する必要があります。

bool mustWait = someCommand.ConflictsWith(otherCommand);
if (mustWait) {
    ...
}

このような場合、さらに読みやすくするために列挙型の使用を検討する必要があります。

于 2012-07-11T22:08:19.340 に答える
1

実稼働コードでは例 1 をよく見かけます。表現がシンプルで論理的に分かりやすいものであれば、スタイルが悪いと思われる方も少なくないと思います。

おそらく、さまざまな好みを持つ多くの人々を見つけるでしょう。:)

于 2012-07-11T22:08:13.037 に答える
1

私が使用しているルールは次のとおりです。すばやく一瞥して、それが何を言っているのかを正確に理解できる場合は、1 行にまとめてください。複雑すぎて他のテキストを読むのと同じくらい速く読めない場合は、ローカル変数を指定してください。ただし、いずれにせよ、非常に長い if ステートメント ヘッダーは必要ありません。なので、長い場合は分割してください。

于 2012-07-11T22:12:52.550 に答える
1

次のようなローカル変数を使用することをお勧めします。

bool parseSuccess = double.TryParse(stringToParse, out dblValue);
if (parseSuccess) ...

理由は 2 つあります。

1. double をもう一度解析せずに、変数を複数回使用できます。

2.コードが読みやすくなります。

このことを考慮:

if(double.TryParse(string1, out Value1) && double.TryParse(string2, out Value2) && double.TryParse(string3, out Value3) && double.TryParse(string4, out Value4))
{
    //some stuff
}

長すぎて、コードが読みにくくなっています。そのため、ローカル変数を使用するとコードが読みやすくなることがあります。

于 2012-07-11T22:26:54.927 に答える
1

ソース コードの明確さは、特にアプリケーションのメンテナンスにおいて重要なパラメーターですが、パフォーマンスも同様です。

取るに足らないことのように思えるかもしれませんが、プログラミング言語の単純な構文「トリック」を使用することで、非常に良い結果が得られることがあります。

結果をどうにかして後でコードの中で使用する場合は、変数を使用します。それ以外の場合は、直接的な文を優先します。

于 2012-07-12T01:45:08.977 に答える
0

正しい選択肢はありません。どちらも完全に受け入れられます。

ほとんどの人は、連結する条件が多くない場合、最初のオプションを選択します。これは、結果としてコード行が少なくなるからです。

于 2012-07-11T22:08:57.920 に答える
0

あなたが言ったように、あなたはC#を勉強しています

だから私の投票はあなたのためのこのスタイルになります

bool parseSuccess = double.TryParse(stringToParse, out dblValue);
if (parseSuccess) ...

勉強している場合は、学ぶことがたくさんあります。上記のスタイルは、TryParse が bool を返すことを明確に示しているため、TryParse の戻り値の型を心配したり見つけたりする必要はありません。

于 2012-07-11T22:16:42.503 に答える