【问题标题】:How to refactor a long line in Ruby如何在 Ruby 中重构一长串
【发布时间】:2017-06-22 12:22:46
【问题描述】:

我得到了这段代码,它提高了行长度限制超过了 Rubocop 违规:

return organisation_path(current_user.organisation) if current_user.organisation
return session[:previous_url] if session[:previous_url]
return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id
root_path

结束

限制超出倒数第二行。我正在尝试重构这条线来解决 Rubocop 的攻击。

我的第一次尝试是这样拆分:

return organisation_path(current_user.pending_organisation_id) if
  current_user.pending_organisation_id

但它看起来不可读。

我的第二次尝试是将这一行分解为一个方法,所以我创建了这个方法:

def pending_organization_path_for_current_user
  return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id
end

但是方法名又太长了,所以一行

 pending_organization_path_for_current_user if current_user.pending_organisation_id

超过了行长,因此该解决方案对我来说不可行。

所以我作为初学者的问题是我应该如何考虑重构这种情况?

【问题讨论】:

  • 简单地将 if 语句分成多行怎么样?
  • Rubocop 将生成 Guard Clause 攻击。

标签: ruby rubocop


【解决方案1】:

如果简单地将 if 语句分成多行呢?

if current_user.pending_organisation_id
  return organisation_path(current_user.pending_organisation_id)
end

【讨论】:

  • Rubocop 将生成 Guard Clause 攻击。
  • 您能否添加您编写的引发此攻击的确切代码?
  • 对不起。它没有提出保护条款,但我认为它会。
  • 这是一个解决方案,但我担心它会增加方法的大小。从代码质量的角度来看,它好吗?
  • 看不到任何关于代码质量的问题。它也比一个班轮更具可读性。
【解决方案2】:
return organisation_path(current_user.organisation) if current_user.organisation
return session[:previous_url] if session[:previous_url]
return root_path unless current_user.pending_organisation_id
organisation_path(current_user.pending_organisation_id)

【讨论】:

    【解决方案3】:

    我假设你不想调整 Rubocop 的设置来改变接受的样式,所以你可以这样修复它:

    if current_user.pending_organisation_id
      organisation_path(current_user.pending_organisation_id)
    end
    

    但是,有时更容易接受这是其中之一 您比 Rubocop 更了解的地方,所以只需添加一个例外:

    # rubocop:disable Style/WhateverLineLengthIsCalled
    return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id
    # rubocop:enable Style/WhateverLineLengthIsCalled
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多