C#で1本作ってみた
ちょい仕事があったのでいい機会と思いC#で組んでみました。
やることは
- SQLServer2000にアクセスし、あるデータの統計を適切な形で抽出。
- 抽出したデータをcsvと別フォーマット(tsvもどき)のtxtで書き出し。
こんだけ。
実質丸2日くらいで出来上がったかな。
その間に思ったC#の使い勝手の感想。
- プロパティとメソッドの区別がややこしい
前回の日記にも書いたけど、メソッドとプロパティの区別がややこしい。
Javaならば何か値(プロパティ値)を得たい場合はget...というメソッドを探せばよかった。
一方、C#の場合はプロパティとして直接アクセスできてしまうので探すのに手間取る。
DateTimeクラスで現在時刻を取得することができるのだが、これがなんとNowというstaticなプロパティ。
おいらのイメージではプロパティは固有の値。
staticなプロパティならなおのこと固有の値な方がすっきりすると思うんだけど。
アクセスするたびに値が変わるならばメソッドにするべきじゃないかなあ。
- List関連のクラスがわかりにくい。
Data.Collections.GenericのListクラスを使用したけど、順番で取得したい場合は
List list= new List ();
//index番目のデータを取得する
Hogehoge h = list[index];
え?配列じゃん!
これに気づくまでにかなり時間がかかりました。
でも、なんか気持ち悪くて使えません。気持ちの問題かなあ・・・。
foreachなんかはおいらは好き。先輩なんかは気持ち悪いって言ってたけど。
- throws節がないのは不親切
C#の場合メソッドでどのExceptionをあげるかを明示的に書く必要(throws節)がない。
これって楽ちんなように見えて実はわかりにくい。
Javaの場合メソッドの宣言だけ見ればどんなExceptionをあげるかわかる。
ひいてはどんな処理をしているかまである程度わかる。(SQLExceptionならDB関連だとか)
C#の場合中を読み進めていかないとどんなExceptionが上がるかわからないのは不親切だと思う。
きょうびのプログラムはおしりまで読まなくても意味がわからないとだめだと思うんだけど。
適切なExceptionをcatchしていなくてもコンパイルが通ってしまうのも問題じゃないかなあ。
デバッグで動かして気づくってことが何度かあった。
- 画面の作成方法は直感的でわかりやすい
アプリケーションの画面作成はVB6をさらに洗練にした感じでわかりやすい。
Swingの画面作成はやっぱり癖があって慣れるまでに時間がかかると思う。
こっから先は開発環境としての.NETとJBuilderの違い。
.NETの開発環境を使いこなせてないだけかもしれない。
- コードフォーマットへの階層が深すぎる
JBuilderならばソース上でマウスを右クリックすると[ソースコードのフォーマット]がすぐ出てきた。
C#の場合編集の...の...というようにかなり深い階層まで行かないとできない。
abstractクラスのabstractメソッドの自動生成なんかもそう。
JBuilderだったらabstractクラスの継承クラスを作ったら自動的にメソッド生成してくれるしなあ。
- 継承クラスの作り方が???
自作クラスを継承する場合のクラス作成の方法がいまいちわからない。
自分で明示的に書いてやるしか方法はないのかな?
- JavaDocのようなフォーマットはあるのかな?
JBuilderの場合メソッドを宣言し、コメントを作成すると自動的にJavaDocのフォーマットで引数や戻値やthrowするExceptionを説明してくれた。
C#にはそんなのないのかな?
- try-catchが不親切?
JBuilderの場合、メソッドを[try-catchで囲む]とすると自動的にthrowされるExceptionの種類でcatchを書いてくれた。
C#の場合すべてがExceptionになっちゃう。自分でどんなExceptionが上がるのか調べないといけない。
こんなところかな。
色々不満はあるけれどほんとにJavaと似ているので直感的にはわかりやすく、調べやすいし
何よりWindwosとの相性はよさそう(よくないと困る)のでやっておいて損はないだろう。
うちの仕事としてはあと、
- シリアルポートの制御
- Socket通信
- 印刷
あたりがわかれば使っていけるんじゃないかな。
問題は印刷かなあ・・・。