Scalaでは、デフォルトでインスタンス変数をpublicにするという考え方は何ですか?デフォルトで非公開にすべきではありません。開発者は間違いを少なくして構成を奨励しますか?Scalaではデフォルトでインスタンス変数をpublicにする哲学は何ですか?
答えて
まず、あなたが書くときことを知っている必要があり:
class Person(val name: String, val age: Int) {
...
}
name
とage
はインスタンス変数ではなく、デフォルトではパブリックなメソッド(ゲッター)を、アクセサ。
あなたの代わりに書く場合:
class Person(name: String, age: Int) {
...
}
name
とage
は、あなたが期待できるとして、民間だけインスタンス変数、です。
スカラの哲学は、不変のインスタンス変数を好むことであり、パブリックアクセサメソッドを持つことはもはや問題ではありません。
プライベートはモノリスを推奨します。プライベートになるいくつかの変数を読み込む必要があるため、無関係な機能をクラスに入れるのが簡単になると、クラスが成長し始めます。
これは単なる悪いデフォルトであり、Javaで1000行以上のクラスを持つ大きな理由の1つです。
Scalaのデフォルトはimmutableです。これは、多くの人がJavaで制限するためにプライベートに使用することが多い膨大な種類のエラーを削除します。多くの場所で好まれるimmutablesと
- 、国民が問題
- のそれほどではありません、あなたはので、あなたが必要としない、クライアントコードを変更せずにゲッターとセッターと公共のvalを置き換えることができますあなたが必要とする場合に備えてゲッターとセッターの余分な層。 (実際には、その層を得るのですが、あなたはほとんどの時間をそれに気づくことはありません。)
- プライベートフィールド+公共セッターとゲッターのJavaのアンチパターンはかなりとにかく
(追加のカプセル化していません
フィールドのJavaカプセル化の背後にある主要な要因は、統一されたアクセスポリシーです。つまり、単純にフィールドが実装されたかどうかを気にする必要はありませんでした。飛行機。これは、クラスのメンテナが、必要に応じて2つのクラスを切り替えることができるという大きな利点があります。他のクラスを変更する必要はありません。
Javaでは、必要に応じて値を計算するための構文上の柔軟性を提供するために、すべてのメソッドにアクセスする必要がありました。
スカラでは、メソッドとフィールドには同等の構文でアクセスすることができます。単純なプロパティがある場合は、後でno-argメソッドとして公開することができるため、カプセル化に損失はありません発信者が変更について何かを知る必要はありません。
- 1. JavaのEnum型インスタンス変数のデフォルト値は何ですか?
- 2. PostgreSQLを使用するScala Playプロジェクトで 'public'スキーマをデフォルトにするには?
- 3. FullCalendar:メソッドの使用法を欺くデザイン哲学は何ですか?
- 4. Java - インスタンス変数は何ですか?
- 5. レンダリングはインスタンス変数と何をするのですか?
- 6. Objective CでのMVC哲学の適用
- 7. Clojureでアポストロフィで終わる数学関数は何ですか?
- 8. React CSSの哲学
- 9. privateインスタンス変数はcompareTo内の "public"スコープでアクセス可能
- 10. iPhone UIImageViewでは、インスタンス変数initをオーバーライドする方法は何ですか?
- 11. グローバル変数はデフォルトでexternですか?はいの場合、デフォルト値 "0"を持つ理由は何ですか?
- 12. バイナリセマフォを使用するダイニング哲学者
- 13. ORDER BYサブクエリとROWNUMはリレーショナル哲学に反しますか?
- 14. 引数は何のインスタンス変数ですか?
- 15. セマフォを使用してJavaで食事する哲学者
- 16. ダイニング哲学者のpthreadに渡すC
- 17. この例で使用する数学は何ですか?
- 18. Scala:==デフォルトは等しいですか?
- 19. WCFでサービスオブジェクトをインスタンス化するためのデフォルトの動作は何ですか?
- 20. インスタンス変数がjavaでデフォルト値を持つのはなぜですか?
- 21. Scalaの関数にUnitを渡す目的は何ですか
- 22. URLCache.sharedインスタンスが持つデフォルトのディスクスペースは何ですか
- 23. SSH EC2 Linuxインスタンスのデフォルトのユーザ名は何ですか?
- 24. カラーホイールの背後にある数学は何ですか?
- 25. CSSフィルターの背後にある数学は何ですか?
- 26. インスタンス変数の正確な定義は何ですか?
- 27. プロパティとインスタンス変数の違いは何ですか?
- 28. インスタンス変数とプロパティの違いは何ですか?
- 29. ScalaでLong.toIntのセマンティクスは何ですか?
- 30. 通常の変数とRubyのインスタンス変数との違いは何ですか?
2番目の例では、 'name'と' age'は、 'Person'の本体でどのように使用されているかに応じて、インスタンス変数ではなく、単にコンストラクタパラメータになります。 –
はい、あなたは正しいです、私は答えを複雑にしたくありませんでした。 – paradigmatic