explicitly represent exceptional control flow in its flow graph, there are no explicit exceptional edges connecting potentially throwing instructions (e.g. calls) with corresponding catch blocks. Instead this connection is defined at the block level: all exceptions that occur in any block with the given try_index will be caught by CatchBlockEntry with the equal catch_try_index.
Что эксепшены могут быть выброшены только при ручном оборачивании в try catch структуры?
здесь описано, как исключения представляются в языке виртуальной машины дарта. На прикладном уровне, при обычном программировании на дарте, в это вообще не нужно вникать.
да, я понимаю, читаю как раз про vm
а, разве это никак не отражается на exceptional control flow самого дарта?
Все исключения в Dart являются непроверяемыми исключениями. Методы не объявляют, какие исключения они могут выбросить, и от разработчика не требуется перехватывать исключения. Поэтому явно прерывать поток управления бросая throw, когда без этого можно обойтись, не нужно — чревато. Это помимо других аргументов, почему так делать не надо (сравните с Java, там проверяемые исключения и невозможно, написать код который не будет ловить исключения). Раньше я бы назвал это недостатком Dart, но сейчас называю особенностью, поэтому и надо использовать специальные инструменты, такие как, например, Either.
В Яве есть проверяемые и непроверяемые исключения (рантайм эксепшн и эксепшен) код можно писать требуя обработки исключения или же не требуя.
Я о том что в Dart нельзя и это надо учитывать.
Обсуждают сегодня