Tech Racho エンジニアの「?」を「!」に。
  • 開発

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`定数と`__END__`で扱う(翻訳)

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


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。