LoginSignup
2
0

【Rails】メソッドの中でメソッドを定義したらRuboCopに怒られたゾ

Last updated at Posted at 2024-03-10

どうもこんにちは。

今回は、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からは何も言われなくなりました!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0