サーチ…


備考

val、不変なオブジェクト、および副作用のないメソッドを好む。最初に彼らに手を伸ばしてください。特定の必要性とその正当性がある場合は、副作用のある変数、変更可能なオブジェクト、およびメソッドを使用します。

- Odersky、Spoon、VennersによるScalaプログラミング

このプレゼンテーションでは 、Oderskyの例と指針があります。

複雑にしないでおく

単純なタスクを過度に複雑化しないでください。ほとんどの場合、必要なのは以下のものだけです:

  • 代数的データ型
  • 構造的再帰
  • モナドのようなAPI( mapflatMapfold

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使用してください。これにより、作業分散を含む多くの機能ユーティリティをシームレスに活用できます。
  • 使用recursioncomprehensionsのではなく、ループを。
  • 不変なコレクションを使用します。これは可能な限りvalを使用するための腐食性物質です。
  • CRUDではなく、データ変換、CQRSスタイルのロジックに焦点を当てます。

非機能スタイルを選択するのには良い理由があります。

  • varは、ローカル状態(たとえば、アクター内)で使用できます。
  • mutable特定の状況で優れたパフォーマンスを提供します。


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow