BLOGスタッフブログ

プログラムの読み方書き方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・コンパイラの解釈によって結果が変わるので
どちらがいいかはその都度確認しないといけないのです。

ごく簡単な処理に関する内容ですが、場合によっては重要なリファクタリングの対象になり、
遅い処理のパフォーマンスアップにもつながることもあります。
プログラムが遅い!という場合はこういった「簡単な処理」を見直してみるといいかもしれません。

それでは、今回はこれまで。

上松 博志が書いた他の記事

見積もり・ご依頼など、
お気軽にご相談ください

本サイトはユーザーエクスペリエンスの向上などを目的に、Cookieを使用しています。
右記のバナーで「同意する」をクリックする、または本サイトを利用することにより、
お客様は弊社のCookieポリシーに同意したことになります。

同意します