人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: yna1962
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:C++ Pascal Perl Ruby String
○ 状態 :終了
└ 回答数 : 12/12件

▽最新の回答へ

[1]驚き最小の原則 garyo

私も最近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の場合)


[2]>1 バージョンによる差が大きい? yna1962

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

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

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



[3]>2 たぶん garyo

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

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


[4]空白 garyo

a+b と

a + b はOKですが

a +b はNGです


[5]nilとfalse以外は真 garyo

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

if 0 then

puts "true"

else

puts "false"

end

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

if /Ruby/=~"Ruby" then

puts "true"

else

puts "false"

end


[6]>5 0が真になるって(^_^;) yna1962

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

if val != 0 then

    puts "true"

else

    puts "false"

end

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


[7]>6 いえ、なんとなくですが garyo

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

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


[8]>4 もしかして、、、 yna1962

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

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


[9]まずはリファレンスマニュアルから Bookmarker

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

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%...


[10]>2 安定版と開発版 Bookmarker

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


[11]>7 多少は嵌りますね yna1962

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

  if(ptr) x = *ptr++;

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

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


[12]>10 メジャーバージョンアップなら yna1962

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ