最近新たにRubyを勉強し始めました。

 いままで、C、PASCAL、C++、VB、Perlなどを習得し、実際かなりコードを書いています。
 さてRubyをいじり始めて最初に嵌ったのが、クラスの取り違えでした。Stringを返すと思ったメソッドが、Arrayを返していて、Stringとの比較がFalseになっていました。 (3時間以上一箇所で悩んで、ベッドに入って、思い出してチェックして解決できました)
 変数に型がなく、なおかつ全てがオブジェクトの言語というの初めての経験で、結構とまどっています。

 さて、Rubyをプログラミングするにあたって、他の言語と違って気をつけるところはどこですか?
(今回の教訓:常識と違った挙動をしたときは、クラス名を確かめる)

回答の条件
  • 1人5回まで
  • 200 ptで終了
  • 登録:
  • 終了:2007/01/02 19:05:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答12件)

ただいまのポイント : ポイント15 pt / 200 pt ツリー表示 | 新着順
 

メジャーバージョンアップなら yna19622007/01/01 15:08:31

2.0へのバージョンアップなら許される仕様変更ですね。

ただ、一種のオプションやプログマで1.8時代の仕様のように使えるようにしないと、困るのでないでしょうか?

個人的には新しい仕様のほうが、実際に使われるパターンから見ると自然な気がします。同じ名前で複数のテキストボックスを使うことはほとんど考えられません。チェックボックスを除いて実際にはほとんど使用されないパターンのために、すべて配列でアクセスさせる必要は感じません。インプリメントするほうは面倒だろうけど、今の仕様はライブラリ提供側のスタンス立ったコードだと思います。

多少は嵌りますね yna19622007/01/01 14:59:57

明示的に書く癖をつけているので、あまり以下のような構文は書きませんね。

  if(ptr) x = *ptr++;

癖として以下のように書くようにしています。

  if(ptr != NULL) x = *ptr++;

安定版と開発版 しおり2006/12/30 12:24:07

1.8系列は安定版で、1.9系列は開発版です。

まずはリファレンスマニュアルから しおり2006/12/30 12:10:58

まずはリファレンスマニュアルを読まれると良いのではないでしょうか?

  • Rubyリファレンスマニュアル - Ruby FAQ

http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ

  • Rubyリファレンスマニュアル - Rubyの落とし穴

http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby%A4%CE%CD%EE%...

もしかして、、、 yna19622006/12/28 00:20:03

a + bとa+bは、aの+メソッドを、引数bで呼び出すと解釈される。

a +bは、aメソッドを引数+bで呼び出すと解釈されるのでしょうか?

いえ、なんとなくですが garyo2006/12/28 00:19:55

matzさんのこだわりを感じますね。

C系のプログラマはあせりそうですが、なれると素直な実装で納得できると思います。

0が真になるって(^_^;) yna19622006/12/28 00:17:13

 空文字列が真になるって例文では書いてありましたが、数字0もオブジェクトなので真なのですね。今回も、ハッシュにキーが存在しなくて、nilになったときに、nilが空文字列にならないので、面倒な言語だなと思いましたが、嵌りそうです。

if val != 0 then

    puts "true"

else

    puts "false"

end

 こう書かなくてならないのですね。

nilとfalse以外は真 garyo2006/12/27 20:49:25

nilとfalse以外は真なので0も真になり以下のようになります。

if 0 then

puts "true"

else

puts "false"

end

以下のようなときに式の値は0でもtrueになります。

if /Ruby/=~"Ruby" then

puts "true"

else

puts "false"

end

空白 garyo2006/12/27 20:44:55

a+b と

a + b はOKですが

a +b はNGです

たぶん garyo2006/12/27 20:42:32

lolipopはRuby1.8.2を使ってますが、1.8.5や1.9.0にあげたら悲鳴の上がるサイトがたくさんでそうな気がします。

特にWEB系は進化が激しいのでまだ枯れていないのだと思いますよ。

バージョンによる差が大きい? yna19622006/12/27 18:28:23

 マイナーバージョンアップによって、cgiライブラリのような汎用クラスの使い方が変わるのですか?

 うーん、まだ、発展途上なのでしょうか?

 それとも、1.9.0は、2.0(公開標準版)を作るためのβテスト版なのでしょうか?


 

驚き最小の原則 garyo2006/12/27 00:56:41

私も最近Rubyを始めました。

驚き最小の原則 - Wikipedia

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の場合)

 

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません