重複した質問に投稿した回答をコピーさせてください:
アリティが 0 の Scala 2.x メソッドは、括弧の有無にかかわらず定義できます()
。これは、後でval
.
Scala でのプログラミングを参照してください。
このようなパラメーターなしのメソッドは、Scala では非常に一般的です。対照的に、def height(): Int などの空の括弧で定義されたメソッドは、空括弧メソッドと呼ばれます。推奨される規則は、パラメーターがなく、メソッドが包含オブジェクトのフィールドを読み取ることによってのみ可変状態にアクセスする場合は常にパラメーターなしのメソッドを使用することです (特に、可変状態を変更しません)。
この規則は、均一アクセスの原則をサポートしています [...]
要約すると、Scala のスタイルでは、パラメーターをとらず、パラメーターなしのメソッドとして副作用のないメソッドを定義することが推奨されます。つまり、空の括弧を省略します。一方、括弧なしで副作用を持つメソッドを定義するべきではありません。そのメソッドの呼び出しがフィールド選択のように見えるからです。
用語
アリティが 0 のメソッドには紛らわしい用語がいくつかあるため、ここに表を作成します。
|
Scala でのプログラミング |
スカラ/スカラ専門用語 |
def foo: Int |
パラメーターなしのメソッド |
ゼロ法 |
def foo(): Int |
空括弧メソッド |
ニラリー法 |
「nullary メソッド」と言うのはクールに聞こえますが、多くの人はそれを間違って言い、読者も混乱するでしょう。そのため、人々がすでに専門用語。
() は Scala 2.13 または 3.0 ではオプションではなくなりました
The great () insertで、Martin Odersky は Scala 3 に変更を加え、 で定義されたメソッドを呼び出す必要がありまし()
た()
。これは、Scala 3 移行ガイドに次のように記載されています。
自動適用は、空の引数リストを渡さずに nullary メソッドを呼び出す構文です。
注: 移行ドキュメントでは用語が間違っています。次のように読む必要があります。
自動適用は、空の引数リストを渡さずに空の括弧 (または「ニラリー」) メソッドを呼び出す構文です。
Scala 2.13 は Scala 3.x に続き、予想される型が Function0 の場合、Eta-expand 0-arity メソッドでの empty-paren メソッドの自動適用を非推奨にしました。この規則の注目すべき例外は、Java 定義のメソッドです。toString
withoutなどの Java メソッドを引き続き呼び出すことができます()
。