###値の初期化について
オブジェクトなどに値をセットするとき、
その値の初期化について、知恵をお貸しいただきたいです。
例えば次のようなコード(例1)
Java
1Dto dto = new Dto(); 2List<String> eggs= new ArrayList<String>(); 3 4try{ 5 Spam spam = hoge.fuga(); 6 if(spam.getHam() != null && spam.getHam().getEggs() != null){ 7 eggs = spam.getHam().getEggs(); 8 } 9}catch(Exception e){ 10 // 例外処理 11} 12 13dto.setEggs(eggs);
上のコードは下のようにも書き換え可能です(例2)。
Java
1Dto dto = new Dto(); 2List<String> eggs; 3 4try{ 5 Spam spam = hoge.fuga(); 6 if(spam.getHam() != null && spam.getHam().getEggs() != null){ 7 eggs = spam.getHam().getEggs(); 8 }else{ 9 eggs = new ArrayList<String>(); 10 } 11}catch(Exception e){ 12 eggs = new ArrayList<String>(); 13 // 例外処理 14} 15 16dto.setEggs(eggs);
dtoにセットするeggsはnullではなく、必ずListのインスタンスではいけないとき
次のことが気になっています。
###問題(気になること)
- 例1について
割りとスッキリかけているとは思いますが、必ずeggsにインスタンスを代入するので、
eggsが取得できた場合に無駄かなと感じてしまいます。
- 例2について
例1とは反対に無駄な代入はありませんが、その分elseやcatch時に処理が追加されてしまい、
可読性は下がってしまうのかなと感じてしまいます。
自分の考えとしては、spamからeggsが取得できる確率や例外の発生頻度などを考慮して、
使い分けるしかないのかなとも感じています。
###疑問
dtoにセットするeggsはnullではなく、必ずListのインスタンスではいけないことを考えた時、
例1や例2以外の書き方は無いのでしょうか?
それとも自分の考え通りケースバイケースで使い分けるしかないのでしょうか?
どの言語でも共通の問題(というか感じること)だと思っているので、
みなさんの知恵をお貸しいただけたら幸いです。
よろしくお願いします。
4/12追記
みなさんのおかげで色んな考えに触れることができました。
ありがとうございます。今後はご回答にもあったように、
デザインパターンも活用していこうと思います。
回答6件
あなたの回答
tips
プレビュー