Scala Language
ベストプラクティス
サーチ…
備考
val、不変なオブジェクト、および副作用のないメソッドを好む。最初に彼らに手を伸ばしてください。特定の必要性とその正当性がある場合は、副作用のある変数、変更可能なオブジェクト、およびメソッドを使用します。
- Odersky、Spoon、VennersによるScalaプログラミング
このプレゼンテーションでは 、Oderskyの例と指針があります。
複雑にしないでおく
単純なタスクを過度に複雑化しないでください。ほとんどの場合、必要なのは以下のものだけです:
- 代数的データ型
- 構造的再帰
- モナドのようなAPI(
map
、flatMap
、fold
)
Scalaには次のような複雑なものがたくさんあります。
- 依存性注入のための
Cake pattern
またはReader Monad
。 -
implicit
引数として任意の値を渡す。
これらのことは、新規参入者にとっては明確ではありません。理解する前にそれらの使用を避けてください。実際の必要がない高度なコンセプトを使用すると、コードを難読化し、メンテナンス性を低下させます。
1つの表現にあまりに多くの梱包をしないでください。
- 計算単位の意味のある名前を見つける。
- 使用
for
内包表記またはmap
一緒に計算を結合します。
次のようなものがあるとしましょう:
if (userAuthorized.nonEmtpy) {
makeRequest().map {
case Success(respone) =>
someProcessing(..)
if (resendToUser) {
sendToUser(...)
}
...
}
}
すべての関数がEither
または別のValidation
ような型を返す場合は、次のように書くことができます:
for {
user <- authorizeUser
response <- requestToThirdParty(user)
_ <- someProcessing(...)
} {
sendToUser
}
合理的に機能的なスタイルを好む
デフォルトでは:
- 可能であれば、
var
ではなくval
使用してください。これにより、作業分散を含む多くの機能ユーティリティをシームレスに活用できます。 - 使用
recursion
とcomprehensions
のではなく、ループを。 - 不変なコレクションを使用します。これは可能な限り
val
を使用するための腐食性物質です。 - CRUDではなく、データ変換、CQRSスタイルのロジックに焦点を当てます。
非機能スタイルを選択するのには良い理由があります。
-
var
は、ローカル状態(たとえば、アクター内)で使用できます。 -
mutable
特定の状況で優れたパフォーマンスを提供します。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow