Зачем писать функции: void? - PullRequest
3 голосов
/ 01 февраля 2011

Я обычно пишу:

function functionName():void
{

}

Если моя функция не имеет возвращаемого типа (": void"), я замечаю, что моя функция будет работать, если я напишу:

function functionName()
{

}

... без указания типа возврата.Почему считается правильным показывать тип возвращаемого значения: void?

Ответы [ 4 ]

5 голосов
/ 01 февраля 2011

Поскольку это следует за строгим использованием типизации данных, при наличии типа возврата :void компилятор может предупреждать о не пустых возвращениях. (хотя стандартный компилятор этого не делает.)

Без этого объявление функции семантически неоднозначно.

(редактирование: обновлено для пояснения, код предназначен для нас, людей, чтобы его можно было читать, если бы не были так важны удобочитаемость и семантическое богатство, мы бы все кодировали в двоичном формате с использованием переключателя).

4 голосов
/ 01 февраля 2011

Суть в том, что у каждого объекта во Flash есть тип данных.Это может быть собственный тип данных, например «String» или «Number», «Array» или «int», или это может быть пользовательский тип данных, например «MyCustomClass» или «ICustomInterface».

ЕслиFlash знает тип данных объекта, он может работать с ним намного быстрее, потому что он точно знает, какие методы и свойства этот объект имеет или не имеет.Вот почему, например, вы можете выполнять итерацию по вектору намного быстрее, чем итерирование по массиву - вектор заставляет каждый элемент иметь одинаковый тип, что означает, что среда выполнения не должна сидеть там и печатать-проверьте каждый элемент в вашем векторе.Он просто знает, например, что каждый элемент в векторе реализует интерфейс IWh независимо, и это все, что его волнует.

Итак, вот где: void входит. В AS3 функции также являются объектами.Функция может возвращать абсолютно все - поэтому вы присваиваете ей объявление типа, чтобы сообщить Flash Player, что когда объект возвращается из этой функции, он имеет определенный тип.

Есть еще одна причина, которая была затронута выше.Когда вы объявляете тип возврата, ваша функция является безопасной.Если вы объявите: int и попытаетесь вернуть строку, вы получите ошибку.Это хорошо - эта ошибка говорит вам, что ваш код ведет себя не так, как вы ожидаете.

Когда мы объявляем функции: void, то, что мы говорим flash, это то, что никакого возврата не ожидаетсяиз этой функции.Если функция вообще должна что-то возвращать, она выдаст ошибку.

Надеюсь, это поможет!:)

0 голосов
/ 01 февраля 2011

В первом случае это приведет к ошибке:

var expectedValue:String = functionName();

Принимая во внимание, что в последнем случае вышеперечисленное может остаться незамеченным и вместо этого может привести к ошибке времени выполнения (которую, вероятно, труднее найти и исправить).

т.е. статическая типизация помогает компилятору находить ошибки в коде.

0 голосов
/ 01 февраля 2011

Это не «хорошая форма для записи: void», это просто практика из C-подобных языков, где функции всегда должны возвращать тип.

Некоторым языкам, таким как Pascal, не нужно это определение (void) ОДНАКОв Паскале безвозвратная функция называется «процедурой».Пример:

procedure sayHello();
begin
  writeln("Hello, from pascal!");
end;

function addTogether(a, b: integer);
begin
  Result:=a+b;
end;

Редактировать: Языки, такие как PHP, также не указывают, что возвращать, в этом случае по умолчанию (чудо чудес ...) null.Критики утверждают, что в PHP нет системы типов, поэтому полная сигнатура функции может не потребоваться.Я бы дал вам точку за это, но проблема все еще остается, легко предположить, что ни один тип возвращаемого значения не ожидает, или значение null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...