Ruby の メソッド は def...end で定義されます。Ruby は柔軟で表現力豊かな引数処理を備えています — デフォルト値、キーワード引数、可変個の引数に対するスプラット演算子 (*)、ブロック — さらに 最後の式が暗黙的な戻り値 という慣例があります。
基本的なメソッドと暗黙的な戻り値
()
a + b
add(, )
()
Ruby メソッドは 最後に評価された式を自動的に返します — return を明示的に書くことはほとんどありません (早期リターンの場合のみ使用)。これはイディオマティックです。
# default arguments
def greet(name, greeting = "Hello")
"#{greeting}, #{name}"
end
greet("Ann") # "Hello, Ann"
greet("Ann", "Hi") # "Hi, Ann"
# KEYWORD arguments (clearer, order-independent) — common in modern Ruby
def create_user(name:, age: 0, role: :user)
# name is required (no default); age/role optional
end
create_user(name: "Ann", role: :admin) # pass by keyword — readable
キーワード引数 (name:) は現代的でイディオマティックな Ruby です — 呼び出しが自己説明的で、引数の順序に依存しなくなります。
def sum(*numbers) # * collects extra positional args into an array
numbers.sum
end
sum(1, 2, 3, 4) # 10
def config(**options) # ** collects keyword args into a hash
options[:timeout]
end
config(timeout: 30, retries: 3)
*args は可変個の位置引数を配列にまとめ、**options はキーワード引数をハッシュにまとめます。
def valid?(x) # ? convention → returns a boolean (predicate method)
x > 0
end
def process!(data) # ! convention → modifies in place / is "dangerous"
data.map!(&:upcase)
end
命名規則: ? で終わるメソッドはブール値を返す (述語)、! は破壊的/イン・プレース版または「危険な」バージョンを示します。
メソッドは Ruby における振る舞いの基本的な構成要素であり、Ruby の柔軟で表現力豊かな引数処理と慣例を理解することは日常的に重要な知識です。
いくつかの側面は Ruby 独自のもので、知る価値があります: 暗黙的な戻り値 (メソッドは最後に評価された式を返すため、return はほとんど書きません — イディオマティックな Ruby はこれに依存します)、キーワード引数 (name: —明確で自己説明的で順序に依存しないメソッド呼び出しの現代的でイディオマティックな方法)、そして スプラット引数 (*args/**options で可変個の引数を処理)。
同様に重要なのは 命名規則 です — ? で終わるメソッドは述語でブール値を返します (valid?, empty?)、! で終わるメソッドは破壊的/イン・プレース版または「危険な」バージョンです (map!, sort!) — これらは Ruby と Rails 全体で蔓延しており、メソッドの振る舞いを一目で伝えます (! は通常「イン・プレースで修正」を意味することを知ることは、意図しない変異を避けるために重要です)。
Ruby の柔軟な引数処理 (デフォルト値、キーワード、スプラット)、暗黙的な戻り値のイディオム、そして ?/! 命名規則を使用したメソッド定義の方法を理解することは、イディオマティックな Ruby を書き読むための基礎です — これらの機能と規則は常に現れ、それらを把握すること (特にクリーン API のためのキーワード引数とメソッドの振る舞いを理解するための ?/! 規則) は、効果的な Ruby 開発のために本質的で頻繁に適用される知識です。