2010/03/15

プログラマはプログラミング言語のユーザー

雑感。タイトルと内容はあまり関係ない、かも。

Schemeの多値のことを考えていたら、C#のTryParseのことを思い出した。
はっきりと憶えていないけど、こんな感じだったと思う。

string one = "1";
int result;
bool successed = int.TryParse(one, out result);

どう見てもダサい。これを使っていた頃、多値を知らないなりに「複数の戻り値を返せれば良いのに。」と思った覚えがあるようなないような。

string one = "1";
bool successed, int result = int.TryParse(one);

こんなイメージ。むしろこれができないというのがおかしいような気がする。おかしいというか「プログラミング言語のユーザーとしてのプログラマ」から見れば不親切だなーと。もしかして知らないだけでできるのかも。確か、C#4.0でtupleがどうのこうのと言われていたような気がするので、似たようなことができるのかもしれない(tupleと多値は、たぶんいろんな意味で別物だけど)。シンタックスシュガーでなんたらかんたら、みたいな。


仕事でC#1.1を使っていた頃は、このTryParseすら無くてとても面倒な思いをしていた。なのでC#2.0のTryParseを見た時は「超便利!」と思った。事前のチェックも例外処理もなくParseしまくってた社内のアグレッシブなコーディング文化に原因があったにせよ。
まー、今は無職ですが。

TryParseがないので、Parseを使うことになる。これがまた失敗すると例外が投げられる。当時は「なんで例外投げるんだよ・・・。初期値(変数を初期化してない時の)とか何か返せば良いんじゃね?」などと思っていた頃が私にもありました。「失敗した時に0が返ってきてしまったら、失敗して0なのか成功して0なのかわからないじゃまいか。かといって他に返せそうなものも見当たらない。例外が適切なのかも。」と思うようになったのは随分後のこと。

例えばNull許容型があるんだから、int?型が返るようなのがあっても良いんじゃね?などと今思った。失敗したらnullが返る、とか。・・・。失敗したからnullが返るというのも、それはそれでおかしいような気も。


ところで、touch nullでdieなのもどうなんだろ。いちいちnullかどうか判定しないといけないのもどうなんだろう(もうC#関係ないな)。Common Lispのnilってやっぱ素敵。Rubyもそうなんだっけ。

こうやって思い出してみたり、勉強会の時にたまにC#のコードを見たりすると「やっぱC#は難しいなー。」などと思う。気を配らないといけないことや覚えないといけないことが多いなーという意味で。
文法(?)、型、ジェネリクス、匿名メソッド、ラムダ式、LINQ、属性、オブジェクト指向周りのいろいろ(継承とかポリとかinterfaceとか)、もうその他いろいろたくさん・・・。こうやって見るとプログラミング初心者にC#は酷な気がする。VS(もしくはそれ相当のもの)がないと書けない言語だよなー。

「Schemeは覚えることが少ない」とか言われてるのが、なんとなくわかる気もする。わからない気もする。括弧も少ないし。

C#もSchemeもあんまりよくわかってないので、滅多なことは言えませんが。という防衛線。という防衛線。

防衛線、命綱、アンビリカルケーブル。
アンビリカルケーブルは臍の緒。

0 件のコメント:

コメントを投稿