いままで、C、PASCAL、C++、VB、Perlなどを習得し、実際かなりコードを書いています。
さてRubyをいじり始めて最初に嵌ったのが、クラスの取り違えでした。Stringを返すと思ったメソッドが、Arrayを返していて、Stringとの比較がFalseになっていました。 (3時間以上一箇所で悩んで、ベッドに入って、思い出してチェックして解決できました)
変数に型がなく、なおかつ全てがオブジェクトの言語というの初めての経験で、結構とまどっています。
さて、Rubyをプログラミングするにあたって、他の言語と違って気をつけるところはどこですか?
(今回の教訓:常識と違った挙動をしたときは、クラス名を確かめる)
明示的に書く癖をつけているので、あまり以下のような構文は書きませんね。
if(ptr) x = *ptr++;
癖として以下のように書くようにしています。
if(ptr != NULL) x = *ptr++;
1.8系列は安定版で、1.9系列は開発版です。
まずはリファレンスマニュアルを読まれると良いのではないでしょうか?
http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby%A4%CE%CD%EE%...
a + bとa+bは、aの+メソッドを、引数bで呼び出すと解釈される。
a +bは、aメソッドを引数+bで呼び出すと解釈されるのでしょうか?
matzさんのこだわりを感じますね。
C系のプログラマはあせりそうですが、なれると素直な実装で納得できると思います。
空文字列が真になるって例文では書いてありましたが、数字0もオブジェクトなので真なのですね。今回も、ハッシュにキーが存在しなくて、nilになったときに、nilが空文字列にならないので、面倒な言語だなと思いましたが、嵌りそうです。
if val != 0 then
puts "true"
else
puts "false"
end
こう書かなくてならないのですね。
nilとfalse以外は真なので0も真になり以下のようになります。
if 0 then
puts "true"
else
puts "false"
end
以下のようなときに式の値は0でもtrueになります。
if /Ruby/=~"Ruby" then
puts "true"
else
puts "false"
end
a+b と
a + b はOKですが
a +b はNGです
lolipopはRuby1.8.2を使ってますが、1.8.5や1.9.0にあげたら悲鳴の上がるサイトがたくさんでそうな気がします。
特にWEB系は進化が激しいのでまだ枯れていないのだと思いますよ。
マイナーバージョンアップによって、cgiライブラリのような汎用クラスの使い方が変わるのですか?
うーん、まだ、発展途上なのでしょうか?
それとも、1.9.0は、2.0(公開標準版)を作るためのβテスト版なのでしょうか?
私も最近Rubyを始めました。
Rubyの作者まつもとゆきひろは、その言語設計ポリシーとして一時期「驚き最小の原則」を挙げていた。
なので、何となく予想がついて慣れると楽です。
ただ、問題は文法でなくてバージョン間の差異が激しいように思います。
http://q.hatena.ne.jp/1164779081
http://q.hatena.ne.jp/1164332804
現在以下のようにバージョンを変えました
Ruby 1.9.0→Ruby1.8.5→Ruby1.8.2→Ruby1.8.5→Ruby1.8.4
http://q.hatena.ne.jp/1164944279
こちらで質問してみましたが、Ruby1.8.4がExerbもつかえ、Ruby on Rails 1.1でも推奨されているので今の所のお勧めのようです(Windowsの場合)
2.0へのバージョンアップなら許される仕様変更ですね。
ただ、一種のオプションやプログマで1.8時代の仕様のように使えるようにしないと、困るのでないでしょうか?
個人的には新しい仕様のほうが、実際に使われるパターンから見ると自然な気がします。同じ名前で複数のテキストボックスを使うことはほとんど考えられません。チェックボックスを除いて実際にはほとんど使用されないパターンのために、すべて配列でアクセスさせる必要は感じません。インプリメントするほうは面倒だろうけど、今の仕様はライブラリ提供側のスタンス立ったコードだと思います。