1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby]あなたはメソッドの再定義(alias_method)を理解しているか。

Posted at

alias_methodとは

alias_methodは、既存のメソッド名に新しいメソッド名を付けて再定義するメソッドのことです。
また、これによって古いメソッドを新しいメソッドの名前で呼び出すことをアラウンドエイリアスと言います。

class String
# lengthメソッドは文字列の長さを測定する
'ABC abc'.length #=> 7

  # lengthメソッドからreal_lengthメソッドという名前でメソッドを再定義
  alias_method :real_length, :length

  # 元のlengthメソッドをオーバーライド
  def length
    real_length > 10 ? 'Long' : 'Short'
  end

# 元のlengthメソッドの動きが可能(アラウンドエイリアス)
'ABC abc'.real_length #=> 7

# オーバーライドした内容で処理される
'ABC abc'.length #=> "Short"
end

aliasとalias_methodの違いとは

似た様なものでaliasというものもありますが、これは使い方等はほとんど変わらないですが、似て非なるものです。
下記の表がaliasとalias_methodの違いをまとめたものです。

aliasとalias_method対比表

説明 alias alias_method
メソッド名に文字列が使える 不可能 可能
グローバル変数に別名をつける 可能 不可能
メソッドである No Yes
キーワードである Yes No
オーバーライド 不可能 可能

まとめ

メソッドを再定義することで、元のメソッドを拡張しやすかったりするので、便利な機能ですね。
「別名をつける」と表現されることもありますが、自分的には「再定義する」といった表現の方が分かりやすいなと思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?