module Enumerable # すべての処理が終わるまで繰り返し実行するようなプログラム :-) # TODO:マシな名前募集中 def kurikaeshi(&block) hoge = [] self.each{|e| begin block.call(e) rescue # 失敗したら積む。成功したら積まない。 hoge e end } return if hoge.empty? # 無限ループ対策は宿題とします:-) hoge.kurikaeshi(&block) end end
# 例 if __FILE__ == $0 [ "aaaaa", "bbb", "cc", "d", ].kurikaeshi{|e| if e.size == 1 # 長さが1なら、 p e # 表示して、 nil # コレについて処理終了! else e.slice!(0...1) # 長さを1つ詰めて、 raise StandardError.new # 今回は失敗と見なす。また来週! end } end
よーしパパもLyee作っちゃうぞー (スコア:0)
>処理の順番を考える必要がないことである。といっても、コンピュータが処理の順番を探し出すわけではない。すべての処理が終わるまで繰り返し実行するようなプログラムを作るためである。
とのことですが、 少なくともそんな程度のものなら簡単に自作できますよ? Rubyでやったことがあります。たしか以下のような感じです。
module Enumerable
# すべての処理が終わるまで繰り返し実行するようなプログラム :-)
# TODO:マシな名前募集中
def kurikaeshi(&block)
hoge = []
self.each{|e|
begin
block.call(e)
rescue
# 失敗したら積む。成功したら積まない。
hoge e
end
}
return if hoge.empty? # 無限ループ対策は宿題とします:-)
hoge.kurikaeshi(&block)
end
end
# 例
if __FILE__ == $0
[
"aaaaa",
"bbb",
"cc",
"d",
].kurikaeshi{|e|
if e.size == 1 # 長さが1なら、
p e # 表示して、
nil # コレについて処理終了!
else
e.slice!(0...1) # 長さを1つ詰めて、
raise StandardError.new # 今回は失敗と見なす。また来週!
end
}
end
実行結果:
$ ruby kurikaeshi.rb
"d"
"c"
"b"
"a"
要はこうでしょ?
上記はワザトらしい使用例ですが、
実際に
「処理の副作用を期待する。失敗したら例外が挙がる。」
という処理をブロックで指定させれば、旨く動きますし、
活用する場面は結構あります(ありました>仕事)
ちなみにコレはゼロ円です。
せいぜいココにアクセスして読むためにかかった通信費の実費を皆さんが(私にではなく)各通信会社にお支払いになるだけでOK。
コードサイズも見ての通り、ゆったり書いてもサンプルつきで数十行ですし、難読ってことも無かろうと思いますから、使用者の教育コストも無視できますよね?
流石に色々快適っていうほどではないけど、必要最小限なことをやってるだけなので、むしろ「使いまわし」はコッチのほうが強いかも知れませんね。
で?かたやアチラは、何千万ですか?何億ですか?
あと、これとは方法論が違う(というかもっと高等)だけど、makeなんかも良いですね。「実行順序や実行そのものの要否」をシステムが勝手に判定して処理して(あるいはしないでおいて)くれる。
Re:よーしパパもLyee作っちゃうぞー (スコア:0)
基本的にプログラム言語ってのは、他の手法が”得意としている”ことでも、
やってできないことは無いの。
言語の違い、設計手法の違いと言うのは、
それが作りやすくできているか、どう作ってもそうなるように基本設計自体がそう組まれているか
ということなのよ。
「それならこれでもできる」というのは、ソフト生産技術の話では意味ないこと。
Re:よーしパパもLyee作っちゃうぞー (スコア:0)
ほんとにそんなことが成り立つというならば、
(使えるのだから)Lyeeは大成功してるか、
逆に(不要だと最初から見抜かれて)最初から立ち上がることも出来なかったか、
どちらかになっていたでしょうね。
Lyeeを使っての開発も、「やってできないことは無い」といえちゃいますよ。
でもそういう問題じゃないのでしょう?
上のはほんと見るからに下らないコードだけど、
それはLyeeと同じくらいの価値だということなんじゃない?
Re:よーしパパもLyee作っちゃうぞー (スコア:0)
えーと、Lyeeにはその機能(しかもそのレベル)しかないんでしょうか?