Ad Network

あわせて読みたい

  • あわせて読みたい

« 殻にヒビが... | Main | 会社のカルチャー作りの大切さ »

教えながら学ぶRuby:イテレータに片思い

 ということでやっとRubyの勉強を始めた私だが、「何かを学ぶには人に教えるのが一番」というポリシーの私としては、早速Rubyに関するエントリーを書かずにはいられない。

 Rubyという言語に関しては色々な意見があるとは思うが、私が(いまのところ)一番気に入っているのはイテレータという考え方。これは美しい。できることならば、forとかwhileのない言語にしてくれればもっと美しかったのにと思うぐらいだ。ここからしばらくは、forとwhileを一切使わずにどこまで出来るかを試してみようと思う。

 そう思いながら読み始めた「オブジェクト指向スクリプト言語Ruby(以下「Ruby本」)」。Rubyの生みの親であるまつもとゆきひろ氏自身の手になるものだ。彼なりのイテレータへの思い入れが伝わってくるに違いない...

 ところが、である。

 この本の最初の方に出てくるサンプルがなぜかイテレータを使わずにwhileとforで書かれているのだ。うーん、イテレータに対する私の思いは片思いなのか?と思いながらも、それぞれのサンプルをイテレータを使って書き直して、「こっちの方が美しい」と自己満足に浸っている私である。

 ということで、ここで問題。以下の二つのプログラムをfor/whileを使わずにイテレータで書き直してみていただきたい。私はどちらの例も、イテレータで書いた方がずっと美しいと思うのだが、いかがだろう。

問題1(「Ruby本」ページ42より引用)

def hello(to, *mesg)
 print "Hello, ", to, ".\n"
 print "-- message -- \n"
 for m in mesg
  print m, "\n"
 end
end

問題2(「Ruby本」ページ66より引用)

def fact(n)
 return 1 if n==0
 f=1
 while n>0
  f*=n
  n -= 1
 end
 return f
end

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d8341c4f9853ef00e54eefb43e8833

Listed below are links to weblogs that reference 教えながら学ぶRuby:イテレータに片思い:

» [Ruby][Program]ブログで学ぶRuby from プログラミングのこととか
ここで問題。以下の二つのプログラムをfor/whileを使わずにイテレータで書き直してみていただきたい。私はどちらの例も、イテレータで書いた方がずっと美しいと思うのだが、いかがだろう。 Life is beautiful: 教えながら学ぶRuby:イテレータに片思い Emacs に ruby-mode ... [Read More]

» [ruby] やってみた。 from nyaxtのPC作業ログ
http://satoshi.blogs.com/life/2007/10/ruby.html 題意無視だけど、これにイテレータつかうことはないと思うなぁ。 #!/usr/bin/env ruby def hello(to, *mesg) puts Hello, #{to}. puts -- message -- puts mesg.join(n) end hello(#3... [Read More]

» [ruby] やってみた。 from nyaxtのPC作業ログ
ということで、ここで問題。以下の二つのプログラムをfor/whileを使わずにイテレータで書き直してみていただきたい。私はどちらの例も、イテレータで書いた方がずっと美しいと思うのだが、いかがだろう。 http://satoshi.blogs.com/life/2007/10/ruby.html 題意無視だけど、... [Read More]

» [Ruby] Rubyを触ってみた 〜教えながら学ぶRuby:イテレータに片思い〜より from All the world’s is a stage.
いい機会だと思ってやってみました。 http://satoshi.blogs.com/life/2007/10/ruby.html ... ということで、ここで問題。以下の二つのプログラムをfor/whileを使わずにイテレータで書き直してみていただきたい。私はどちらの例も、イテレータで 書いた方がずっと美しいと思... [Read More]

» 自分もイテレータ好き。 from o64vv4の日記
Life is beautiful: 教えながら学ぶRuby:イテレータに片思い  Rubyという言語に関しては色々な意見があるとは思うが、私が(いまのところ)一番気に入っているのはイテレータという考え方。これは美しい。 自分もイテレータには新鮮な驚きがありました。 で、さっそくこち... [Read More]

» やってみた from Wind Report
教えながら学ぶRuby:イテレータに片思いにおける出題への回答。問1の解def hello(to, *mesg) puts Hello, #{to}. puts -- message -- mesg.each do |m| puts m end end問2の解def fact(n) f ... [Read More]

» [技術][Ruby]イテレータラヴ from idesaku blog
えぇ、おれもイテレータ好きですよ。 Rubyという言語に関しては色々な意見があるとは思うが、私が(いまのところ)一番気に入っているのはイテレータという考え方。これは美しい。できることならば、forとかwhileのない言語にしてくれればもっと美しかったのにと思うぐらい... [Read More]

» Rubyはじめました5:イテレータで書き換えてみた from WEBプログラマー+WEBデザイナーなZARU日記
Satoshi NakajimaさんのLife is beautifulでRubyお題が出ていたのでやってみた。かなり出遅れているけど。 ということで、ここで問題。以下の二つのプログラムをfor/whileを使わずにイテレータで書き直してみ...... [Read More]

» [Ruby]「Ruby本」が出た頃のこと from Tociyuki::Diary
「オブジェクト指向スクリプト言語Ruby」(以下「Ruby本」)の最初に出てくるサンプルが Perl 風の記述になっているのは、執筆当時の 1999 年に Ruby は今ほどメジャーな言語ではなく、同類のスクリプト言語として当時は既にメジャーであった Perl の利用者を想定読者としたか... [Read More]

Comments

mamamoto

(to *mesg)のところカンマが抜けてるのでは。
あとforのところのmsgはmesgでしょうか。

satoshi

すばやいご指摘、ありがとうございます。修正しました。

shunsuk

Ruby初心者です。問題2の階乗を求めるプログラムを1行で書いてみました。
「n!(nの階乗)を求めるプログラムを1行で書いてみる。(http://d.hatena.ne.jp/shunsuk/20070918/1190106920)」

Post a comment

This weblog only allows comments from registered users. To comment, please Sign In.