2015.08.31 システム
プログラムの読み方書き方2.5
システムの上松です。
前回、
多重分岐はswitch文にするから関係ない!という意見もあるかもしれませんが、
switch文はとても処理が重いのでパフォーマンスを考えると多重ifのほうが良いこともあります。
と書いた理由について補足しておきます。
int iItemCount = 0;
if (iItemCount == 0) {
java.lang.System.out.println(“iItemCountはゼロ!”);
} else if (iItemCount == 1) {
java.lang.System.out.println(“iItemCountはイチです!”);
} else {
java.lang.System.out.println(“iItemCountはゼロイチ以外”);
}
int iItemCount = 0;
switch (iItemCount) {
case 0:
java.lang.System.out.println(“iItemCountはゼロ!”);
break;
case 1:
java.lang.System.out.println(“iItemCountはイチです!”);
break;
default:
java.lang.System.out.println(“iItemCountはゼロイチ以外”);
}
IF文とSWITCH文で、やっていることは同じです。判定結果も同じになります。
違いは、式の評価方法にあります。
if文は評価に記述した内容のみを判定し、処理を実行します。
switch文は式を全case評価したのち処理を実行します。
多重分岐の場合、記述だけ考えればif文は「カッコ内の式だけ判定して処理に移る」
ので処理が軽いように見えますが、実際は分岐処理中はメモリを使用し続けるので、
「switch()で一括判定して処理開始caseから処理を流す」
switch文の方がif文よりメモリ効率が良いことになります。
(サンプル程度の分岐数なら、どちらでも大して変わりませんがね)
ただ、いくつものループと分岐と変数定義がある「普通のプログラム」
でどちらの効率がいいかというと、
わからない
のです。ゴメンナサイ
こればっかりは、動作環境のCPU・コンパイラの解釈によって結果が変わるので
どちらがいいかはその都度確認しないといけないのです。
ごく簡単な処理に関する内容ですが、場合によっては重要なリファクタリングの対象になり、
遅い処理のパフォーマンスアップにもつながることもあります。
プログラムが遅い!という場合はこういった「簡単な処理」を見直してみるといいかもしれません。
それでは、今回はこれまで。