Ruby: 変数名やメソッド名などで避けるべき名前(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

日本語タイトルは内容に即したものにしました。

Ruby: 変数名やメソッド名などで避けるべき名前(翻訳)

Rubyの変数名/パラメータ名/メソッド名に使う識別子として使うべきでない単語がいくつかあります。そうした単語はコアのメソッドやキーワードと衝突するためです。

Rubyのキーワードをメソッド名に使わない限り、Rubyに怒られることはありません。しかしそれ以外にも既存のメソッド名は避ける方がよいことがしばしばあります。そうした名前は後々バグにつながる可能性があり、後から来た開発者が混乱します。後で名前を変更するという手もあるにはありますが、変更漏れがあると動作が期待とまったく異なってしまいます。さらにデバッグも困難になります

単純な回避法としては、重要な識別子の冒頭に_を追加する方法があります。変数名によっては次のような名前を欲しがることがありますが、そのまま使うべきではありません(またはそもそも使えません)。

class

classはキーワードであり、次のコードは無効です。

class = Thread

コードでクラスを参照する場合に最もよく使われるのは、代わりにklassを使うという慣習です。

in

ストリームで使われているinは、めったに使われないキーワードによってよい命名が妨げられる例です(inforループ構文の一部として使われます)。

require 'open3'
Open3.popen3(cmd){ |in, out, err|
  # ...
}

method

以下はよくあるパターンです。

def send_somewhere(method, something)
  # ...
  public_send(method)
  # ...
end

上はObject#methodと衝突します。

hash

以下のハッシュ計算は、Object#hashと衝突します。

require "digest/sha2"
hash = Digest::SHA256.hexdigest "ö"

format

formatはキーワード引数によくある名前です。

def something(format: "json")
  # ...
end

これで動くこともありますが、Kernel#formatと衝突します。

display

Object#display避けるべき名前です。

関連記事

Ruby: 終わりのない巨大な`DATA`定数(翻訳)

Ruby: 正規表現の後方参照を「正しく」エスケープする方法(翻訳)

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ