Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

FizzBuzz問題再考

ひねくれて作ってみましたが考察点がありました。
前回ネタ FizzBuzz問題を解いてみました、ひねくれてる? : http://blogs.wankuma.com/ognac/archive/2007/11/05/105950.aspx
   ( 元ネタ : http://blogs.wankuma.com/episteme/archive/2007/11/04/105829.aspx )
このときは、1行化とは反対に、膨らます意図で書いたのですが、振り返るとこのネタは奥がありますね。
仕様は、 "3,5,3*5(最小公倍数)の剰余が0のとき判定" と" そのときの表示文字"  これだけです。
拡張性を考えれば、判定条件と表現値の組の増減は考慮しておくべきでしょう。増減の度にソースを触りリコンパイルするのでは芸がありません。
条件文の追加や定型化されているべきだと思うのです。この場合は、割る数と表示文字列の組になります。
 その面から見ると、ひねくれて作った物ですが、イケてそうに見えるから勝手なものです。
 (1) 元の和の範囲 1~100                        :  上限下限は業務ルール依存値
 (2) if   n mod 0 = 0  then   出力文字 = "xxxxx" の判定式自体は 業務としては固定式
 (3) n と  xxxxxx は業務ルール依存値
三種類の違う性質の物を同列に記するより、分離したほうが、保守性は高まります。(1)、(3)を外部File化すれば、ルール変更はユーザーに任せにできる(かも知れません)。
クラス設計とインスタンスの保持のコレクションの大切さを改めて見直した次第です。
(2)の部分を外出ししてしまうと、飯の種が無くなります <=オイ

 ビジネスルールのパターンの増減は有り勝ちな事で、言語のソースに埋め込むのは考え物です。
例) 割引率の設定
   お買い上げ個数
    1個~10個:         0%off (定価販売)
   11個~20個:         10%off
   21個~30個:         15%off
   31個~40個:         20%off
   40個以上 :         30%off

表にするのが可能なケースはRDBで持ってもインスタンスで持っても良いので、ソースは不変で対処できます。
この条件に、 25個以上は、売価の10%のクーポン券をつけることになったら、結構面倒ですね。
ソースを弄ることになります。この部分をカプセル化して外出しするかしないかは、アプリの規模にもよるので
一概にいえませんが、変更に強いシステム設計というのは、小さい部分から心がけて設計しないとダメだと思うのです。

(*) FizzBuzz問題では 3,5では 15の倍数(3*5) でいいのですが、任意の数の時は最小公倍数にする必要があり(**)、少し工夫がいります。
(**)  コメントありがとうございました。

投稿日時 : 2007年11月6日 9:02

Feedback

# re: FizzBuzz問題再考 2007/11/06 11:20 Mr.T

Mr.Tです、こんにちは。

>条件文の追加や定型化されているべきだと思うのです。
FizzBuzz問題が業務アプリでの話ならうなづけるんですが、
そもそもそんな前提は文章内にありませんので、がちがちにするのが良いのでは?となんとなく思ってました。
求められるのは、
「1~100までの表示」
「3の倍数ならFizz 5の倍数なら...」
この二つですし。

もしFizzBuzz問題が、現在プログラマである人があえて解くのであれば、複数の答えを持ってしかるべき、と思います。

# re: FizzBuzz問題再考 2007/11/06 17:21 Ognac

業務アプリとして考えてしまいます...職業病?
単純な命題だからこそ、いろんな見方ができますね。

# Hi, i feel that i noticed you visited my website so i got here to go back the favor?.I am trying to find issues to enhance my site!I suppose its good enough to use a few of your ideas!! 2021/07/12 19:51 Hi, i feel that i noticed you visited my website s

Hi, i feel that i noticed you visited my website so i got here to
go back the favor?.I am trying to find issues to enhance
my site!I suppose its good enough to use a few of your ideas!!

# Stunning quest there. What happened after? Take care! 2021/07/18 12:30 Stunning quest there. What happened after? Take ca

Stunning quest there. What happened after? Take care!

タイトル
名前
Url
コメント