この前、Javaの半角数値チェックでぐぐっていたらわりと下記みたいな
ソースコードを見つけました
private static boolean isNumeric(String hoge) {
try {
Integer.parseInt(hoge);
return true;
} catch(NumberFormatException e) {
return false;
}
}
これは動きとしては正しい結果をだしますが
好ましくありません。
下記のような書き方のほうが好ましいです
private static boolean isNumeric(String hoge){
char c = null;
for (int i = 0 ; i < hoge.length(); i++){
c = hoge.charAt(i);
if (c < '0' || c > '9'){
return false;
}
}
return true;
}
理由1
Javaはガベージコレクションのおかげでスマートなメモリ管理を
可能ですが、例外もあります。それは名の通り"例外"の時です。
Exceptionがthrowされると一時的でもヒープを大幅に使うので
やはりexceptionはなるべく避けるように使うべきです。
これが何十万件のデータを処理するバッチならば当然避けるべきです
理由2
上記とかぶりますがExceptionはその名の通り、「例外」ですので
プログラマの想定しなかったケースのみ発生するようなあり方が
好ましいためです。チェックのために使うというのはプログラム設計
としてよろしくないためです(※理由2は個人的見解です)
余談
たとえばほとんど数値以外の文字が入ってくること無いが
想定される場合はNumberFormatExceptionを使うケースでもよいかもしれません
ただその場合NumberFormatExceptionをthrowする、あるいはラッピングされた
なんからのExceptionをthrowするという設計のほうが正しい気もしますが
0 件のコメント:
コメントを投稿