お世話になっております。
Rubyで使われるブロックやProc,lambdaの使いどころがよくわかりません。
検索すれば情報がたくさん出てくるので、コードの理解はできるのですが、
「なぜそのように書かねばならないのか(または書いたほうがいいのか)」
が理解できません。
具体的には、わざわざ難しく書かなくても普通の関数ではいけないのかと思ってしまいます。
下記に例を示します。
ruby
1# http://www.atmarkit.co.jp/ait/articles/1409/29/news035_2.html 2# サンプルコード block02.rbを一部簡略化 3 4def arithmetic_sequence(init: 1, diff: 1, count: 10) 5 current = init 6 count.times do 7 yield(current) 8 current += diff 9 end 10end 11 12arithmetic_sequence(init: 2, diff: 3, count: 5) do |n| 13 puts n 14end
このコードは下記のように書き換えられると思います。
ruby
1def arithmetic_sequence(init: 1, diff: 1, count: 10) 2 current = init 3 count.times do 4 puts current # <= ここがyieldから変わっただけ 5 current += diff 6 end 7end 8 9arithmetic_sequence(init: 1, diff: 4, count: 10)
例が悪いかもしれませんが、要はyield
と書いてあるところでブロック内の処理をする、ということだと思います。
ならばブロック内の処理をdef...end
で関数定義し、yield
と書いてあるところで呼び出せばいいだけ、と思ってしまいます(または上記例のようにyieldの箇所をそのままputs
のように置き換える)
ブロックやProcを説明しているサイトは大抵「例が悪いが」とか「ありがたみが薄いかも」という注釈があるため、処理自体は理解できても、メリットが伝わりません。どういう場面で使うのか、具体的にメリットが感じられる例をご紹介頂けないでしょうか。
どういう流れでProcやLambdaを定義しようと思いつくのか、その思考回路でも構いません。
Qiitaの記事に『例えば、開発者Aが「5という数で好きな事をしてもらうメソッドを作ろう」と考えた場合』とあるような形です(この例もメリットは感じられませんでしたが。。)
依頼ばかりの質問で申し訳ないですが、よろしくお願いいたします。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/02 05:15 編集
2017/05/02 05:59