Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Правильные выходы из функции (https://javascript.ru/forum/misc/51992-pravilnye-vykhody-iz-funkcii.html)

gmax007 29.11.2014 04:09

Правильные выходы из функции
 
Доброго время суток. Я недавно начал изучать js и не только его. У меня такой вопрос, как лучше сделать чтобы функция возвращала ложь и прекращалась. Быдлофункция ниже.
Функция принимает аргументы и проверяет их на целое положительное число, в случае же что все аргументы являются таковыми, то далее первый аргумент сравнивается со вторым и третьим.

function Check()
{
//// Проверяем все параметры на целое число
for(var i=0;i<arguments.length;i++) {
arguments[i] = parseInt(arguments[i], 10);
if (!(Number.isSafeInteger(arguments[i]) && (Math.ceil(arguments[i]) == arguments[i]) && (Math.max(0, arguments[i]) == arguments[i]))) {
//alert("Значение не верно: "+ arguments[i] );
return 0;
/*здесь надо выйти из функции и вернуть ложь, причем чтобы как только цикл наткнется на число, не подходящее условиям, то сразу нужно выйти и вернуть ложь, не проверяя другие аргументы */
else
/*если все числа прошли проверку то здесь будет проверка на присутствие первого аргумента(числа) в диапазоне от второго аргумента до третьего и также выйти из функции и вернуть ложь если число не входит в диапазон

}

}
}

Помогите понять как оптимизировать, правильно прервать цикл, функцию и вернуть ложь и т.п. Возращает ли что-нибудь цикл (сам по себе, в случаях break ит.п.)?
И еще по поводу самой проверки целого числа: то что я использую нормально? и какие есть более оптимальные способы?

Erolast 29.11.2014 11:28

Для начала, оформи нормально код - http://javascript.ru/formatting. Невозможно читать.

krutoy 29.11.2014 11:30

Цитата:

Сообщение от gmax007
здесь надо выйти из функции и вернуть ложь, причем чтобы как только цикл наткнется на число, не подходящее условиям, то сразу нужно выйти и вернуть ложь, не проверяя другие аргументы

Ты и так выходишь. только сгруппируй явно условия, если инверсию применяешь не только к первому подвыражению цепочки эндов, а ко всей цепочке.

if (!((Number.isSafeInteger(arguments[i]) && (Math.ceil(arguments[i]) == arguments[i]) && (Math.max(0, arguments[i]) == arguments[i]))))

Твои мат выражения я не проверял, но если условие истино, ты выйдешь с нулем. Можешь явно вернуть false, если хочешь, хотя разница будет только при строгой проверке. А так -- все правильно, ты выйдешь и из цикла и из функции, в данном случае.

krutoy 29.11.2014 11:39

Цитата:

Сообщение от gmax007
Возращает ли что-нибудь цикл (сам по себе, в случаях break ит.п.)?

Нет не возвращает. Если цикл находится внутри функции, а внутри цикла явно не указан возврат, и дальше н указан возврат, функция вернет значение undefined. Сам же цикл можно только прервать (или одну итерацию -- типа goto в начало цикла -- инструкция continue, либо на метку).


Часовой пояс GMT +3, время: 00:51.