Функция либо должна ничего не возвращать, либо возвращать что-то - она не может делать и то, и другое.Причина в том, что если вы напишите этот код:
var someValue = someFunction();
Как будет обрабатываться этот код, если иногда someFunction
возвращает значение, а иногда нет?
Ваша проблемаоднако, это довольно распространенный способ, и есть несколько способов его обойти.
Значения часового
Вы можете возвращать значения специального случая, которые вы рассматриваете как не-значения (такие как null
, NaN
, ""
или -1
).Эти особые значения называются значениями дозорного .Пользователи вашей функции (возможно, ваш собственный код) проверят результат после вызова.Если он возвращает одно из значений часового, он не использует результат.
Функции в стиле попытки
Вы также можете использовать шаблон, обычно используемый в C #/ .Net, что они называют «Try-методы», но вы можете вызвать «Try-функции».Actionscript не работает точно так же, как C #, но мы можем подобраться достаточно близко, чтобы этот шаблон работал.
Чтобы сделать это, верните Boolean
, возвращая true
, если у вас есть значение, и false
если нетЗатем задайте для своей функции параметр Object
и заполните свойство фактическим возвращаемым значением:
function trySomeFunction(result:Object) : Boolean
{
if(xxx)
{
result.Value = xxx;
return true;
}
return false;
}
// ...
var result:Object = { Value:null };
if(trySomeFunction(result))
{
// Do something with the value here
}
Исключения
Если ваш метод не смог выполнить то, что онобещал сделать, вы можете сгенерировать исключение .Тогда вам не нужно беспокоиться о том, что возвращается, потому что ваш код просто умирает.
Исключения велики, потому что люди, которые вызывают ваш код, не должны учиться так много.Им не нужно знать, что ваша функция выполнена успешно, только если она не возвращает магическое значение, отличающееся для каждой функции, им не нужно проверять, возвращает ли ваша функция истину / ложь, и им не нужнознать, что какое-то свойство заполняется в объекте при успешном выполнении функции.
Без исключений, если они забывают проверить ваше специальное значение или результат "Try-function", в дальнейшем может произойти ошибка.в программе.Или это может вообще не произойти, и программа продолжит работу, но будет прервана.В этих случаях гораздо сложнее отследить проблему.
За исключением, ваш код просто взрывается, как только обнаруживает проблему, и дает вам строку кода, где ваша программа поняла, что не можетработать правильно.
Если это нормально и нормально, что ваша функция не работает, вы, вероятно, не должны вызывать исключение.Вы, вероятно, должны использовать вместо этого «Try-function» или значение часового.