Cogito Ergo Sum.

我思う故に我あり

何故僕はスンナリC#に入っていけたのだろうか?

 昨年秋にC#の勉強を始めて、案外抵抗なく新しい言語をスンナリ受け容れられた自分が不思議だった。オブジェクト指向プログラミング言語にはかなりの苦手意識があったからだ。

 最近C言語Javaの入門書(『Cの絵本』(アンク 2002年 翔泳社)と『Javaの絵本(増補改訂版)』(アンク 2005年 翔泳社)ですが…)を読み直してみて、その理由がわかった。C#Javaはもの凄くよく似ているのだ(少なくともC++よりはずっと似ている)。

 「オブジェクト指向」的な部分(クラスの継承やインターフェースの実装の際に用いるキーワード、等)に関してはちょっとずつ異なる点もあるが、もっと基礎の、変数宣言の仕方だとか、演算子の種類、制御構造の構文、等は、Javaとソックリ(ちょっと待てよ。そのレベルで言えば、C++ともソックリか)。J#がいつの間にかVisual Studioから消えてしまっているのもうなずける。たぶん(C#とJ#とでは)ほとんど同じだろうから。

 僕は過去10年の間に何度かJavaの学習に挑戦しては挫折を繰り返していたので、Javaの基礎的な部分に関しては何となく見覚えがある。それで、C#の学習がスンナリ進んだのだろう。

 僕がC言語をマスターしていなかった、ということもC#の学習に利していた可能性がある。C言語の面倒臭さの大部分は、関数の戻り値として単一の値しか返せない、という点から生じているように思う。単一の値しか返せないから、配列や構造体を処理しようとすれば、ポインタを介してヤリトリせざるを得ない。そこのところをJavaなりC#であれば(C++もそうなのかもしれないが)、配列でも構造体でもクラスでも関数(メソッド)の戻り値として返せるから、そんな面倒なことをしないで済む。

 ところが僕は「あることを実現する方法は1つだけ知っていればそれでいい」というような発想をしがちなタイプなので、もし僕がCの常識を身につけていれば、配列を戻り値として返す、という部分で(「引数としてポインタを渡せば済むのに、何でこんな面倒なことを…」と)引っかかっていたのかもしれない。

 これはこれで「いつまで経ってもC言語ができるようにならなかった」ということの、意外なメリットだったのかもしれないな、と思う。