Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.11.2014, 04:09
Новичок на форуме
Отправить личное сообщение для gmax007 Посмотреть профиль Найти все сообщения от gmax007
 
Регистрация: 29.11.2014
Сообщений: 1

Правильные выходы из функции
Доброго время суток. Я недавно начал изучать 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 ит.п.)?
И еще по поводу самой проверки целого числа: то что я использую нормально? и какие есть более оптимальные способы?
Ответить с цитированием
  #2 (permalink)  
Старый 29.11.2014, 11:28
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Для начала, оформи нормально код - http://javascript.ru/formatting. Невозможно читать.
Ответить с цитированием
  #3 (permalink)  
Старый 29.11.2014, 11:30
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от 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:35.
Ответить с цитированием
  #4 (permalink)  
Старый 29.11.2014, 11:39
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

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

Последний раз редактировалось krutoy, 29.11.2014 в 11:41.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение прототипа функции tsigel Общие вопросы Javascript 11 15.05.2014 01:03
Добавление функции внутрь другой функции Lion_astana jQuery 9 28.12.2013 14:33
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
динамическое содержимое функции alfmaster Общие вопросы Javascript 2 28.05.2011 17:10
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21