-
Notifications
You must be signed in to change notification settings - Fork 191
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AddDice::Node: 二項演算子をリファクタリングする #162
Conversation
除算ノードのクラスを作り、BinaryOpを単純化する。 除算の処理だけが特別なので、汎用的なBinaryOpでその面倒を見るのは重い。 そこで、端数処理方法別に除算ノードのクラスを3つ作り、それらに処理を 分担させる。 継承関係: BinaryOp(二項演算子) | +-- DivideBase(除算の基底クラス) | |-- DivideWithRoundingUp (除算 -> 切り上げ) |-- DivideWithRoundingOff (除算 -> 四捨五入) +-- DivideWithRoundingDown(除算 -> 切り捨て)
切り上げ/切り捨て/四捨五入でまでクラスを分けてしまうのは、細分化しすぎてコードの見通しが悪くなっていると思います。除算のクラスだけ作って内部で処理を分岐すれば良いと思ったのですがどうですか。 |
今回の目的は、 参考: |
了解しました。ド正論ですね。 以下蛇足 |
src/dice/add_dice/node.rb
Outdated
# 除算(切り上げ)のノード | ||
class DivideWithRoundingUp < DivideBase | ||
# 端数処理方法を示す記号 | ||
ROUNDING_METHOD_SYMBOL = 'U' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SYMBOL
だとどうしても Symbol が入っているのを連想してしまうので、何かしら名前を変更した方が良いと思います。
ROUNDING_METHOD
ROUNDING_METHOD_PREFIX
ROUNDING_METHOD_SIGN
ROUNDING_METHOD_STR
ROUNDING_METHOD_TYPE
ROUNDING_TYPE
等
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
どうせ外部から使わないし、他に良い名前がないならこのままでもいいです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ありがとうございます。それでは ROUNDING_METHOD
にしてみます。
確かにそのとおりですね。試しにインスタンス変数版も作ってみたのですが、どちらの方が良いでしょうか? |
Codecov Report
@@ Coverage Diff @@
## add_dice_parser #162 +/- ##
===================================================
+ Coverage 86.27% 86.28% +0.01%
===================================================
Files 202 202
Lines 21123 21150 +27
===================================================
+ Hits 18223 18249 +26
- Misses 2900 2901 +1
Continue to review full report at Codecov.
|
追加で書かれたインスタンス変数版よりも、当PRのクラス分けされた方が読みやすいと思いました。 ただ、追加のコードを見てちょっと思い浮かんだので、私の方でも書いてみました。こちらどうでしょう。 |
新しいコード、結局、例えば |
これか…… |
私の書きたいやり方と、ochaさんの書きたいやり方は平行線なんですね。 当PRの変更はど正論なので、現在の差分で行きましょう。 |
ノード側でわざわざ定数を作っているのには、端数処理方法の記号とノード側での表現とを独立させておきたいという意図もあります。 |
了解です。現行PRの案で行きましょう |
ROUNDING_METHOD_SYMBOL では、どうしても Symbol が入っているのを 連想してしまうので。
0ae0a9e
to
dc8bf1d
Compare
AddDice::Node: 二項演算子をリファクタリングする
除算ノードのクラスを新しく作り、BinaryOpを単純化しました。
除算の処理だけが特別なので、汎用的なBinaryOpにそれを書くのではなく、端数処理方法別に除算ノードのクラスを3つ作り、それらに処理を分担させました。
クラスの継承関係: