リファクタリング プログラミング Java

elseを使わないことでパフォーマンスが下がる場合の対処法

投稿日:

 

状況

前回記事(なぜelse、else ifを書かないようにすべきなのか?)のような
ifのみで判定されており、それがfor文等の繰り返し処理の中にある場合は
パフォーマンスが下がる。

 

対処法

メソッドを切り出し、早期リターンとする。

 

10億回のfor文でパフォーマンス評価

else有り、else無しで評価してみた。
(測定単位:ミリ秒)

else 有り

if文条件に当てはまれば、その時点で判定は終了するため、
より最初の方(上記の場合は、”man”)であるほど、判定は速く終了する。

<結果>
man :344
woman :343
other :2250
(未設定):1953

else 無し

全てのif文を判定するため、必ず一定の処理時間がかかる。

<結果>
man :1938
woman :2219
other :2212
(未設定):1898

結果(else無しは一定して遅い)

man、womanはelse有りの方が速い。
理由は、if文条件に合致したあとの後続処理(otheのif文等)は行われないため。
else無しの場合は、すべてのif文を実行するので処理が遅くなる。

上記の結果から、else有りと同じロジックに修正することで改善を試みる。
方法として、else無しをメソッドに切出して早期リターンとする。

 

パフォーマンス改善

else 無し AND メソッド切り出しして早期リターン

if文条件に当てはまれば判定結果をリターンするようにしたため、
後続のif文判定が行われない。

<結果>
man :321
woman :320
other :2199
(未設定):1863

結果(最速になった)

単位(ミリ秒)man(男性)woman(女性)other(その他)""(未設定)
else有り34434322501953
else無し1938221922121898
else無し
(早期リターン)
32132021991863

全3パターンで最速になりました。
else有りよりもわずかに早くなっているのは、「else」自体の処理が無いためと推察しています。

 

まとめ

・else有りだと、判定条件の順番によっては速く処理される。
・else無しだと、すべての判定を行うため、一律に処理時間がかかる。
・メソッドに切り出して早期リターンとすると、else有りと同等の処理速度をelse無しで実現できる。

 

コード全体

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-リファクタリング, プログラミング, Java
-, ,

執筆者:


comment

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

CAPTCHA


関連記事

結城浩氏のPrototypeパターン 練習課題6-1の回答例

結城浩氏著作「Java言語で学ぶデザインパターン入門」 Prototypeパターン 練習課題6-1の回答例です。 課題の概要 UnderLinePen、MessageBoxクラスのcreateClon …

【Java】配列の扱い方(初期化、追加、ソート、List変換など)

配列とは? ザックリ言うと、同じ種類の複数データを1つの変数に持つことができる仕組みです。 でも文字だけだとわかりずらいですよね💦 なので以下のコードを確認してみて下さい。 [crayon-647bb …

【Java】ArrayListの使い方まとめ

概要 ArrayListはOracleの公式ページでも明記しているクラスです。 Java SE 11 Programmer I (1Z0-815-JPN) 試験 インタフェースによる抽象化 インタフェ …

使って便利だったNode.jsのnpmモジュール

Excel操作 xlsx Excelファイルからシート単位でデータを読み取り、JSON化することができるモジュール。 VBAでは処理が遅い場合の代替手段となるが、書式設定はできない。 JSONファイル …

【Java入門】プロジェクトの作成からHello, World!まで

概要 プログラミングの入門といえば「Hello, World!」です。 まずは最も簡単なプログラムを動かすことから始めていきましょう。   プロジェクトの作成 新規プロジェクト作成 新規で「Javaプ …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。