17.3. Wyrażenie try

Pojawienie się wyjątku podczas wykonywania metody lub funkcji nie musi skutkować natychmiastowym zakończeniem działania tej metody lub funkcji. Wyjątek może być obsłużony w wyrażeniu try. Wyrażenie to składa się ze słowa kluczowego try, po którym występuje wyrażenie, a po nim mogą wystąpić klauzule catch i/lub finally. Sposób wykonania wyrażenia try zależy od tego, w jaki sposób zakończy się wykonywanie wyrażenia znajdującego się po słowie kluczowym try oraz od obecności i treści opcjonalnych klauzul catch i finally.

Specyfikacja języka Scala opisuje wyrażenie try w punkcie 6.22.

Wyrażenie try, w którym nie ma ani klauzuli catch, ani klauzuli finally, wykonuje się tak, jakby wyrażenie występujące po słowie kluczowym try nie było nim poprzedzone. Choć taki sposób użycia wyrażenia try jest dozwolony, to jego sens jest wątpliwy. Kompilator informuje o tym za pomocą ostrzeżenia.

Plik Try1.scala:
def tt1:Int = 1
def tt2:Int = try 1
def te1:Int = throw new Exception
def te2:Int = try throw new Exception

W poniższych przykładach, zdefiniowana w pliku Try1.scala metoda tt1, zachowuje się tak, jak tt2 (obie zwracają w wyniku 1). To samo dotyczy metod te1 i te2 (obie zgłaszają wyjątek). Definicje metod tt2 oraz te2 powodują wystąpienie ostrzeżeń kompilacji.

scala> :load Try1.scala
Loading Try1.scala...
tt1: Int
<console>:10: warning: A try without a catch or finally is equivalent to putting its body in a block; no exceptions are handled.
       def tt2:Int = try 1
                     ^
tt2: Int
te1: Int
<console>:10: warning: A try without a catch or finally is equivalent to putting its body in a block; no exceptions are handled.
       def te2:Int = try throw new Exception
                     ^
te2: Int

scala> tt1
res0: Int = 1

scala> tt2
res1: Int = 1
scala> te1
java.lang.Exception
  at .te1(<console>:10)
  ... 33 elided

scala> te2
java.lang.Exception
  at .te2(<console>:10)
  ... 33 elided

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.