web-dev-qa-db-ja.com

Ruby複数行にわたる呼び出しを連鎖するための規則

これの規則は何ですか?

私は次のスタイルを使用しますが、最後にドットを逃した場合、それを認識せずに多くの問題に遭遇する可能性があるため、それが好ましいスタイルであるかどうかはわかりません。

query = reservations_scope.for_company(current_company).joins{property.development}.
  group{property.development.id}.
  group{property.development.name}.
  group{property.number}.
  group{created_at}.
  group{price}.
  group{reservation_path}.
  group{company_id}.
  group{user_id}.
  group{fee_paid_date}.
  group{contract_exchanged_date}.
  group{deposit_paid_date}.
  group{cancelled_date}.
  select_with_reserving_agent_name_for(current_company, [
                                       "developments.id as dev_id",
                                       "developments.name as dev_name",
                                       "properties.number as prop_number",
                                       "reservations.created_at",
                                       "reservations.price",
                                       "reservations.fee_paid_date",
                                       "reservations.contract_exchanged_date",
                                       "reservations.deposit_paid_date",
                                       "reservations.cancelled_date"
  ]).reorder("developments.name")
query.to_a # ....

chainingメソッドの規則は何ですか複数行と私は好むべきですか?

[〜#〜] note [〜#〜]Rubyコーディングスタイルガイド から良い例が見つかりませんでした=。

42

Rubyスタイルガイド には実際にそのセクションがあります:

一貫した複数行のメソッドチェーンスタイルを採用します。 Rubyコミュニティには2つの人気のあるスタイルがあり、どちらも良いと考えられています-主要な.(オプションA)および末尾の.(オプションB)。

  • (オプションA)別の行でチェーンメソッドの呼び出しを続行する場合、. 2行目。

    # bad - need to consult first line to understand second line
    one.two.three.
      four
    
    # good - it's immediately clear what's going on the second line
    one.two.three
      .four
    
  • (オプションB)別の行でチェーンメソッドの呼び出しを続行する場合は、.最初の行で、式が継続することを示します。

    # bad - need to read ahead to the second line to know that the chain continues
    one.two.three
      .four
    
    # good - it's immediately clear that the expression continues beyond the first line
    one.two.three.
      four
    

両方の代替スタイルのメリットに関する議論は、 here にあります。

51
Bozhidar Batsov

Ruby 1.9+では、次のように書くことができます。

query = reservations_scope
  .for_company(current_company)
  .joins{property.development}
  .group{property.development.id}
  .group{property.development.name}
  .group{property.number}
  .group{created_at}
  .group{price}
  .group{reservation_path}
  .group{company_id}
  .group{user_id}

もっと読みやすいと思います。

32
detunized

行末でドットを選択する理由は、IRBセッションにコードを貼り付けることができるからです。また、行の先頭にドットを使用すると、複数行のコードの途中で行をコメント化できません。読むべきよい議論はここにあります: https://github.com/bbatsov/Ruby-style-guide/pull/176

10
rosenfeld