Флаги в JavaScript

Флаги в JavaScript

Создание и раскрутка сайтов

Вбиваю в ТОП-10, как гвозди

8-965-148-98-02, diplom07@mail.ru

Создание и раскрутка сайтов

Вбиваю в ТОП-10, как гвозди

8-965-148-98-02, diplom07@mail.ru

Флаги в JavaScript

Флаги в JavaScript

www.homa.xp3.biz

Теория

Флаг - это переменная, которая может принимать только 2 значения true или false. С помощью флагов можно решать задачи, проверяющие отсутствие чего-либо. Например, можно проверить, что в массиве нет элемента с определенным значением.

Дан массив, нужно проверить, есть ли в нем элемент со значением 'c' или нет. Если есть, выведем 'есть', если нет, выведем 'нет'.

Для начала давайте попробуем вывести 'есть'. Для этого перебрать все элементы массива и ифом спросить, равен ли текущий элемент значению 'c'. Если равен, вывести 'есть':

a=['a','b','c','d','e'];for(i=0;i<a.length;i++){if(a[i]=='c'){document.write('Есть')}}

Решение не очень хорошо, ведь если в массиве будет не 1 значение 'c', а несколько, то выведется несколько раз. Исправим массив (сделаем 2 элемента с 'c') и убедимся в этом:

a=['a','b','c','c'];for(i=0;i<a.length;i++){if(a[i]=='c'){document.write('Есть')/*Выведет несколько раз*/}}

Поправим проблему: оборвем цикл с помощью break, если элемент уже найден:

a=['a','b','c','c'];for(i=0;i<a.length;i++){if(a[i]=='c'){document.write('Есть');break/*Оборвем цикл*/}}

Сделать так, чтобы, если в массиве вообще нет элементов со значением 'c', выводилось 'нет'. Распространенным заблуждением будет добавить else к ифу. В этом случае 'нет' будет выводиться на все элементы, не являющимися 'c':

a=['a','b','c','c'];for(i=0;i<a.length;i++){if(a[i]=='c'){document.write('Есть')}else{document.write('Нет')/*Выведет на 'a','b','d'*/}}

Добавить else - плохая идея, не рабочая. Для решения задач подобного типа используют так называемые флаги.

Как работать с флагами

Сделаем переменную f с таким значением: если она = true, то в массиве есть элемент 'c', а если false, то такого элемента нет.

Изначально поставим переменную f в значение false, т.е. будем считать, что элемента 'c' в массиве нет:

a=['a','b','c','c'],f=false;/*Считаем, что элемента 'c' нет в массиве. Затем запустим цикл с ифом так, как мы делали это раньше. Если цикл обнаружит, что в массиве есть элемент 'c', то поставим переменную f в значение true (и выйдем из цикла с помощью break)*/for(i=0;i<a.length;i++){if(a[i]=='c'){f=true;/*Элемент есть, переопределим переменную f*/break}}document.write(f)

Сократим код:

a=['a','b','c','c'],f=false;for(i=0;i<a.length;i++){if(a[i]=='c'){f=true;break}}document.write(f)

Далее ответ на вопрос, если в массиве 'c' или нет, можем дать только после цикла. И этот ответ у нас уже есть: после цикла переменная f могла остаться false или могла сменить свое значение на true, если цикл обнаружил в массиве 'c':

var a=['a','b','c','c'],f=false;/*Считаем, что элемента 'c' нет в массиве*/for(i=0;i<a.length;i++){if(a[i]=='c'){f=true;/*Элемент есть, переопределим переменную f*/break}}/*Тут переменная f = или true, или false*/document.write(f)

Сократим код:

a=['a','b','c','c'],f=false;for(i=0;i<a.length;i++){if(a[i]=='c'){f=true;break}}document.write(f)

Теперь после цикла мы можем сделать иф, который посмотрит на переменную f и выведет на экран 'есть' или 'нет':

a=['a','b','c','c'],f=false;/*Считаем, что элемента 'c' нет в массиве*/for(i=0;i<a.length;i++){if(a[i]=='c'){f=true;/*Элемент есть, переопределим переменную f*/break}}if(f===true){document.write('Есть')}else{document.write('Нет')}

Сократим код:

a=['a','b','c','c'],f=false;for(i=0;i<a.length;i++){if(a[i]=='c'){f=true;break}}if(f===true){document.write('Есть')}else{document.write('Нет')}

a=['a','b','d','e'],f=false;for(i=0;i<a.length;i++){if(a[i]=='c'){f=true;break}}if(f===true){document.write('Есть')}else{document.write('Нет')}

Так работают флаги.

Флаги в функции

Когда работают с пользовательскими функциями, флаги тоже можно и нужно использовать, но работа с ними упрощается. Решить ту же задачу на 'c', но таким образом: необходимо создать функцию b, которая параметром будет принимать массив и возвращать true, если 'c' есть в массиве, и false, если нет:

Ерунда какая-то обрезанная!

a=['a','b','c','c'];document.write(b(a))//Выведет true или false

Реализовать функцию b. В этом случае переменная f и команда break нам не понадобится - вместо них все сделает команда return.

Как это будет: внутри функции запускаем наш цикл с ифом и, если попали в иф, делаем return true, тем самым выходя из цикла и из функции. А если цикл прокрутился, но выхода из функции не случилось, после цикла делаем return false:

function b(a){for(i=0;i<a.length;i++){if(a[i]=='c'){return true}}return false;/*Элемент 'c' не найден*/};a=['a','b','c','c'];document.write(b(a))

Сократим код:

function b(a){for(i=0;i<a.length;i++){if(a[i]=='c'){return true}}return false};a=['a','b','c','c'];document.write(b(a))

Итак, как это работает: если в массиве найдется элемент со значением 'c', выйдем из функции с помощью return. Если в массиве не найдется элемент 'c', выхода из функции не произойдет и выполнение дойдет до команды return false и получится, что функция вернет false в знак того, что элемент 'c' не найден в массиве.

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович:
8-965-148-98-02, diplom07@mail.ru.
Печатать страницу: Флаги в JavaScript

Флаги в JavaScript, Флаги, в, JavaScript, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, Создание сайтов, web-программирование, seo-продвижение, создание и раскрутка сайтов, вбиваю в топ-10, как гвозди, попробуйте бесплатно, Создание сайтов, web-программирование, seo-продвижение, Флаги, в, JavaScript, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, раскрутка сайтов, Вбиваю в ТОП-10, как гвозди, раскрутка сайтов, Делаю и раскручиваю сайты, Дмитрий Владимирович

×

Ваше письмо