どうもこんにちは。
今回は、Railsでメソッドの中にメソッドを記述してコードを書いた時に、Rubocopに怒られたのでその対処法を紹介します。
Rubocopの導入方法は以下の記事で紹介しています。
実際に書いたコード
※ こんな感じで書いたという感じで書きます。
def display_calculate_result(x, y, z)
# 足し算メソッドを定義
def add_calculate(a, b)
result = a + b
result
end
# 掛け算メソッドを定義
def multiplication(add_result, c)
result = add_result * c
result
end
# 足し算メソッドを呼び出し
add_result = add_calculate(x, y)
# 掛け算メソッドを呼び出し
calculate_result = multiplication(add_result, z)
# display_calculate_resultメソッドが呼ばれた時に返す値
calculate_result
end
Rubocop実行時のエラー
app/helpers/samples_helper.rb:105:5: W: Lint/NestedMethodDefinition: Method definitions must not be nested. Use lambda instead.
def add_calculate(a, b) ...
^^^^^^^^^^^^^^^^^^^^^^^
app/helpers/samples_helper.rb:120:5: W: Lint/NestedMethodDefinition: Method definitions must not be nested. Use lambda instead.
def multiplication(add_result, c) ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lambda
使えやって怒られましたね...
では言われた通りにしましょう。
Lambda関数使ってみよう
メソッドをlambda関数に直してみました。
def display_calculate_result(x, y, z)
# 足し算メソッドを定義
add_calculate = lambda do |a, b|
result = a + b
result
end
# 掛け算メソッドを定義
multiplication = lambda do |add_result, c|
result = add_result * c
result
end
# 足し算メソッドを呼び出し
add_result = add_calculate.call(x, y)
# 掛け算メソッドを呼び出し
calculate_result = multiplication.call(add_result, z)
# display_calculate_resultメソッドが呼ばれた時に返す値
calculate_result
end
これでRubocopからは何も言われなくなりました!