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.

Język programowania Scala Wydanie 2. Copyright © Grzegorz Balcerek 2016

Licencja Creative Commons

Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowe.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.