■
http://d.hatena.ne.jp/tek_koc/20081206/1228528411
if(リンゴが腐ってないかどうか) { (腐ってないときの処理) おいしくいただく } else { (腐ってるときの処理) 捨てる }
このプログラムは素晴らしい。
さて
複雑系のばあい
たとえば。
if(リンゴが腐ってないかどうか) { (腐ってないときの処理) if(リンゴがカビってないかどうか) { (カビてないときの処理) if(リンゴが美味しそうかどうか) { (美味しそうな処理) if(リンゴにタマが入っているかどうか) { (タマが入っているときの処理) } else { (おれが入る処理) } } else { (美味しそうじゃないときの処理) } } else { (カビてるときの処理) } } else { (腐ってるときの処理) }
こうなったとき、などは処理内容を把握するのは判定式でテーブル書くのがおぬぬめ
A B C... 0 0 0 ... 0 0 1 ... 0 1 0 ... 0 1 1 ... 1 0 0 ... 1 0 1 ... 1 1 0 ... 1 1 1 ...
こういう場合は、此処までする必要はないけれど...*1
table[] { // 腐っ カビ 美味 タマが NO, NO, NO, NO, sub {(腐っていた時の処理)} NO, NO, NO, YES, sub {(腐っていた時の処理)} NO, NO, YES, NO, sub {(腐っていた時の処理)} NO, NO, YES, YES, sub {(腐っていた時の処理)} NO, YES, NO, NO, sub {(腐っていた時の処理)} NO, YES, NO, YES, sub {(腐っていた時の処理)} NO, YES, YES, NO, sub {(腐っていた時の処理)} NO, YES, YES, YES, sub {(腐っていた時の処理)} YES, NO, NO, NO, sub {(腐ってないときの処理)(カビてるときの処理)} YES, NO, NO, YES, sub {(腐ってないときの処理)(カビてるときの処理)} YES, NO, YES, NO, sub {(腐ってないときの処理)(カビてるときの処理)} YES, NO, YES, YES, sub {(腐ってないときの処理)(カビてるときの処理)} YES, YES, NO, NO, sub {(腐ってないときの処理)(カビてないときの処理)(美味しそうじゃないときの処理)} YES, YES, NO, YES, sub {(腐ってないときの処理)(カビてないときの処理)(美味しそうじゃないときの処理)} YES, YES, YES, NO, sub {(腐ってないときの処理)(カビてないときの処理)(美味しそうな処理)(入って腰を振る)} YES, YES, YES, YES, sub {(腐ってないときの処理)(カビてないときの処理)(美味しそうな処理)(タマが入っているときの処理)} NUL } for(k=0;table[k]!=NUL;k+=5) if( リンゴ腐ってない? == table[0+k] && リンゴカビない? == table[1+k] && リンゴうまそう? == table[2+k] && サザエさんのアレ? == table[3+k] ) { table[4+k](); break; }
とても簡単
第二の理由は、治したいときにパッと治せるので、おぬぬめ
かびてる場合、や、まずそうなら、腐っていないときの処理やカビ処理は要らないやん、つーときは
table[] { // 腐っ カビ 美味 タマが NO, NO, NO, NO, sub {(腐っていた時の処理)} NO, NO, NO, YES, sub {(腐っていた時の処理)} NO, NO, YES, NO, sub {(腐っていた時の処理)} NO, NO, YES, YES, sub {(腐っていた時の処理)} NO, YES, NO, NO, sub {(腐っていた時の処理)} NO, YES, NO, YES, sub {(腐っていた時の処理)} NO, YES, YES, NO, sub {(腐っていた時の処理)} NO, YES, YES, YES, sub {(腐っていた時の処理)} YES, NO, NO, NO, sub {(カビてるときの処理)} YES, NO, NO, YES, sub {(カビてるときの処理)} YES, NO, YES, NO, sub {(カビてるときの処理)} YES, NO, YES, YES, sub {(カビてるときの処理)} YES, YES, NO, NO, sub {(美味しそうじゃないときの処理)} YES, YES, NO, YES, sub {(美味しそうじゃないときの処理)} YES, YES, YES, NO, sub {(腐ってないときの処理)(カビてないときの処理)(美味しそうな処理)(入って腰を振る)} YES, YES, YES, YES, sub {(腐ってないときの処理)(カビてないときの処理)(美味しそうな処理)(タマが入っているときの処理)} NUL } for(k=0;table[k]!=NUL;k+=5) if( リンゴ腐ってない? == table[0+k] && リンゴカビない? == table[1+k] && リンゴうまそう? == table[2+k] && サザエさんのアレ? == table[3+k] ) { table[4+k](); break; }
*1:これくらいなら先読みヒットするからこれやると処理能力は低下する