t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA コードの抽象度とは

具体的、抽象的という言葉について

一般的には、「具体的でわかりやすい」とか、「抽象的でわかりにくい」という使い方をする。具体的でわかりづらい、抽象的でわかりやすいと言われても、「は?」と思う方が大半だろう。

ただプログラミングのような緻密な作業においては、この反転現象がおきる。

たとえば、「歩く」という動作について考えてみよう。この言葉は人間にとって十分具体的だ。しかし、より具体的に言えば、上半身のバランスをとりながら右足と左足を交互に前に出し、重心を前へ前へと運ぶ作業である。もっと具体的に言えば、筋肉Aを収縮させると同時に筋肉Bを弛緩させ、さらに…。

という具合に、具体的になればなるほど意味が分からなくなる。

ある地点を越えると、具体的になればなるほど分かりづらくなる。
そしてそれが、プログラミングの世界である。

コードの抽象度

プログラミングでは、抽象度が高い・抽象度が低いという言い方をする。「具体的・抽象的」という言葉だとどうしても一般的なイメージがつきまとうため、言い換えているのだと思う。
プログラミングでは厳密な処理を扱うため、命令の抽象度が上がれば上がるほどわかりやすいコードになる。

たとえば、動的配列に値を追加するのと、コレクションに値を追加するのでは、コレクションの方が抽象度が高い。

動的配列の場合

Dim Arr()
Redim Arr(1 To 1) '動的配列を拡張する。
Arr(1) = "Hello"  '1番目の値を書き換える。
Redim Preserve Arr(1 To 2) '動的配列を拡張する。
Arr(2) = "Good Bye"  '2番目の値を書き換える。

コレクションの場合

Dim C As New Collection
C.Add "Hello"  '追加する。
C.Add "Good Bye"  '追加する。

もちろん、動的配列にもコレクションにも長所・短所があるので単純にコレクションが優れているという話ではない。しかし抽象度が高いほうがより人間の感覚に近くなるので、分かりやすさという点ではコレクションに軍配が上がると思う。

複雑な処理を別プロシージャに分けたり、クラスを作成してごちゃごちゃした処理を隠蔽すると、メインプロシージャはすっきりする。

まとめ

書いたコードを読み返して分かりづらいと感じたら、それはコードの抽象度が低いためかもしれない。
こうした概念を知らなくても、プログラミングはできるが、覚えておくとコードに対する意識が変わってくるので理論や概念は積極的に学んでいきたい。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。