アップルのiMac G5欲しい!
欲しい欲しい。欲しい…
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
既存コードがこんなんばっかりだったので…そりゃ当時は炎上もするでしょうよ。