Visual Basic とは、プログラミング言語の1つで、Microsoftが開発している言語です。
よくVBと省略されて呼ばれたり、書かれたりしています。Visual Studioに組み込まれており、Windowsのアプリケーションを作るのに、利用することができます。
先日、仕事のとあるプロジェクトで、Visual Basic を使って、開発をする機会がありました。
しかし、私は、Visual Basic を触ったことが無かったので、インクリメントをする方法すら知りませんでした。
そこで、今回はインクリメントをする方法を3種類、ご紹介したいと思います。
そもそも、インクリメントとは
とても、簡単なことですが、プログラミングでは1を増やすということを、結構使います。
そこで、特別にインクリメントという名前が付けられています。
for文などで、ループさせる時のカウントに使ったり、
処理を行なった数を数えるカウントに使ったり、
とにかく、何かを数える時によく使います。
逆に、変数の値を1減らすことを、デクリメントといいます。
++ をつけても、インクリメントできなかった
インクリメントは、プログラミングをしていて、よく使うものなので、PHPなどでは、次のようなやり方でインクリメントすることができます。
$num++;
PHPでは、変数の前か後ろに、プラス記号を2つ(++)つけることで、インクリメントさせることができます。
しかし、VIsual Basic ではこのやり方ではインクリメントができないので、エラーになってしまいます。
そこで、インクリメントする方法を、調べたところ、大まかに分けて3つの方法があることが分かりました。
それらの方法を、順番にご紹介します。
先日の、Visual Basic を使ったプロジェクトは、性能改善が大きな目標でした。
そこで、3つの方法のうち、どの方法が最も早く処理が終わるのかも調べてみました。
インクリメントをする方法
インクリメントする
私が、調べたときは、次の方法がインクリメントとして、紹介されていました。
Dim num As Decimal = 0
num = num + 1
序盤で、説明した通り、インクリメントとは変数の値を1増やすことです。
つまり、そのことを愚直にやっているだけです。
PHPのように、「++」と書くだけでは、インクリメントはできません。
上の例のように、わざわざ式を書いて1を足してあげる必要があります。
代入演算子をつかう
2つ目の方法は、代入演算子を使う方法です。
Dim num As Decimal = 0
num += 1
1つ目に紹介した方法を短縮した書き方です。こちらの書き方の方が、スッキリ見えるかもしれません(誤差の範囲だとは思いますが…)。
正直、「num = num + 1」のやり方と、対して違わないと思います。
ただ、調べていた時にこのやり方についてあるサイトで、
これは、代入演算子だからインクリメントではない
というコメントがついていました。
しかし、このやり方でも、確かにインクリメントはできます。
私には、これがインクリメントではないという理由がよく分かりません。
そこで、処理速度を計測して、先ほどの方法と違いがあるのかを、
確かめてみたいと思います。
Decimal.Incrementメソッドを使う
Visual Basicの、Decimal型には、変数の値を1増やすメソッド(関数)が、用意されています。
メソッドを用意するなら、++でインクリメントできるようにしてほしいと、思ったのは私だけではないはず。。。
使い方は、簡単!
Dim num As Decimal = 0
Decimal.op_Increment(num)
このように、「Decimal.op_Increment()」の引数に、Decimal型の変数を渡して上げるだけです。
このようにすると、引数として渡された変数の値を1増やして、返してくれます。
この方法には、1つの注意点があります。
このメソッドは、変数の値を1増やした値を返してくれるだけで、
変数に代入はしてくれないということです。
上記の例だと、numの値を1増やしただけになっています。
ループや処理のカウンターとして、Decimal.Incrementメソッドを使いたい場合は、次の様にする必要があります。
Dim num As Decimal = 0
num = Decimal.op_Increment(num)
これまでに紹介してきた方法と同じように、自分で代入する部分を書いてあげる必要があります。
タイピングしなければならない文字数的に、この方法が一番面倒くさいかもしれません。
3つの方法の速度の違い
冒頭で述べたように、Visual Basicで開発を行なうきっかけになったプロジェクトでは、アプリケーションの処理速度の改善が、大きな目標でした。
そこで、今回紹介した3つの方法のうち、処理速度が最も早いものはどれなのか調べてみました。
計測方法
Visual Studio で、起動すると、インクリメントを行ないながら、ループを1万回行うアプリケーションを作りました。
ループを始める直前と、ループが終わった直後の時刻を、ログデータとして、テキストファイルに書き込ませました。
直後の時刻から直前の時刻を引いた時間を、処理にかかった時間とします。
その計測を3つの方法で、各10回行い、平均値を出して、比較します。
インクリメントする以外の部分は、全て同じ内容のコードです。
選ばれたのは…
インクリメントする方法は、平均0.039秒
代入演算子を使う方法は、平均0.045秒
Decimal型のIncrementメソッドを使う方法は、平均0.054秒
でした。
正直、どの方法を使っても大きな差は生まれないみたいです。
ただやはり、「num = num + 1」のようなシンプルな形の方法の方が、コンピュータ的には、素早く演算できるのかなと思いました。