1. ホーム
  2. scala

[解決済み] ScalaにおけるNull/Nothing/Unitの使用法

2023-01-24 18:06:19

質問

今、読みました。 http://oldfashionedsoftware.com/2008/08/20/a-post-about-nothing/

私が理解している限りでは Null は trait であり、その唯一のインスタンスは null .

メソッドが Null 引数を取る場合、そのメソッドに渡すことができるのは Null 参照か null を直接参照することはできませんが、それ以外の参照は、たとえそれがNULLであっても、( nullString: String = null など)。

ただ、どのような場合にこの Null を使用すると便利なのでしょうか。 また、Nothing 特性もありますが、これ以上例を見ることはありません。


戻り値の型としてNothingとUnitを使うことの違いがよくわからないのですが、どちらも結果を返さないので、例えばロギングを行うメソッドがある場合、どちらを使うべきかどうやって知ることができるのでしょうか?


戻り値以外の型として、Unit / Null / Nothing を使用する方法はありますか。

どのように解決するのですか?

メソッドが決して戻らない(つまり、戻ることによって正常に完了できず、例外を投げる可能性がある)場合にのみ、Nothingを使用します。Nothingは決してインスタンス化されず、型システムの利益のために存在する(James Iryの言葉を引用。 "Scalaに底値の型がある理由は、型パラメータの分散を表現する能力と結びついています。 ). リンク先の記事より。

Nothingの他の使用法の1つは、決して戻らないメソッドの戻り値の型としてです。 を返すことはありません。考えてみれば、理にかなっています。あるメソッドの戻り値の型が がNothingであり、Nothingのインスタンスが全く存在しない場合、そのようなメソッドは決して戻ってこないはずです。 のインスタンスが存在しない場合、そのようなメソッドは決して戻ってこないはずです。

あなたのロギングメソッドはUnitを返すでしょう。値Unitがあるので、実際に返すことができます。からは API ドキュメント :

<ブロッククオート

Unitはscala.AnyValのサブタイプです.型は1つだけです. 型の値は()のみであり,基礎となるランタイムシステムのどのオブジェクトによっても表現されません. で表されることはありません.戻り値がUnit型のメソッドはJavaの メソッドに似ています.