下記サイトに記載されている規約を写経
(公式ではなく、多くのRubyistが利用する規約)
インデント、1行の桁数
- 基本
スペース2つ、タブはNG、一行80桁まで - caseとwhenは揃える(case式代入時を除く)
case num
when 1
p 1
when 2
p 2
else
p 3
end
# 代入時は揃えない(変数名の長さに依存するから)
num_value = case num
when 1 then p 1
when 2 then p 2
else 3
end
シンタックス
- 下記にはスペースを記述
- 演算子の前後(べき乗の前後を除く
**
)
sum = 1 + 2
- カンマ、コロン、セミコロンの後ろ
a, b = 1, 2
1 > 2 ? true : false; puts 'Hi'
- 中括弧の前後(開け閉じ両方)
[1, 2, 3].each { |e| puts e }
識別子
- モジュール・クラス名にはCamelCase
- 上記を含むファイル名には、メインクラスをdowncase
- 定数はCONST_NAME
- 変数やメソッドはsnake_case
括弧の省略
- 戻り値が無い場合は省略
-> function の呼び出しでは必ず括弧を付けて、 procedure の呼び出しでは必ず括弧を省略
なお - function - 戻り値が存在する「関数」
- procedure - 戻り値が存在しない「手続き」
def has_arg(args) # 省略しちゃだめ
end
def not_has_arg # 省略する
end
-
下記は例外
-
レシーバがあり、引数が存在しないときは省略
string.to_s
-
引数に*や&を含むとき
map(*args) map(&block)
メソッド引数括弧の空白
入れない
(エラーになる事もある)
def space(arg) # OK
end
def space( arg ) # NG
end
クラス、メソッド、モジュールの区切りには空行を入れる
class Hoge
def hoge
end
def fuga
end
end
class Foga
end
出来るだけforは避けてeachを利用
# OK
arr.each { |elm| puts elm }
# elmがブロックスコープに入らないため、構文外から呼び出せる
for elm in arr do
end
3項演算子をネストしない
# OK
if is_login
is_admin_login ? true : false_1
else
false_2
end
# う○こ
is_login ? (is_admin_login ? true : false_1) : false_2
elseが無い場合は後置if/unlessを利用
# OK
do_something if some_condiiton
# NG
if some_condition
do_condiiton
end
否定に!は利用せずunlessを利用
# OK
do_something unless some_condition
# NG (可読性に配慮して「unless」が用意されているため)
do_something ! some_condition