C#を触り始めてそろそろ7年くらい経ちますが、これほど滋味に溢れる言語はないでしょう。
今回はC#自体ではなくC#でプログラミングしたときの特徴を解説します。
短く書ける
以下の例では9行が1行になっています。
わざわざ関数に切り分ける必要性もなくなりますね。
コード処理の見通しがつきやすく、リファクタリングもしやすいです。
これに限らず、「誰もがよく使う処理は短く書けるようにしよう」という風潮が感じられて快適です。
でもその方法がいっぱいあって果てしないんですけどね……
public class Hoge
{
public List<int> Fuga { get; set; }
}
// 他の言語でよくやるやりかた
public static int CalculatePiyoSumUsingForeach(List<Hoge> list)
{
int sum = 0;
foreach (var hoge in list)
{
foreach (var x in hoge.Fuga)
{
sum += x;
}
}
return sum;
}
// LINQがあるとき
public static int CalculateSumUsingLINQ(List<Hoge> list)
{
return list.SelectMany(hoge => hoge.Fuga).Sum();
}
込み入ったことをしようとすると知識が必要
メモリ管理はGCがやっていることもあり基本的には気軽に扱えますが、最適化をするにはSpanを使ったり、await込みの排他処理をするのにSemaphoreSlimを使ったりと、クラスの知識が必要になります。
まあでも一から十までメモリのことを考えさせられる言語でプログラムを書くよりは、一回調べて出来合いのプログラムを調べて使うほうが楽じゃないですか?
隙がない
後方互換性が強く、静的型付けであり、ソースジェネレータもあり、属性による高凝集も実現できて、例外によるプログラミングも可能……
他の言語で大規模に運用する場合などにどこかで不満が出てくるものですが、C#においてはこういった不満を感じることがまあないです。
悪くいえば、速度に優れたわけでもなければ初心者がpython以上に始めやすいわけでもないし、リテラルをとるような型を使えるわけでもないですが、一番を突き詰めないことでハイスタンダードにまとまっています。
その他
Unityで使われることもあり、かなり検索して出てくる記事が充実しています。
Godotでも使えます、嬉しい。
.NET系のやつとの連携が強く、結構やろうと思えばなんでもできます。