他の言語に慣れた人がRubyを使ったときにつまずきがちな点

あと4つは募集中です

他の言語というかJavaしか知らなかった昔の自分がつまづいたような気がする点を4つ

メソッド名がJavaと違いすぎる

慣れるしかない…

Java

"hoge   ".trim();

Ruby

"hoge   ".strip

ダメなうらわざ、やったら負け

class String
  alias :trim :strip
end

"   hoge   ".trim

null/nilに対するメソッド呼び出し

JavaならNullPointerExceptionとなりますが、RubyではNoMethodError。Rubyはnilもオブジェクトなのでヌルポは無いのです。

エラーメッセージにfor nil:NilClassとあれば、メソッド未定義ではなく、変数の未初期化かもしれないのでそっちも調べよう。

NoMethodError: undefined method `hoge' for nil:NilClass

forループ?

無いです。timesを使いましょ

5.times { |e|
   puts e
}

for in構文はあるけど

for i in (0..4) 
  puts i
end

Rubyならeachですよね。

(0..4).each { |e| 
   puts e
}

eachやmapのようなEnumerableのブロック付きメソッドを使わないなら、Rubyを使う意味があまり無いと思う。

{}とdo endってどっちを使うのがいいの?何が違うの?

好きな方を使えばいいと思うよ

ただし、優先度が違うので以下のようにすると解釈が変わる

def hoge a
  puts a
  if block_given?
    yield
  else
    3
  end
end

hoge hoge(1) { 2 }
puts "--"
hoge hoge(1) do 2 end

結果

1
2
--
1
3

以下のように解釈されるようだ。

hoge(hoge(1) { 2 })  

hoge(hoge(1)) do 2 end