どちらか一方のベストプラクティスはありますか? 私はOderskyらによるScalaの本を読んでいます。infix は多くの Collections API 関数に使用されているようですが、ドットはプログラマー定義の関数用に予約されています。
4 に答える
私は個人的にこれに関する厳格なルールはありませんが、シンボリックなメソッド名には中置記法を使用し、英数字にはドット記法を使用する傾向があります。
中置記法により、後でコードを変更するのが面倒になります。下記は用例です。
次のコード行があるとします。
xs filter { f } map { g }
後の時点でtoList
、最後に a を追加する必要があるとします。あなたはそう言います:
xs filter { f } map { g } toList
これにより、セミコロンの推論の問題が発生する可能性があります。これらの問題を回避するには、最後にセミコロンを置くか、改行を入れます。私の意見では、どちらのオプションも醜いです。このすべてのナンセンスを避けるために、私はxs.filter(f).map(g)
. この構文を使用すると、常に簡単にリファクタリングできます。
別の例: コードに次のコードがあるとします。
if(foo contains bar) { ..
たとえば、条件を否定する必要があります。次のように変更すると:
if(!foo contains bar) { ..
残念。これは として解析され(!foo).contains(bar)
ます。私たちが望んでいたものではありません。
または、さらに新しい条件を追加する必要があり、それを次のように変更するとします。
if(foo contains bar && cond) { ..
もう一つの残念。これは として解析されfoo.contains(bar.&&(cond))
ます。繰り返しますが、私たちが望んでいたものではありません。
もちろん、たくさんの括弧を追加することもできますが、それはドット表記と比較して見苦しく、読みにくく、編集しにくいものです。
さて、上で述べたことはすべてシンボリックメソッド名にも当てはまります。ただし、シンボリック メソッドはドット構文で使用すると不自然に見えるため、中置構文を使用することを好みます。
上記のガイドラインの 1 つの例外: 内部 DSL。それらは通常、ドキュメンテーション/例 (通常は中置記法を使用する) で規定されている方法で記述されたときに解析の問題が発生しないように注意して作成されます。
それは個人的な好みの問題です。どちらのスタイルを使用するかは、何がコードを最も読みやすくするかに基づいて決定する必要があります。
ただし、ドットと括弧を省略できる機能は特定の構文構造に限られていることに注意してください。
公式の Scala サイト ドキュメントには、ドット表記よりも中置表記を適切に使用する方法を説明する優れたスタイル ガイドがあります。
サフィックス表記:
names.toList
// is the same as
names toList // Unsafe, don't use!
アリティ-1:
// right!
names foreach (n => println(n))
names mkString ","
optStr getOrElse "<empty>"
// wrong!
javaList add item
高階関数:
// wrong!
names.map (_.toUpperCase).filter (_.length > 5)
// right!
names map (_.toUpperCase) filter (_.length > 5)
シンボリック メソッド/演算子:
// right!
"daniel" + " " + "Spiewak"
// wrong!
"daniel"+" "+"spiewak"