VBが嫌いだ

VB(6.0の方)が嫌いだ嫌いだ嫌いだ…

僕はVBが嫌いだ。
Collectionの機能の少さ、配列の要素数が宣言時の数+1であること、コントロール配列を関数の引数にできない、継承をサポートしていない(サブクラス化とはまた別)…まぁいろいろ理由はあります。

Collectionオブジェクトの機能が少ない…まぁ要は使いづらいんです。

Dim objCollection  As New Collection
Call objCollection.Add(objHoge,"KeyString1")

なんて感じでCollectionにオブジェクトを追加していく。Collectionからオブジェクトを取得する時のキーとして、ここでは"KeyString1"を使っている。
キーを指定しない場合、Collectionからオブジェクトを取得する時に 1,2,3… のような数値(正確には文字列)を指定すれば取得できるのだが…

Dim objCollection  As New Collection
Dim objTemp        As clsHoge
Call objCollection.Add(objHoge)  'objHogeはすでにインスタンス化されている
Set objTemp = objCollection.Item(1)

何で要素数の開始が1なんだよ。…それだけならまだいい。例えば、今の状態だとCollectionのKeyが2以降の要素は格納されていない。
しかし、Collectionから「この要素はあったかなぁ?」という事を確認する方法が面倒なのだ。

Dim ret As Boolean
ret = objCollection.IsExist(index)   'こんなメソッドは無い
Set objTemp = objCollection.Item(2)  'エラーで落ちる

素数を確認するIsExistのようなメソッドは無いし、かと言って存在しない要素を指定するとエラーで落ちてしまう。なので指定の要素が存在するかどうか確認するには

On Error Resume Next
Set objTemp = objCollection.Item(2)
If objTemp Is Nothing Then
    (存在しない場合の処理)
Else
    (存在しする場合の処理)
End If

こういった手順が必要だ。(他にも方法はいろいろあります)こんなショボいCollectionは使いたくない。こういうのを「コレクションフレームワークが貧相だ」なんて表現をするのかな?


何で今更こんな事を言うのかというと、最近、過去のVBで作成された案件の修正や機能追加が舞い込んできているわけで。使い勝手の悪い言語で実装するのはものすごく煩わしいんですよ。

まぁ、VBという言語の使い勝手に関してはまだ許容範囲です。ウデでカバー(!)できるのでw


けれども本当に嫌だったのは

Dim intArray(0 To 4) As Integer

(…処理とか…)

intArray(7) = 18

こんなコードを解析、修正せねばならんのです。しかし何で動いているのか…
あ。

Public Sub MethodName()
On Error Resume Next

(…何行か…)
Dim intArray(0 To 4) As Integer

(…処理とか…)

intArray(7) = 18

既存コードがこんなんばっかりだったので…そりゃ当時は炎上もするでしょうよ。