egon's everything review

万物はレビュー可能である by egon

プログラミング言語レビュー4 C#

プログラミング言語

  言語名:C#

使用ツール:Visual studio(.NET)

作られた年:2000年

 開発会社:マイクロソフト

一言感想

Javaのそっくりさんで移行も簡単。だけど違うところは違う

感想

C,C++を拡張した言語。Javaと同じで遠縁みたいなもので原型がない。

とにかく先発のJavaにそっくり。ただ違うところも意外と多い。

しかし移行で面倒な所は少ないのはいい。

ちなみにunityでゲームを作るときはこれを学ばないといけない。

良い点

何回も言うが「Javaとほぼ同じ」所である。

これが何を意味するかというと「Javaから入った人はC#をすぐ覚えられて、C#から入った人はJavaをすぐ覚えられる」という事である。

次に「Java以上にカプセル化が簡単」である。

メソッドを何個か用意するJavaと違いこういう書き方をすれば良いだけである

    public int Age{
        set{
            age = value;
        }
        
        get {
            return age;
        }
    }

結構覚えやすい書き方である。

Javaと同じだが「標準ライブラリが豊富」である。もちろんコレクションも使えるし日付も使えるし和暦変換もできる。

変わった所だと「Linq」というSQLみたいな物を使える。

悪い点

小さいことだが「標準出力にprint」が含まれない点である。

C#の標準出力はConcole.WriteLineと書く。printの文字が無いのでファイル出力と勘違いする。

次に「usingの意味がC++と違う」点である。

C++ではusingを「namespace省略」などで使うが、C#の場合は「JavaのimportやCやC++のinclude」みたいに使う。

役割が違うので同じ名称を使わないでほしかった。

あと「Javaと違ってオーバーライド*1は面倒」である。

Javaでは何も宣言しなくてよかったが、C#virtualoverrideをつけないといけない。

ここが一番Javaから入った人は困惑する点かもしれない。

これはIDEの問題や好みかもしれないが字下げスタイルが何か気持ち悪い。

Javaの場合はこうだ*2

if (a == 1){
    System.out.Println("hello world!");
}

だけどC#の場合はこう書く*3

if (a == 1)
{
    Console.WriteLine("hello world");
}

みたいな感じである。

こういう1つだけなら分かりやすいが、だんだんと層になってくると「始点に2行使うので何個あるのか」が分かりづらい。

さらに括弧が分からなくなり、変な所に別の関数や変数を入れたりするミスも起きてしまう。

このスタイルのせいで何度ミスを出してエラーを出したことか...

総評

Javaみたいだが似ているところは似ていて、違うところは全然違う。

でもC++よりはとっつきやすい。ただ字下げスタイルも全然違うので困惑しないように。

嬉しいことにIDEJDKも選択肢がありすぎるJavaと違って選択肢はVisual Studioと.NETくらいしかないのはいいことである。

ちなみにunityでゲームを作るときはこっちを覚えないといけない。ただ最近のunityは俯瞰から見てる自分でも分かるくらい迷走しているのでC#から変わるかもしれないが。

*1:継承したクラスで同じ名前の関数を使うこと

*2:K&Rスタイルっていうらしい

*3:オールマンスタイルっていうらしい