クリエイティブを楽しむ新メディア 牛の歩みで更新中!クリエイティブを楽しむ新メディア 牛の歩みで更新中!
プログラム・IT
変数の名前を変える! ~VBAで"脱コピペ"プログラミング⑤
2023年6月4日(日曜日)

「脱・コピペ」の第5弾は、「変数の名前を変える」です。

今回もやることは簡単で、本当にただ変数の名前を変えるだけ。あまりに簡単なことすぎて、「どんな意味があるの?」と疑問に思うかもしれませんが、これがなかなか意外と大切なことなのです。

ではさっそく、第1回でAIに書いてもらった素数を求めるマクロの変数を変えていきます。元は、以下のようなコードでした。

Sub PrimeNumbers()
 Dim i As Long, j As Long
 Dim isPrime As Boolean
 For i = 2 To 1000
  isPrime = True
  For j = 2 To i - 1
   If i Mod j = 0 Then
    isPrime = False
    Exit For
   End If
  Next j
  If isPrime Then Debug.Print i
 Next i
End Sub

このマクロでは、太字で強調したように"i"、"j"、"isPrime"の3つの変数が"Dim"によって宣言されています。前回のテーマが「変数宣言を必須化する」だったのは、実はマクロのなかで使われている変数をわかりやすくするためでもありました。

また、第1回のテーマは「マクロにコメントを書く」でしたが、これも変数の使われ方を意識する効果があるものでした。ただし実際にマクロにコメントを書こうとしてみると、変数の使われ方を理解できる場合はコメントを書けるし、理解できなければコメントを書けないという感じになるはずです。

そこで今回は「変数の使われ方がわからず、コメントを書けない」方が主な対象になります。理解はできていなくても、"とにかく変数の名前を変える"ことはできますから、まずは名前を変えてみることで変数に対する理解を少し深めようというわけです。

わかりやすい名前に変える

問題は、変数名をどんな新しい名前に変えるかですが……今回は「とにかく、わかりやすく」とします!

変数名にはプログラミング言語による良い命名方法や命名規則があるのですが、それはちょっと難しい話になります。なので今回はそれを気にせず、あくまで「今、自分にとってわかりやすく」を優先します。

そして、上記のマクロで使われている3つの変数のうち、"i"と"j"はなんだかわかりにくいのであと回しにして、まずは"isPrime"の新しい名前を考えます。

"isPrime"は、日本語にすれば「素数か?」という名前ですから、元からとてもわかりやすいものです。機能的には、チェック対象となる整数が「素数か、否か」を調べた"結果"が格納されます。

なお"Prime"だけでも素数を示しますが、"Prime Number"と言った方が数値であることがわかってより丁寧です。そこで今回は、"isPrime"は"isPrimeNumber"という名前に変えることにしましょう。

そして、"Dim isPrime ~"を"Dim isPrimeNumber ~"に書き換えます。

なお、このままこのマクロを実行すると……

Sub PrimeNumbers()
 Dim i As Long, j As Long
 Dim isPrimeNumber As Boolean
 For i = 2 To 1000
  isPrime = True
  For j = 2 To i - 1
   If i Mod j = 0 Then
    isPrime = False
    Exit For
   End If
  Next j
  If isPrime Then Debug.Print i
 Next i
End Sub

処理のなかで使用されている"isPrime"は宣言されていない状態になるので、太い赤字になっている3ヵ所でエラーが発生します。

なお、「エラー」と聞くと"回避すべきもの"と考えてしまうかもしれませんが、そうとは限りません。変数宣言を強制しておくことで、このように宣言のない変数を見つけてくれるのはとても便利ですから、積極的に活用します。

というわけで、わざとエラーを出して、順に"isPrimeNumber"に書き換えていきます。なお、変数名の書き換えを行なうときは、手入力せずに"コピペ"すると間違いが起きないのでオススメです。

Sub PrimeNumbers()
 Dim i As Long, j As Long
 Dim isPrimeNumber As Boolean
 For i = 2 To 1000
  isPrimeNumber = True
  For j = 2 To i - 1
   If i Mod j = 0 Then
    isPrimeNumber = False
    Exit For
   End If
  Next j
  If isPrimeNumber Then Debug.Print i
 Next i
End Sub

以上のように、すべて"isPrime"から"isPrimeNumber"に書き換えれば、この作業は終了です。"i"と"j"については少し難しいので、今回は無理に変えず、このままにして「完了!」とすることにしましょう。

決してすべての変数を変えることに意味があるわけではないので、わかりやすそうなところからやっていけるようになれば充分です。

あくまで、大切なのは変数名を変えることによって「その変数がどこで使われているか」を認識する機会をつくること。そして、それによってマクロ全体についての理解が進んで、「ただコピペしてきただけのもの」ではなくなっていくことにあるのです。

(つづく)

コメントを記入

メールアドレスが公開されることはありません。 が付いている欄は必須項目です