くりにっき

ドリコムのプリキュアの人です

Rubyっぽさ

発端

最近仕事でとあるライブラリをforkしていじっているのですが、どうにもこういうも違和感ががが。
Rubyを書き始めて8ヶ月くらいですが、仕事で自社アプリのソースは結構読んでいるし、メジャーどころのRuby本(プログラミングRuby, The RSpec Book, リファクタリング Rubyエディション, メタプログラミングRubyなど)は読んでいるので目はまずまず肥えてきたと思ってます。

で、ふとこんなことをつぶやいたら



とレスがあったので書いてみます。

1. メソッドの最後のreturnは削る

rubyっぽくない

def get_value
  # do something

  return value
end

rubyっぽい

def get_value
  # do something

  value
end

2. 引数がたくさんある場合はHashにする

rubyっぽくない

def some_method(name, position, language="en")
  # do something
end

rubyっぽい

def some_method(args ={})
  name = args[:name]
  position = args[:position]
  language = args[:language] || "en"
  # do something
end

必須な引数は普通の変数にして、省略可能なオプション引数はHashにするという使い分けも一理あり

ArrayやHashの初期化は括弧の方がかっこいい *1

rubyっぽくない

values = Array.new
options = Hash.new

rubyっぽい

values = []
options = {}

文字列に変数を埋め込む時は #{〜} を使う

rubyっぽくない

suite_precure_count = 4
message = "届け"  + suite_precure_count.to_s + "人の組曲!"

JavaだとString+intだとintが暗黙的に toString() が呼ばれて連結できるのですが、Rubyだとできないのでto_sが必要

rubyっぽい

suite_precure_count = 4
message = "届け#{suite_precure_count}人の組曲!"

Javaだと変数埋め込みは ${〜} なのでいまだに間違えます。

                • -

自分の違和感を文章化してみたらこんなところですかねぇ。。。

rubyっぽい」「rubyっぽくない」はあくまで僕自身の主観です *2

スイートプリキュア♪ ボーカルベスト

スイートプリキュア♪ ボーカルベスト


プログラミング言語 Ruby

プログラミング言語 Ruby


The RSpec Book (Professional Ruby Series)

The RSpec Book (Professional Ruby Series)


リファクタリング:Rubyエディション

リファクタリング:Rubyエディション


メタプログラミングRuby

メタプログラミングRuby

*1:寒いギャグ

*2:本日のマサカリ投げ会場はここでーす!