何年も前に、誰が最も難読化された C コードを生成できるかを競うコンテストが行われ、結果の一部は劇的に判読不能になりました。C.がそうだった。特にプリプロセッサを使用すると、本当に問題が発生する可能性があります。
ただし、C# の新しい機能の多くは、コードを難読化する素晴らしい機会を提供します。コードの簡潔さと明快さの適切なバランスを見つけることについて、誰か意見があるかどうか疑問に思っていました。議論のために一例を挙げましょうListView
。(はい、データバインディングでできることは知っていますが、ここで私と一緒に行ってください。)
コントロールは、次の配列で満たされる 2 列です。
struct Person
{
public string name;
public string address;
};
1つの明確で簡単な方法は次のとおりです。
private void Fill(Person[] people)
{
foreach(Person person in people)
{
string[] columns = new string[2];
columns[0] = person.name;
columns[1] = person.address;
ListViewItem item = new ListViewItem(columns);
listView1.items.Add(item);
}
}
明確でわかりやすい。
次のように書くこともできます。
private void Fill(Person[] people)
{
foreach(Person person in people)
{
string[] columns = new string[] { person.name, person.address };
ListViewItem item = new ListViewItem(columns);
listView1.items.Add(item);
}
}
あるいは:
private void Fill(Person[] people)
{
foreach(var person in people) // Note use implicit typing here
{
listView1.items.Add(new ListViewItem(
new string[] { person.name, person.address }));
}
}
最後に、次のように書くこともできます。
private void Fill(Person[] people)
{
Array.ForEach(people, item =>
listView1.items.Add(new ListViewItem(
new string[] { person.name, person.address}));
}
それぞれが多かれ少なかれ、言語のさまざまな新機能を使用しています。簡潔さと明快さのバランスをどのように見つけますか? 難読化された C# コンテストを毎年開催する必要がありますか?