こんにちは。さらだです。いろんな言語のdo while 文を作ってみたと言うブログ記事を書いて、「do whileっているの?」と思ったので、僕なりの感想をまとめたいと思います。
コードの確認
とりあえず前回のcのdo whileを見てみたいと思います。
int i = 0;
do{
printf("%d\n",i);
i++;
}while (i < 10);
printf("10だよ!")
これですね。これを仮にdo while文を使わないでやったらどうでしょうか。
int i = 0;
for (i=0; i<10; i++){
printf("%d\n",i);
if (i > 10) break;
}
printf("10だよ!")
こうなりますね。
ではdoを使わずにwhileだけで実装するとどうなるでしょうか
int i = 0;
while (i < 10){
printf("%d\n",i);
i++;
}
printf("10だよ!")
このようなコードになると思います。
ではこれらのコードどれが早いのか試してみたいと思います。
比較について
ではまずスピードを比較してみたいと思います。
比較方法はi が 10000000になるまでに何秒かかるかで測定します。
計測にはclock関数を使用する。ただ、あくまでもCPU時間なので多少の誤差はあると思うので小数点以下の秒数に関しての結果はあまり期待しない方がいいかもしれない。
計測結果
do while文を使った場合
1回目 16.46秒
2回目 16.48秒
3回目 16.90秒
平均 16.61秒
while文のみの場合
1回目 16.60秒
2回目 16.77秒
3回目 16.93秒
平均 16.66秒
for + ifの場合
1回目 16.44秒
2回目 16.58秒
3回目 16.68秒
平均 16.56秒
このような形になった。
ミリ秒に関してはあまり参考としてはいけないが、全てほぼ変わらなかった。これが10000000でなく100000000とかだったらまた差が出たのかもしれないがとりあえずこれで終わりとする。
使い勝手は..?
速度に関しては全てほぼ変わらないと言うのがわかった。
では使い勝手はどうだろうか。
これは個人的な意見になるのだがdo whileを使わないといけないと言うのはないような気がする。Pythonなどではそもそも実装されていなかったりするので、そこまで必要とされているわけではないのだろう。
何かしら他の書き方で同様の動作ができる。もっと言えば細かいことをするならfor + if の方が使い勝手がいい気もする。
まぁこれらは個人の考えだが。皆さんはどうだろう。
まとめ
まとめは一つです。
「使いやすいのを使え」
これに限りますね。その時々に使いやすいものを使う。それが一番なのだと思います。
いろんな書き方を知っているとバリエーションも増えますしね。
それではこんなもので終わりたいと思います。ばいちゃ!