Rubyの勉強を初めてから、ただいまパーフェクトRubyとプログラミング言語Rubyという書籍を並行して進めていってます。この2冊は進行が随分と違うのですが、この2冊を同時に進めてみて気になったとこやらをあれこれツラツラと書いてみます。この進め方もなかなか面白いです。カニバサミ勉強法。
・数値じゃない?
to_i で数値化しないと、数値を入れようが、zero? そんなメソッド知らんと言われる。
#!/home/takeken/.rbenv/shims/ruby # coding: utf-8 n = ARGV[0].to_i if n.zero? puts '0でした' elsif n.even? puts '偶数です' elsif n.odd? puts '奇数です' end
理由はこれ(と思う)
irb(main):001:0> ARGV[0].class => NilClass irb(main):002:0> 1.class => Fixnum irb(main):003:0> ARGV[0].to_i.class => Fixnum
・こんな感じでもウゴク
何となく、これで動くんだって思ったので登録。
まだまだ慣れてない感じがありあり。
久しぶりにPythonを見て、閉じないんだ!って思うくらい馴染んでない。
#!/home/takeken/.rbenv/shims/ruby # coding: utf-8 class Hoge def moge yoge = 'roge' case yoge when 'roge' then 'Yes!' when 'woge' then 'no' end end end you = Hoge.new p you.moge [takeken@localhost ~]$ ruby test.rb "Yes!"
・ローカル変数の扱いはC言語の時と同じ感じだけれど
プロトタイプ宣言とかなくてクラスはライブラリでまとめてrequireするのがRuby… と思う。
でもRubyをやりだしてJqueryがまだ見れるようになった。
[takeken@localhost ~]$ ruby test.rb a Alice Bob Carol "Carol" "" [takeken@localhost ~]$ cat test.rb #!/home/takeken/.rbenv/shims/ruby # coding: utf-8 name = '' class Hoge def tage for name in %w(a Alice Bob Carol) puts name end p name end end hoge = Hoge.new() hoge.tage p name
であるからして〜、上と下は同じです。
分けて書いてみると変数がどうなっているか分かりやすいのかな。
[takeken@localhost ~]$ ruby test.rb a Alice Bob Carol "Carol" "" [takeken@localhost ~]$ cat test.rb #!/home/takeken/.rbenv/shims/ruby # coding: utf-8 require './hoge.rb' name = '' hoge = Hoge.new() hoge.tage p name [takeken@localhost ~]$ cat hoge.rb #!/home/takeken/.rbenv/shims/ruby # coding: utf-8 class Hoge def moge languages = %w(Perl Python Ruby) i=0 while i < languages.length puts "Hello, #{languages[i]}." i += 1 end end def tage for name in %w(a Alice Bob Carol) puts name end p name end end
・BEGINの扱い。
最初に読み込むBEGIN。実行結果を見てみると!!が出ていないのがわかる。
BEGINにいった後はまた上からだってのが分かりやすいと思ったスクリプト。
#!/home/takeken/.rbenv/shims/ruby # coding: utf-8 print " and " END { print "!!\n" } print "World\n" exit! BEGIN { print "Hello" } exit! [takeken@localhost ~]$ ruby hoge.rb Hello and World
・こんなのもありでオモロイ。
irb(main):002:0> printf("%.10f\n", Math.sqrt(2)) 1.4142135624 => nil
・エンコードにも色々あるらしい
p Encoding.default_external #デフォルト外部エンコーディング p Encoding.default_internal #デフォルト内部エンコーディング p Encoding.locale_charmap #現在のロケール
とりあえずパート1はこんな感じ。
ついにMacデビューしたー。んで色々とセットアップに追いやられていて数日間ほどRubyってなかったのですが、ぼちぼち出来上がりに近づいてきたので、Ubuntuの環境が移行し終わったらまたRubyな日々に戻る予定。他にも過去にC言語で書いたものをRubyで書きなおしても面白そうなのだけれど、ぼちぼちにしないと今年にやりたいことがやり終わらないかもしか。