Unitをmy scalaメソッドの戻り値の型として指定することと、戻り値の型を完全に省略することとの違いはわかりません。違いは何ですか?
誰でもアドバイスできますか?
暗黙的なUnit
戻り型:
_def f() {println("ABC")}
_
明示的なUnit
戻り型:
_def g(): Unit = {println("ABC")}
_
最後のメソッド式から推測された型を返します。これはUnit
の型であるため、依然としてprintln
ですが、混乱を招きます。
_def h() = println("ABC")
_
上記のすべての方法は同等です。メソッドシグネチャだけでは_=
_演算子が足りないので十分なので、f()
を好みます。メソッドをさらにドキュメント化する場合は、明示的な_: Unit
_を使用します。最後の形式は紛らわしく、実際には intellij-idea の警告として扱われます。
_=
_演算子は重要です。存在する場合、メソッド本体に「最後のステートメントが返すものは何でも返します」を意味します。明らかに、この構文をabstract
メソッドに使用することはできません。そうでない場合、Unit
が想定されます。
プロシージャ(nitを返すメソッド)の特別な構文は誤りでした。使用しないでください。 Java/C(++)のバックグラウンドを持つ初心者にとっては混乱を招き、危険です。そして、それは不必要な特別な扱いです。型推論の有無にかかわらず、常に等号を使用します(後者はプライベートメンバーにのみ使用する必要があります)。
def foo(): Unit = someCodeReturningUnit()
private def bar() = someCodeReturningUnit()
Scalaコミュニティはそれについて分かれています。一方、明示的な戻り値の型を使用しないことは、=
記号。これにより、追跡するのが面倒なエラーが頻繁に発生します。一方、異なる構文を持つUnit
- returningメソッドは、それらを別のカテゴリに分類します。
個人的には、この構文は廃止したいのですが、=
are追跡するのが面倒です。しかし、それは非推奨ではないので、その存在の問題に苦しむよりもむしろそれを利用したいです。
だから、あなたが望むものを使用します。どちらにせよあなたの選択を批判する人々と、それを賞賛する人々がいるでしょう。