3.9. Typ Nothing
Tak jak typ Any jest na szczycie hierarchii typów w Scali, tak typ Nothing jest na jej spodzie. Nothing jest podtypem wszystkich innych typów w Scali. Nie istnieją żadne wartości tego typu.
Przykładem wyrażenia, którego typem jest Nothing, jest wyrażenie throw, służące do wyrzucania wyjątków. Zdefiniowana w pliku Nothing1.scala metoda raise wyrzuca wyjątek i wobec tego nie zwraca żadnego rezultatu.
Plik Nothing1.scala: def raise(msg: String):Nothing = throw new Exception(msg)
Typem rezultatu tej metody jest właśnie Nothing.
scala> :load Nothing1.scala Loading Nothing1.scala... raise: (msg: String)Nothing
![]() | Wyrażenie throw jest opisane w punkcie 17.2. |
Zawierająca pętlę nieskończoną metoda loopForever jest innym przykładem metody, która nie zwraca rezultatu. Metoda jest zdefiniowana w pliku Nothing2.scala.
Plik Nothing2.scala: def loopForever: Nothing = { while(true){} throw new Exception }
Ta metoda nigdy się nie kończy, a w związku z tym nie zwraca żadnego rezultatu.
scala> :load Nothing2.scala Loading Nothing2.scala... loopForever: Nothing
Wyrażenie wyrzucające wyjątek, znajdujące się po pętli while, nie jest nigdy wykonywane. Powodem umieszczenia go w metodzie jest właśnie chęć zdefiniowania typu metody jako Nothing. Sama pętla while jest typu Unit. Metoda, która zawierałaby tylko tę pętlę, miałaby wobec tego rezultat typu Unit.
Plik Nothing3.scala: def loopForever2:Unit = while(true){}
Taka metoda zdefiniowana jest w pliku Nothing3.scala.
scala> :load Nothing3.scala Loading Nothing3.scala... loopForever2: Unit
![]() | Pętla while jest opisana w punkcie 4.4. |
Plik Nothing1.scala:
def raise(msg: String):Nothing = throw new Exception(msg)

