Quelles sont les conventions pour cela?
J'utilise le style suivant, mais je ne suis pas sûr que ce soit le préféré car si je manque un point à la fin, je peux rencontrer beaucoup de problèmes sans m'en rendre compte.
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 # ....
Alors, quelles sont les conventions pour chaîner les méthodes sur plusieurs lignes et laquelle devrais-je préférer?
[~ # ~] note [~ # ~] : Je n'ai pas pu trouver un bon exemple dans le Guide de style de codage Ruby =.
Il y a en fait une section à ce sujet dans le Ruby style guide :
Adoptez un style de chaînage de méthode multi-lignes cohérent. Il existe deux styles populaires dans la communauté Ruby, tous deux considérés comme bons - leader
.
(Option A) et à la fin.
(Option B).
(Option A) Lorsque vous continuez un appel de méthode chaînée sur une autre ligne, conservez le
.
sur la deuxième ligne.# 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
(Option B) Lorsque vous continuez un appel de méthode chaînée sur une autre ligne, incluez le
.
sur la première ligne pour indiquer que l'expression continue.# 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
Une discussion sur les mérites des deux styles alternatifs peut être trouvée ici .
Dans Ruby 1.9+, il est possible d'écrire comme ceci:
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}
Beaucoup plus lisible, je pense.
La raison pour laquelle j'ai choisi le point à la fin de la ligne est qu'il vous permettra de coller du code dans une session IRB. En outre, vous ne pouvez pas commenter les lignes au milieu du code multiligne si vous utilisez les points au début des lignes. Voici une bonne discussion à lire: https://github.com/bbatsov/Ruby-style-guide/pull/176