2013-11-15 5 views
1

Сегодня я сам познакомился с Дартом. В какой-то момент, играя с ним, что-то шло не так. Позже я обнаружил, что это не что иное, как я забыл поставить инструкцию return в функцию, поэтому null был установлен на переменную, которая должна была получить значение от этой функции.Почему «Отсутствует заявление о возврате» не обрабатывается на языках?

В тот момент, о котором я думал, на Java он был бы пойман как ошибка в самом первом месте. Почему C/C++ или новый Dart не добавляют эту функцию? Эта функция замедляет работу кода в больших масштабах? Или есть другие технические причины?

+1

Что? Каждый современный компилятор C/C++ запускает (по крайней мере) предупреждение, если вы забудете вернуться из функции. например 'gcc -Wall -fsyntax-only -x C++ - <<< 'int f() {}'' => ': 1: 10: warning: нет оператора возврата в функции, возвращающей не-void [-Wreturn-type] ' – peppe

ответ

1

Каждый метод возвращает значение, а если нет возврата, это null.

Однако, похоже, некоторые улучшения могут быть сделаны в будущем. См. issue 73 : Missing return statement does not trigger warning or error и issue 13373 : Can get the editor to warn when there is no explicit return for a function returning a type.

+0

Я согласен с этим, конечно. И из первой ссылки, похоже, они (Дарт) учли это. Но моя точка на самом деле, в то время как Java имеет эту функцию, почему другие языки не имеют ее? Приятно видеть, что Дарт скоро получит эту функцию. – Fallen

+0

Java - это скомпилированный статически типизированный язык. Компилятор не может генерировать код, который забывает вернуть значение. Dart - это динамически типизированный язык и имеет виртуальную машину на основе исходного кода. Таким образом, вы можете запускать свой код, даже не проверяя его тип. Анализатор статического типа Дарта оптимистично относится ко многим вещам, которые были бы ошибками в Java. Я лично хотел бы, чтобы он был более строгим в этой конкретной проблеме. Звезда, что ошибка;) –

Смежные вопросы