目次
実に3年ぶりくらいにゆっくりできる日々が訪れたので、積読状態の本を消化しようと「7つの言語 7つの世界」を読み始めました。
せっかくブログも始めたので、備忘録も兼ねて感想などを書いていこうかと。
この本ですが、以下の7つの言語についてエッセンスがまとめられています。
- Ruby
- Io
- Prolog
- Scala
- Erlang
- Clojure
- Haskell
まずはRubyからです。 ここ2年ほどRuby(Rails)に関連する仕事をしていたのですが、Ruby周りはプロフェッショナルな方たちがいたので、きちんと勉強していないことがこの本を読み始めてわかりました。
ということで、前置きはそれなりな記述ですが、感想は適当になりますので、あしからず。
感想:
irbが便利。簡単に動作確認ができるのが便利。Javaだとコンパイルが必要。 変数を定義する必要がない気軽さはある。 必ず戻り値が帰ってくる「puts ‘hello, world’」でも。=>nil putsは楽かな。まぁ、Eclipse使ってると一緒か。 「4」もオブジェクトとなっている。ここもJavaと異なる。 (x <= 4).classという記述でTrueClassというクラスだとわかる。 unlessが結構便利。ただし、記述方法が多数あるので、可読性は落ちる?場合によってはわかりやすいか? あと、括弧()がないのも慣れない。(まぁ、これは慣れの問題。ただし、カッコありでもOK) {}のかわりがif~endなのはわかりやすいかも。 if not はわかりやすくていい。!はだいたい間違えるから。。。 whileも1行形式で書けるのか。「x = x + 1 while x < 10」慣れないと厳しい。個人的には混在すると読めないなぁ。 nilとfalse以外がすべてtrueに評価されるのは厳しいのでは?型のチェックがないので、booleanが入ってると想定してない場合に挙動を読めないかも。実行時に動作が変だなーと思うことが出てきそう。 and、orの記述が使えるのは読みやすい。ただし、混在するとやっかい。 判定結果が明らかになった時点で実行が中止されるのは普通。&、|の挙動はJava同様。
やりながら疑問点:
- NetBeansとかIDEでフォーマッタやcheckstyleみたいなのはあるのか?
- コーディング規約はあるのか?(2日目に「習慣」があるらしいとの記載があった。)
- 必ず戻り値が戻ってくるのは、必ずGC対象になりうるオブジェクトが生成されるってことか?
ここまでが感想と疑問点。で、この本の面白いところは最後に調査、コーディングを行う練習問題的なものがある部分です。 一応、私なりの答えを書いておこうかと。(一覧などで見えないようにはしますが、ネタバレがあるので注意してください。)
ということで、セルフスタディの回答。
(探してみよう)
- ○Ruby API
- http://ruby-doc.org/core/
- ○Programming Ruby: The Pragmatic Programmer's Guideのオンライン版
- http://www.ruby-doc.org/docs/ProgrammingRuby/参考資料:http://www.swlab.it.okayama-u.ac.jp/man/ruby/uguide/uguide00.html
- ○文字列の一部を置換するメソッド
- "hello".gsub(/[aeiou]/, '*')
- ○Rubyの正規表現に関する情報
- 日本語:http://www.namaraii.com/rubytips/?%A5%D1%A5%BF%A1%BC%A5%F3%A5%DE%A5%C3%A5%C1 英語の試せるサイト(irbが動けば必要ないかもね):http://rubular.com/
- ○Rubyの範囲に関する情報
- 日本語:http://doc.okkez.net/static/192/class/Range.html 英語:RDocのRangeクラスに相当するのかな。
(試してみよう)
- ○文字列"Hello, world"を出力する。
- ```
- ○文字列"Hello, Ruby"の中の"Ruby"という単語のインデックスを検索する。
- ```
s = ‘Hello, Ruby’ s.index(‘Ruby’) //indexofで間違えた
<dt>○自分の名前を10回出力する。</dt> <dd>``` ※まずは、正統派。 i = 0 while i < 10 puts "johtani" i = i + 1 end
※Rangeを利用 (1..10).each {|n| puts "johtani #{n}"}
※forもあるよね for i in 1..10 puts "johtani" end
※timesってのもある。(0始まり) 10.times {|n| puts "johtani #{n}"}
※uptoなんてのもあるのか。 1.upto(10) {|n| puts "johtani #{n}"}
※downtoも 10.downto(1) {puts "johtani"}
※stepもある。 10.step(1, -1) {puts "johtani"}//step(上限,ステップ) ```</dd> <dt>○文字列"This is sentence number 1"の1を10までカウントアップしながら10回出力する。</dt> <dd>``` 1.upto(10) {|n| puts "This is sentence number #{n}"} ※あとは上記と一緒 ```</dd> <dt>○ファイルに格納されているRubyプログラムを実行する。</dt> <dd>``` vi hoge.rb ※#上記処理をどれか記述
$ ruby hoge.rb
- ○ボーナス問題:少し物足りない人は、乱数を選択するプログラムを書いてみてほしい。プレーヤーに数字を選択してもらい、その数字が生成された乱数よりも大きいか小さいかを返す。
-
```
-- coding: utf-8 --
range = (1..100) while true puts “#{range.min}から#{range.max}の数字を入力してください” n = gets n = n.to_i if range.include?(n) break; else puts “範囲外の入力値です。もう一度入力してください” end end i = rand(range.max) if i < n puts “入力「#{n}」は乱数「#{i}」より大きいです” elsif i == n puts “入力「#{n}」は乱数「#{i}」と等しいです” else puts “入力「#{n}」は乱数「#{i}」より小さいです” end
</dl> とまぁ、こんな感じ。こんな方法もあるよ、ここおかしくない?などあれば、コメント欄まで。 リアクション大募集です。 はやく、シンタックスライター導入せねば。
comments powered by Disqus
See Also by Hugo
- 「7つの言語 7つの世界」 Ruby 2日目(Jugemより移植)
- 「7つの言語 7つの世界」 Io 1日目(Jugemより移植)
- 「7つの言語 7つの世界」 Ruby 3日目(最終日)(Jugemより移植)
- JustTechTalk#02 形態素解析のあれやこれや@ジャストシステムに参加しました。
- Domain-Specific Pretraining for Vertical Search: Case Study on Biomedical Literatureという論文を読んだ