これの続きです!
レビューしてもろた!
おぉ。メソッドわけない前提で、price<sumのほうが正常系なんだから先に異常系を抜けるべきってのと、正常系だけresultの値設定順が違うのと、最初のthrowがただのgotoになっててバグぽい。「続:僕の好きなコードの書き方」 http://t.co/6drsy6VG8I
— きしだલ (@kis) May 8, 2015
そっこーでコメントくれてた!確かに確かに!
@bufferings 僕ならstaticイニシャライザで、def(1, 0); def(5, 0); def(10, 10); みたいなのたくさん定義してMapで持っとく。
— CEROMETAL (@cero_t) May 12, 2015
なるほどですなー。
あと、@haradakiro にも「お邪魔したいのでテストコードも晒さないかな、ちらっちらっ」ってコメント頂きました。
レビューしてもらうの楽しい!((((;゚Д゚))))
てことで、本当は今日のアサコザケ( #asakzk )は実践DDDを読もうと思ってたのだけど。コード書こっと。
アドバイスを踏まえて、ね。
注意点
ゴールが決まってるわけじゃなくて、試行錯誤しながら進むので、その途中で「ほほー!こういう風にやるのが正解なのか!」って思わないようにね。
最終的に「やっぱあんときのあのメソッド切り出しはナシだわ!」ってなる可能性も高いです。
※ 初心者の方向けのコメントです。途中経過だけ読んで「なるほど!」って鵜呑みにすると申し訳ないので。
※ 自分の中に答えがある人は、適当に(・∀・)ニヤニヤしたりコメントくれたりするとうれしす。
メソッドを切り出してみよう
じゃ、ちょこちょこメソッドを切り出してみよう。まだ特に名前は考えない。
戻り値の生成部分をまとめられそう
んー。まぁ、異常系っぽいとこはもうちょいまとめられそうだけどね。とりあえず進もう。
最初のforループをメソッドに切り出してみようかな
ここね。
List<Integer> coins2 = new ArrayList<>(); int sum = 0; for (Integer coin : in.getCoins()) { if (coin == 1) { sum += 0; coins2.add(coin); } else if (coin == 5) { sum += 0; coins2.add(coin); } else if (coin == 10) { sum += 10; } else if (coin == 50) { sum += 50; } else if (coin == 100) { sum += 100; } else if (coin == 500) { sum += 500; } }
ちょっと悩むんだけど、いっかい切り出してみようかな。
戻り値の型を作って、sumとcoins2を返すのもいいけど、パラメータでcoins2のインスタンスを渡してみる。
もし、このまま最後までいくことになったら、やっぱり型を作るかも、と思いながら。
次のforループも考えてみる
これ切り出してみようかな。
sum -= product.getPrice(); List<Integer> coins3 = new ArrayList<>(); coins3.add(500); coins3.add(100); coins3.add(50); coins3.add(10); for (Integer coin : coins3) { while (sum > coin) { coins2.add(coin); sum -= coin; } }
あれ・・・。まぁ短くはなったけど、読みにくくなってきた気もする(;・∀・)。
一旦立ち止まって考える
さて。これで、僕も全体の流れを見れるようになりました。で、いくつか気づく点がありますね。
って、既にきしださんが書いてくれてる!
price < sumのほうが正常系なんだから先に異常系を抜けるべき
前回までは、メソッドが長かったから気づいてなかった!ifの中が正常系で、最後までいくと異常系なんだってことに!
逆を取るのに、不等号逆にすればいい気がするけど、一旦考えるのをやめて単純に「!」使っちゃいます。
メソッド切っちゃおうか。なんとなく。
最初のthrowがただのgotoになっててバグぽい
はっ!
最初の入力チェックでIAE投げてますが、これが一番したのcatchで捕まえられてますね。
んで、しかもそのなかでin.getCoins()使ってる。これ、意図した通りなのかな・・・?
どういう実装にしたらいいんだろう?
・・・ってところで今日もターイムオーバー!!(ノД`)シクシク
名前は考えない、って言いつつも、考えがなさすぎて困った。
また次回!