プログラミングは面白い

プログラミングの事を中心に色々書いていきます

Rubyのお勉強

Rubyの勉強をしたのでメモっておきます。
基本的な事ですが、ちょっと気になる部分があったので。
pythonと比較しながら勉強すると通じる部分があって理解が深まります。
今回は割りとRubyオリジナルな部分が多い気がしますが。

まずはif修飾子とかいうのについて

a = 7
b = 1
# bが1であればaを5倍にする
if b == 1
    a *= 5
end
puts a    # => 35

これは普通のif文の書き方。
if修飾子を使った場合

a = 7
b = 1
# bが1であればaを5倍にする
a *= 5 if b == 1
puts a   # => 35

pythonにはif文省略出来るのなかったと思いますけど、これ便利ですねー。 endがいらないのが私的に好きです。 内包表記的な感じかな? そこそこ使われるのでしょうか?
私は隙あらば使っていきたい文法の一つですね。

んで、お次はメソッドの戻り値について
pythonでは戻り値にはreturnを使いますが、Rubyでは使わないようですね。
なぜなら、最後に評価された式がメソッドの戻り値になるのが理由みたいです。
これが何だか違和感凄いんですよねー。
returnも使えるらしいのですが、使い所はpythonとは全然違います。
メソッドを途中で抜ける場合に使われることが多いそうです。

def greeting(country)
  # countryがnilならメッセージを返してメソッドを抜ける
  # (nil?はオブジェクトがnilの場合にtrueを返すメソッド)
  return 'countryを入力してください' if country.nil?

  if country == 'japan'
    'こんにちは'
  else
    'hello'
  end
end

puts greeting('japan')    # => こんにちは
puts greeting(nil)          # => countryを入力してください

なんかメソッドを抜けるって言うのもあまりピンと来ないのですが、こんな使い方をするようです。
さりげなく出てきた、.nil?というメソッドにもちょっと驚きました。
こんなメソッドがあるとは。
returnの使い方はちょっと慣れないとしっくりこなさそうです。

最後に、メソッドの引数のカッコの省略です。
このカッコの省略はpythonにはないと思うので、これまたしっくり来ません。
引数のないメソッドなんかはカッコを省略して書く事が多いらしいです。
そもそも、putsとかprintとかもカッコ使えるけど省略してるらしいですね。
python3系はprintでもカッコがないとエラーを吐くので地味に違和感ありますね。

def say_hello
    'へろー'
end

こんな感じでカッコを省略するようです。
引数がある関数もカッコを省略出来るらしいのですが、これやめて欲しいですね(笑)
主流じゃないらしいですけど、そうゆう人もいるのかな?パっとみどこまでが関数なのか分かりづらそうです。

ちなみに、現在はこの本で勉強をしています。

基礎に関しては先日paizaがキャンペーンでruby講習が無料だったので終わらせました。
この本はある程度基礎が出来てればオススメらしいです。
Rubyはほどほどにpythonを頑張ります。