modest violet

modest violet

開発者としてのあれこれや、日々の雑記など

your future hasn't written yet. no one's has.
by Emmett Lathrop "Doc" Brown

僕は小馬鹿にされがちなVisualBasicを肯定する


f:id:shin21sk:20160414122645p:plain

 Visual Basic(以下、VB)は結構な頻度で「軽く見られがち」であり、「小馬鹿にした」感想を目にします。

確かに昔々はVBランタイムが必要だとかメモリ管理がイケていないとか色々とありましたが、今では全て過去のお話だと断言出来ます。

世間が抱いているイメージよりも遙かにVB.NETは非常によく出来た言語に進化しています。

じゃあ、なんで「VB?www」的な感じになってしまったのでしょうか。

過去の負のイメージが強すぎる

 VBはVersion6までと、.NETをベースとしたVersion7以降では全く別の言語として分ける事が出来ます。

当時の自分は、工場とか事務系のソフトウェア開発に多く携わっていました。

こういう企業様ではMS-DOSの頃からソフトウェアを使っていた事もあり、DOSから比較的に移行が容易だったVBの資産というのが多いんですね。

ですので自分に回ってくるお仕事は、ほぼほぼVBでの開発案件ばっかりでした。

DOS時代の仕様をそのままに、VBに置き換えてWindowsで動かしているだけ」という案件が、振り返ればトラウマが多いです。

互換性があるのに、何故簡単にいかないのでしょう?

互換性がある故の贖罪

 VBの前にN88-BASICに代表されるBASIC言語がありました。

とにかく先頭から順番に処理して、GoTo文といって特定の場所にジャンプして別処理を行うという機能を多用して組み立てて行くのが主流な言語です。

一時期DOS資産をWindowsシステムに移行するWindows化案件というものが流行った時期がありました。

大量のDOS資産をWindowsで動くように移行する訳で、「一つ一つに時間をかけて検討なんてしてられない!」という悪しき制約のもと、DOS時代のアーキテクチャのまま、VB化された案件が山程出来上がった訳です。

あちこちでGoTo文が入り乱れるスパゲッティーコードが大量生成された形になりました。

こういう類のソースは作成時には特に問題ないのですが、後々に保守メンテナンスしていく際にじわじわとその贖罪が露わになってきます。

どこを直していいのか分からない!下手に直すと動かない!!!という負の連鎖が引き起こされるわけです。

従来と同じような書き方が出来た故の悲劇と言えるでしょう。

.NETになった直後

 似たような現象は.NET化された後でも見受けられました。

.NETに変わった直後のVBは本当に酷くって、勝手が違うわ、出来ない事が多いわ、速度が遅いわとVB6までの旧VBユーザーからの評判はとにかく悪かったのです。

そして、ここでも従来のVB6と同じ書き方で.NETに移行したシステムが多く、.NETになって「オブジェクト指向が出来る」とか「クラス開発が容易になった」等の恩恵を恩恵としてを感じないまま、保守性の低いソースが大量生産される事となりました。

こういった様に、新しいアーキテクチャを考慮せず今までと同じ書き方を前面に押し出して大量生産されたコードがたくさんありそれらを保守しないといけない人たちは「VB嫌い」となっていったと個人的には思っています。

現に僕も未だに90年代後半に作られたシステムをたまに保守する時が未だにありますが、殺意しかありません。

本当にVBは悪いのか

 .NETになったVBは良い言語です。

特に2005以降のVBは非常に簡単にソフトウェアが構築出来てC#と大きな括りでは遜色はあまりありません。

 VBだからと卑下される理由は無いと言えます。

・・・。

・・・ ・・・。

ただ、ごめんなさい。ここまで書いといてごめんなさい。

申し訳ないですが・・・。

最近の僕は新規開発ではC#押しです。


・・・。VBは使ってません。。。

VBではなくC#を使う理由

サンプルコードが豊富

 圧倒的にインターネット上のサンプルコードや書籍はC#の方が多いです。

ソースコードC#からVBに変換してくれるサイト等もありますが、やはり少し面倒な点も多いです。

VBで作ってもC#で作ってもさほど遜色が無いのは前段で述べたとおりなので、「じゃあVBに固執する理由はないな」というのが一番の理由です。

LINQの書き方がVBは冗長

LINQの書き方がVBは冗長になります。小さい所ですが結構大きいポイントだと思っています。

C#の場合
var query = hoge.Where(x => x.huga);
VBの場合
dim query = hoge.Where(Function(x) x.huga)

この「Function」という部分が本当に無駄。無駄無駄無駄。
C#で => とか書けば書くほど、この思いは強くなります。

まとめ

・過去の資産がある為に、VBは卑下されているが新規開発する場合はC#との遜色はほぼ無い

・ただ特に理由が無ければ、サンプルが豊富なC#を選ぶのでVBで敢えて新規開発する理由も無い

【結論】VBは苦労人



※この記事は2016.04.14に加筆修正しました ※旧タイトル:Visual Basicは何故馬鹿にされるのか