概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Idiosyncratic Ruby: Naming Too Good
- 原文公開日: 2017/12/25
- 著者: Jan Lelis
- サイト: Idiosyncratic Ruby
日本語タイトルは内容に即したものにしました。
Ruby: 変数名やメソッド名などで避けるべき名前(翻訳)
Rubyの変数名/パラメータ名/メソッド名に使う識別子として使うべきでない単語がいくつかあります。そうした単語はコアのメソッドやキーワードと衝突するためです。
Rubyのキーワードをメソッド名に使わない限り、Rubyに怒られることはありません。しかしそれ以外にも既存のメソッド名は避ける方がよいことがしばしばあります。そうした名前は後々バグにつながる可能性があり、後から来た開発者が混乱します。後で名前を変更するという手もあるにはありますが、変更漏れがあると動作が期待とまったく異なってしまいます。さらにデバッグも困難になります。
単純な回避法としては、重要な識別子の冒頭に_
を追加する方法があります。変数名によっては次のような名前を欲しがることがありますが、そのまま使うべきではありません(またはそもそも使えません)。
class
class
はキーワードであり、次のコードは無効です。
class = Thread
コードでクラスを参照する場合に最もよく使われるのは、代わりにklass
を使うという慣習です。
in
ストリームで使われているin
は、めったに使われないキーワードによってよい命名が妨げられる例です(in
はfor
ループ構文の一部として使われます)。
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
と衝突します。