Rubyプログラマの発想

Pocket

「Lisp脳」の謎に迫る – Schemeプログラマの発想という僕の好きな記事があるのですが、Rubyプログラマの発想も同じだなーと、ふと思いました。

データの加工として考える

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

記事ではこの実装の例(手続き型)として、こんなコードが載っていますが、

これをRubyに書き直すと、こんなコードになるのではないでしょうか。

でもRubyプログラマのコードでこんなコードは、めったに見ません。大抵はSchemaプログラマの発想と同じく、

「とりあえず1から100までのリストを作れば良さそうだ」

と考えます。つまりここからがスタートです。

「mapを使ってこのリストを加工して、別のリストを返せばいいじゃん」

これは「mapを使ってこの配列を加工して、別の配列を返せばいいじゃん」って考えますね。

もっといろんな処理(例えば2で割り切れる数をnilにする)を加えたければ、この後ろにmapで処理を重ねていけば良いのです。

データを加工する部分をメソッド化して再利用できるようにしておく、というのは割とポピュラーですよね。

Rubyプログラマの人は関数型言語の経験がなくても、結果としてSchemaプログラマのような考え方をしているのが面白いなーと思いました。