ようやくC#に手を出してみた

今、Windowsアプリを開発しようと思ったらC#が良いんだろうなぁと漠然と思ったのと、C#の開発実績を作ると言う目的で手を出したわけだが、実際VBとVC#の違いはなさそうだ。

大昔、おれがBASICやCを覚え始めた頃は、かなりの差があってC言語様々、アセンブラ様々だったのだが、もはや、VBとC#の差は好みの問題レベルまで集約されている気がする。

もちろん、言語の違いで細かいことを言えばきりが無いのだが、どちらの言語でも同じプログラムを開発出来るし、フォームアプリを作るGUIも同じなので、違いを見つけるのが難しい。

その昔Cで開発するには、スケルトンを自分で用意してフォームアプリをちまちま開発する必要があって、画面を持つアプリはVBが超楽ちんと言う差があったわけだが、その差も無くなり、ほぼ言語体型に集中して開発出来る様になったので、有りがたい話だ。

実際に開発に着手して思ったのだが、他にPHPやjavaの案件を処理している流れでC#はそのままの感じで切り分けが出来るのだが、VBの場合は、VBで開発するぞーと思わないと、雰囲気が違う感じで、個人的にはVBA、VB、C#、PHPなどWEB系などと分けている。

また、そういった色々な言語を同時に扱っていると、結構ロジックが入り交じってきたりするのだが、VB、VBA以外は行末にセミコロンを入力する必要があって、それに慣れてしまうとVBの行末のセミコロンが無い書き方にちょっと違和感が出てくる程度だ。

後は、IF分とかVBで言うところのSELECT CASEなどなど、SWITCH文とかちょっと書き方が違うが、この辺の関数の言い回しがわかれば、どの言語でも開発出来る世の中になったわけで、言語にとらわれる必要は無い。

後は、Windowsオンリーで行くか、広くデバイスを制限しないかで選択する程度だろう。

今、プログラムを始めたいなぁと思っている人にはVBAとかのエクセルやアクセスのマクロの記録をいじくり回して実際に動くコードを生成させて、冗長なコードを見抜いてスッキリしたコードにする練習をしてVBAを徹底的に把握すれば、他の言語は直に出来る様になるはずだ。

VBで開発していて、VC#に手を出したとき、ちょっと手間取ったのは、CLASS関連の扱いで、自作の関数やライブラリを同配置すれば良いのかとか、ちょっとオブジェクト指向的なルールを把握しなければならないと言う事や、C#はグローバル変数が使えないので別の方法で実現するなど、色々と応用が必要になってくる。

そんなとき、ベースにする言語の基本を把握して、それに変わる方法を自力で見つける事が出来るならば、言語にとらわれる事無く好みの問題で言語を選べば良いだろうね。

ちょっと前にも聞かれたけど、「どの言語から始めれば良いのか」と言う事なんだが、俺の時代は選択肢も無く、C、アセンブラ(マシン語)、BASICの3択だった。

Cとアセンブラは大体組み合わせて使っていて、Cの中にインラインアセンブラコードを書いていたり、組み合わせて使う事が多く、BASICでゲームを作るほど性能は良くなかったので選択肢もわかりやすかった。

しかし、今は色々ありすぎて迷うのは仕方が無いわけでとっつきにくいとは思う。

なので、業務に役立てて、楽に業務をこなしたいと思うのならVBAで、プログラムで飯を食いたいと思うのならPHPが良いと思うのだ。

いずれにしても、自分が一番取っ付き易い言語を徹底的にマスターすれば良い。

料理の基本、「さしすせそ」を理解していれば、中華でもイタリアンでもフレンチでもレシピがあれば料理を作れるはずだ。

言語も同じで、日本語が出来るから、英語や中国語を学ぶことが出来て、日本語で「おはよう」は英語で「hello」、中国語で「你好」と言う違いはある物の、それぞれの言語で同じ事を意味する事になる。

それが、BASICとPHP、C、JAVAなどでの違いで、「言語」であるので同じ感覚で対象が人間ではなくコンピュータなだけだ。

とにかく、どれか一つに精通して「質問」せずに「調べる」癖を付ければ身につくだろう。

その調べ方すらわからないならプログラマーには向いてないと思うので、出来る人に金を払って作ってもらう側になれば良いだろうね。

で、今VB6で動かしているシステムをC#化するべく作り直しているのだが、当初WEBでPHPにするつもりだったのだが、印刷でOCR通す書類が多いので、まずはC#に移植する事にした。

VB6を.NETにする際、最もやっかいなのはコントロール配列なんだが、これ、もともとVB4からファイルシステムとしてオフコンから開発されて、俺がVB6でDBにアップデートして複数台のPCで使える様にしてから、かなり改造してはいるのだが、イベントの使い方がかなり間違っていて、VB6にするにも面倒だったし、なんせバイナリファイルにデータを保存して管理していた上に、ファイルのシーク番号とかで付け合わせしていたりと、とんでもない移植だった。

なんとかかんとかDB化して今は、かなり健全なシステムになったのだが、結構機能豊富で画面が多すぎる。

そもそもの設計が間違っているので、この機会にスッキリさせて再販するつもりなので、しっかりと作り込んでいく予定だ。

VB.NETでコントロールの扱いはある程度把握していたので、C#でもそれは使えるのだが、コントロールの受け渡しとかがVBほどカジュアルじゃ無いので、この辺がきっちりできれば十分再販出来ると思っている。

後は、DataReaderとかの扱いがVB6でADOのレコードセットと扱いが違うので、ここを抑えれば、あとは時間の問題だな。

印刷系はオリジナルのライブラリを使った方が、きめ細かく位置合わせ出来るのでOCR用の印刷は問題無いのだが、書類が結構多くて難儀しそうだ。

まぁしかし、まったく新規で作り直していて、VB6のロジックは完全無視して、DB向けに書き直せるので、処理はかなり高速になるだろうな。

さてさて、いくらくらいとれるかなぁ...