0

Jon Skeetによるこの最近の投稿を読んでいました:どうすればあなたを列挙できますか?方法を数えさせてください...。それは、コードが何にコンパイルされるかを調査することです。この場合、彼は調べます

foreach (char ch in text) 
{ 
 // Body here 
}

彼が使用する最後の例(テキストがタイプの場合string)は、コンパイラーがforeachループを次のようなwhileループに変換することを示しています。

int index = 0; 
while (index < text.Length) 
{ 
 char ch = text[index]; 
 index++; 
 // Body here 
}

この場合、foreachループからwhileループに変換する(またはその変換を行うために必要でさえある)のはそれほど手間がかからないかもしれませんが、より一般的な意味で、コードをより類似するように書く必要がありますコンパイルされたコード?

4

5 に答える 5

4

いいえ、読みやすく保守しやすいコードを記述し、翻訳をコンパイラーに任せることに集中したほうがよいでしょう。

コンパイラの改善により、ループを別の方法で書き直したりコンパイルしたりする方がよい場合は、コンパイラが何をしようとしているのかを理解するのが実際に難しくなり、ループを最適な状態に変換できなくなる可能性があります。プラットフォームの説明。

于 2012-09-30T20:13:16.003 に答える
3

いいえ-コンパイラが生成するものは、コーディングスタイルの基礎となるものであってはなりません。

最初に読みやすさを最適化する必要があります。パフォーマンスに問題が発生した場合は、プロファイリング後にのみ最適化を試みる必要があります。

于 2012-09-30T20:11:02.413 に答える
2

いいえ、高級言語のポイントはプログラミングを単純化することです。コンパイラーは正常に動作しますが、最終結果が同じになる場合にその動作を複製する意味はありません。代わりに、言語の強力な機能を使用してください。

于 2012-09-30T20:13:05.923 に答える
2

C#コードをCILで表現できるものに変換する方法を理解するのは、コンパイラーの仕事です。あなたがすでに見たように、それはそれで良い仕事をします。あなたはその仕事をより良くするためにあなた自身を信頼しますか?もしそうなら、確かに先に進んでください。しかし、私自身とおそらくあなた自身を含む大多数のプログラマーにとって、その信頼は見当違いです。

于 2012-09-30T20:13:52.450 に答える
2

いいえ、コンパイラで許可されている簡単な方法を使用する必要があります。

書くだけでなく、エラーが発生する可能性のあるコードも少なくなります。例をとると、で間違いを犯すのは難しいですforeachが、それをに変換すると、whileたとえば、を忘れるなど、それが機能しなくなる小さな間違いがいくつかありますindex++

コンパイラの省略形は、わずかな労力で正しいことを実行できるようにするためのものです。たとえば、プロパティの省略形:

public int Value { get; set; }

これは、メンバー変数と、それを使用するゲッターとセッターに拡張されます(変数名はシークレットですが)。

private int _value;
public int Value {
  get {
    return _value;
  }
  set {
    _value = value;
  }
}

その省略形がコンパイラに追加される前は、入力するのがはるかに少ないという理由だけで、代わりにパブリックメンバー変数を使用したくなりました。

public int Value;

今、あなたはcaceを持ってそれを食べることができます。:)あと数文字で、実装を自分で作成しなくても、本格的なプロパティを手に入れることができます。

于 2012-09-30T20:14:52.323 に答える