-
Notifications
You must be signed in to change notification settings - Fork 86
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Suggest] class.md 「objectの apply メソッドとして定義することが多いです」の部分 #979
Comments
そこの書き方どうするかもそうだけど、 |
その辺ちょっと言語化したいですね。メリデメ草案考えてみます( ̄^ ̄)ゞ |
なるほど。 object Point {
def apply(x: Double, y: Double) = new Point(x, y)
def apply(r: Double, theta: Double) = {
val x = r * cos(theta)
val y = r * sin(theta)
new Point(x, y)
}
} よりは(というより、このケースだとシグニチャ同じなのでコンパイルエラー) object Point {
def apply(x: Double, y: Double) = new Point(x, y)
def from(r: Double, theta: Double) = {
val x = r * cos(theta)
val y = r * sin(theta)
new Point(x, y)
}
} のほうがいいみたいな話でしょうか。オプションとして、後者もあるよみたいな書き方はどうでしょう。 cc @xuwei-k |
@rinotc 記述例ですが、たとえば:
|
@kmizu 複数生成方法を書きたい場合は、コンパニオンオブジェクトにstatic factory(いつもはこの用語で話してるけど正確かどうかは知らない)で生成方法を複数用意することが多いです的なイメージ? |
理由を説明し出すと、そもそもそこの流れだと、コンストラクタの話の派生だから、なぜScalaではセカンダリーなコンストラクタ定義しない慣習なのか?とか、そっちもまず説明するのか???という話にもなる…? 🤔 追記改善することを否定したいわけでもないが、そういう細かいこと考え出すと難しいな、と思うけど、まぁ最終的には任せます |
若干話逸れる?けど、Scala 3で良くも悪くも呼び出し時にnewが省略出来るのも関連しなくもないな |
単純に、 コンパニオンオブジェクトにfactoryメソッドとして複数提供することが多いです。 object Point {
// applyで定義した場合はnewなしで、Point(1, 3)のような形でかけます // <-- これはどこか説明してるところを書くでいいかも。
def apply(...) = ...
def from(...) = ...
} みたいにしようかなと思ってます。applyのオーバーロードを示唆するでもなく、かといってファクトリごとにメソッドを分けることを示唆するでもなく。 |
クラスの章の次の部分ですが
ちょっと思想入っちゃうかもですが、実務上はコンパニオンオブジェクトにstatic factoryとして複数の生成用のメソッドを提供することが多い(というか、綺麗にいく)かなと。
例があってるか分からないけど雰囲気
The text was updated successfully, but these errors were encountered: