Чем отличается if от while
Перейти к содержимому

Чем отличается if от while

Глава 5
Операторы

JavaScript поддерживает компактный набор операторов, который Вы можете использовать для реализации интерактивного поведения Web-страниц. В главе дан обзор этих операторов.

В главе имеются следующие разделы, в которых дан краткий обзор каждого оператора:

  • Условные операторы: if. else и switch
  • Операторы циклов: for , while , do while , label , break и continue ( label сам по себе не оператор цикла, но часто используется с этими операторами)
  • Операторы манипулирования объектами: for. in и with
  • Комментарии

Любое выражение также является оператором. См. в Главе 3 «Выражения и Операторы» полную информацию об операторах.

Используйте точку с запятой (;) для разделения операторов в коде JavaScript.

См. в книге Клиентский JavaScript. Справочник. детальную информацию об операторах данной главы.

Условный оператор это набор команд, выполняемый, если специфицированное true. JavaScript поддерживает два условных оператора : if. else и switch .

Оператор if. else

Оператор if используется для выполнения определённых операторов, если логическое условие true; не обязательный блок else выполняется, если условие false. Оператор if выглядит так:

if (condition) statements1 
>
[else statements2
> ]

condition это может быть любое выражение JavaScript, которое вычисляется в true или false. Выполняемые операторы это любые операторы JavaScript, включая вложенные if . Если Вы хотите использовать более одного оператора после операторов if или else , Вы обязаны заключать их в фигурные скобки <>.

Не путайте примитивные Boolean-значения true и false со значениями true и false объекта Boolean. Любой объект, значением которого не является undefined или null, включая объект Boolean со значением false, вычисляется в true, когда передаётся в условный оператор. Например:

var b = new Boolean(false);
if (b) // это условие вычисляется в true

Пример. В следующем примере функция checkData возвращает true, если количество символов в объекте Text равно трём; иначе выводит диалог alert и возвращает false.

function checkData () if (document.form1.threeChar.value.length == 3) return true 
> else alert("Enter exactly three characters. " +
document.form1.threeChar.value + " is not valid.")
return false
>
>

Оператор switch

Оператор switch позволяет вычислять выражение и пытается найти совпадение значения выражения с оператором label. Если совпадение найдено, программа выполняет ассоциированный оператор. Оператор switch выглядит так:

switch (expression) case label : 
statement;
break;
case label :
statement;
break;
.
default : statement;
>

Программа сначала ищет label/метку, совпадающую по значению с выражением, а затем выполняет ассоциированный оператор. Если совпадающий label не найден, программа ищет не обязательный оператор по умолчанию и, если он найден, выполняет ассоциированный оператор. Если оператор по умолчанию/default statement на найден, программа продолжает выполняться с оператора, идущего после конца switch .

Не обязательный оператор break , ассоциируемый с каждым case, гарантирует, что программа прервёт выполнение блока switch , как только будет выполнен совпавший оператор, и продолжит выполнение с оператора, идущего после switch . Если break отсутствует, программа продолжит выполнение следующего оператора в блоке switch .

Пример. В следующем примере, если expr вычисляется в «Bananas», программа находит совпадение с case «Bananas» и выполняет ассоциированный оператор. Если обнаружен break , программа прерывает выполнение блока switch и выполняет оператор, идущий после switch . Если break отсутствует, оператор для case «Cherries» также будет выполнен.

switch (expr) case "Oranges" : 
document.write("Oranges are $0.59 a pound.");
break;
case "Apples" :
document.write("Apples are $0.32 a pound.");
break;
case "Bananas" :
document.write("Bananas are $0.48 a pound.");
break;
case "Cherries" :
document.write("Cherries are $3.00 a pound.");
break;
default :
document.write("Sorry, we are out of " + i + ".");
>
document.write("Is there anything else you'd like?");

Цикл/loop это набор команд, которые выполняются неоднократно, пока не будет выполнено специфицированное условие. JavaScript поддерживает операторы циклов for , do while , while и label ( label сам по себе не является оператором цикла, но часто используется с этими операторами). Кроме того, Вы можете использовать операторы break и continue с операторами циклов.

Ещё один оператор, for. in , выполняет операторы циклически, но используется при работе с объектами. См. «Операторы Манипуляций с Объектами» .

Оператор for

Оператор for повторяется, пока специфицированное условие не станет false. JavaScript-цикл for похож на аналогичные циклы Java и C. Оператор for выглядит так:

for ([initialExpression]; [condition]; [incrementExpression]) statements >

При выполнении цикла for происходит следующее:

  1. Выполняется инициализирующее выражение initial-expression , если имеется. Это выражение обычно инициализирует один или более счётчиков цикла, но синтаксис допускает выражения любой сложности.
  2. Выражение condition вычисляется. Если condition даёт true, цикл выполняется. Если condition равно false, цикл for прерывается.
  3. Выполняются statements /операторы.
  4. Выполняется выражения обновления incrementExpression , и управление возвращается к шагу 2.

Пример. Эта функция содержит оператор for , подсчитывающий количество выбранных опций в прокручиваемом списке (объекте Select , который позволяет делать множественный выбор). Оператор for объявляет переменную i и инициализирует её значением 0 (нуль). Если i меньше количества опций объекта Select , выполняется следующий оператор if , а i увеличивается на 1 при каждом прохождении цикла.


function howMany(selectObject) var numberSelected=0
for (var i=0; i < selectObject.options.length; i++) if (selectObject.options[i].selected==true)
numberSelected++
>
return numberSelected
>

Choose some music types, then click the button below:

R&B
Jazz
Blues
New Age
Classical
Opera
onClick="alert ('Number of options selected: ' + howMany(document.selectForm.musicTypes))">

Оператор do. while

Оператор do. while повторяется, пока специфицированное выражение не станет false. Оператор do. while выглядит так:

do statement > while (condition)

statement выполняется как минимум один раз, так как находится перед проверяемым условием. Если condition возвращает true , цикл выполняется ещё раз. В конце каждого прохода проверяется условие. Если condition возвращает false , выполнение останавливается и управление передаётся оператору, идущему после do. while .

Пример. В следующем примере цикл do итерирует как минимум один раз, пока i не станет меньше 5.

do i+=1; 
document.write(i);
> while (i<5);

Оператор while

Оператор while выполняется, пока специфицированное условие вычисляется в true. Оператор while выглядит так:

while (condition) statements >

Если condition становится false, операторы внутри цикла перестают выполняться и управление передаётся оператору, идущему после цикла.

Проверка условия/condition выполняется перед началом каждого цикла. Если condition возвращает true, операторы выполняются и условие проверяется снова. Если condition возвращает false, выполнение прекращается и управление передаётся оператору, идущему после цикла while .

Пример 1. Следующий цикл while итерирует, пока n меньше 3:

n = 0
x = 0
while( n < 3 ) n ++
x += n
>

При каждой итерации выполняется инкремент n и обновляется значение x . Следовательно, x и n получают следующие значения:

  • После первого прохода: n = 1 и x = 1
  • После второго прохода: n = 2 и x = 3
  • После третьего прохода: n = 3 и x = 6

Пример 2: Бесконечный цикл. Проверяйте, что условие в цикле рано или поздно станет false; иначе цикл никогда не закончится. Операторы следующего цикла while выполняются бесконечно, поскольку condition никогда не станет false:

while (true) alert("Hello, world") >

Оператор label

Оператор label предоставляет оператор с идентификатором, что позволяет обратиться к нему в программе. Например, Вы можете использовать label для идентифицирования цикла, а затем использовать break или continue для указания момента, когда программа должна прервать выполнение цикла или начать новую итерацию.

Синтаксис оператора label примерно такой:

label : 
statement

Значение label это любой идентификатор JavaScript, не являющийся зарезервированным словом. statement\оператор , идентифицируемый Вами с помощью label, может быть любого типа.

Пример. Здесь label markLoop идентифицирует цикл while .

markLoop:
while (theMark == true)
doSomething();
>

Оператор break

Оператор break используется для прерывания выполнения цикла, либо операторов switch или label.

  • Когда Вы используете break с операторами while , do-while , for или switch , оператор break немедленно прерывает самый внутренний цикл или switch и передаёт управление следующему оператору.
  • Когда Вы используете break внутри оператора label, он прерывает этот оператор и передаёт управление следующему оператору. Если Вы специфицировали label при вызове break , оператор break прерывает специфицированный оператор.

Синтаксис break выглядит так:

1. break
2. break [label]

Первая форма прерывает самый внутренний цикл, switch или label; вторая форма прерывает специфицированный содержащий оператор label.

Пример. Здесь происходит итерация по элементам массива, пока не будет найден индекс элемента, значением которого является theValue :

for (i = 0; i < a.length; i++) if (a[i] = theValue); 
break;
>

Оператор continue

Оператор continue может использоваться для рестарта оператора while , do-while , for или label .

  • В операторах while или for , оператор continue прерывает текущий цикл и начинает новую итерацию (проход) цикла. В отличие от break , continue не прерывает полностью выполнение цикла. В цикле while он перескакивает на condition . В цикле for он перескакивает на increment-expression .
  • В операторе label оператор continue переходит по метке/label, которая идентифицирует оператор label . Этот тип continue рестартует оператор label или продолжает выполнение помеченного цикла со следующей итерации. continue обязан находиться в теле оператора цикла, идентифицированного label, используемым continue .

Синтаксис оператора continue выглядит так:

1. continue
2. continue [label]

Пример 1. здесь цикл while с оператором continue выполняется, если i имеет значение 3. Таким образом, n получает значения 1, 3, 7 и 12.

i = 0
n = 0
while (i < 5) i++
if (i == 3)
continue
n += i
>

Пример 2. Оператор, помеченный checkiandj , содержит оператор, помеченный checkj . Если обнаружен continue , программа прерывает текущую итерацию checkj и начинает следующую. Каждый раз при обнаружении continue оператор checkj реитерирует, пока его условие не возвратит false . Если возвращено false , выполняется остаток оператора checkiandj и checkiandj реитерирует, пока его условие не возвратит false . Если возвращено false , программа продолжает выполнение с оператора, идущего после checkiandj .

Если continue имеет метку checkiandj , программа продолжит выполнение от верха оператора checkiandj .

checkiandj : 
while (i <4) document.write(i + "");
i+=1;
checkj :
while (j>4) document.write(j + "");
j-=1;
if ((j%2)==0);
continue checkj;
document.write(j + " is odd.");
>
document.write("i = " + i + "
");
document.write("j = " + j + "
");
>

JavaScript использует операторы for. in и with для работы с объектами.

Оператор for. in

Оператор for. in итерирует специфицированную переменную по всем свойствам объекта. Для каждого отдельного свойства JavaScript выполняет специфицированные операторы. Цикл for. in выглядит так:

for (variable in object) statements >

Пример. Следующая функция принимает в качестве аргументов объект и имя объекта. Затем итерирует по всем свойствам объекта и возвращает строку - список свойств объекта и их значений.

function dump_props(obj, obj_name) var result = "" 
for (var i in obj) result += obj_name + "." + i + " = " + obj[i] + ""
>
result += ""
return result
>

Для объекта car со свойствами make и model , result будет:

car.make = Ford
car.model = Mustang

Оператор with

Оператор with устанавливает объект по умолчанию для блока операторов. JavaScript ищет неквалифицированные имена в на боре операторов для определения, являются ли имена свойствами объекта пор умолчанию. Если неквалифицированное имя совпадает со свойством, то свойство используется в операторе; иначе используется локальная или глобальная переменная.

Оператор with выглядит так:

with (object) statements >

Пример. Оператор with специфицирует, что объект Math является объектом по умолчанию. Оператор, идущий после оператора with , обращается к свойству PI и методам cos и sin без специфицирования объекта. JavaScript принимает Math как объект для этих свойств.

var a, x, y
var r=10
with (Math) a = PI * r * r
x = r * cos(PI)
y = r * sin(PI/2)
>

Комментарии являются заметками автора, разъясняющими действия кода. Комментарии игнорируются интерпретатором. JavaScript поддерживает комментарии в стиле Java:

  • Однострочный комментарии начинается с двойного слэша (//).
  • Многострочный комментарий начинается с /* и заканчивается */

Пример. Вот два комментария:

// Это однострочный комментарий.
/* Это многострочный комментарий. Он может быть любого размера, и
Вы может поместить в него что угодно. */
Оглавление | Назад | Вперёд | Индекс

Дата последнего обновления: 27 мая 1999 года.
Copyright (c) 1999 Netscape Communications Corporation

Разница между оператором If и циклом while

Я прочитал это руководство по PHP.com о циклах While. Я не понимаю цели циклов While в PHP. Это выглядит как выражение if . В чем разница между выражением if и циклом while? Как работают циклы, что они делают, и когда я должен их использовать? Например, не может:

$i = 1; while ($i

сделать так:

$i = 1; if ($i

Ben Beri 30 янв. 2013, в 15:54
Поделиться
Почему бы не попробовать и посмотреть?
John Conde 30 янв. 2013, в 14:34

не переусердствуйте. Что, if означает в реальном мире? единовременное решение. то же самое в PHP. принять решение один раз, двигаться дальше. что значит while в реальном мире? «пока не будет выполнено какое-либо условие, продолжайте делать это . » то же самое в PHP.

Marc B 30 янв. 2013, в 14:47
Поделиться:

4 ответа

Лучший ответ

Оператор if проверяет, является ли выражение истинным или ложным, а затем запускает код внутри оператора только в том случае, если оно истинно. Код внутри цикла запускается только один раз.

if (x > y) < // this will only happen once >

Оператор while представляет собой цикл. В принципе, он продолжает выполнять код в выражении while, поскольку в то же время выражение истинно.

while (x > y) < // this will keep happening until the condition is false. >

Когда использовать цикл while:

Хотя циклы лучше всего использовать, когда вы точно не знаете, сколько раз вам может понадобиться перебирать условие - если вы точно знаете, сколько раз вы хотите протестировать условие (например, 10), тогда вы будете использовать цикл for вместо.

lifetimes 30 янв. 2013, в 15:58
Поделиться

О, я понял это сейчас . когда цикл while в основном важен? Я имею в виду, я не могу найти какие-либо полезные использования с ним.

Ben Beri 30 янв. 2013, в 14:42

@Jony Хотя циклы лучше всего использовать, когда вы точно не знаете, сколько раз вам, возможно, придется циклически выполнять условие - если вы точно знаете, сколько раз вы хотите проверить условие (например, 10), тогда вы будете использовать вместо цикла.

lifetimes 30 янв. 2013, в 14:45

Если вы хотите что-то делать до тех пор, пока не будет выполнено условие - например, чтение результатов из запроса к базе данных.

thetaiko 30 янв. 2013, в 14:45
Показать ещё 1 комментарий

Цикл while будет выполняться столько раз, сколько потребуется, пока условие истинно, т.е. Пока это условие не будет ложным.

Оператор if будет выполняться один раз, если условие истинно.

Отличный способ понять такие понятия, когда вы просто изучаете язык, - это попробовать их:

 echo "\n"; $i = 1; if ($i

Циклы. While, do while, for, чем отличаются?

space2pacman

while - выполняется пока заданное выражение правда (проверка перед одним циклом выполнения)
while do - выполняется пока заданное выражение правда (проверка после одного цикла выполнения)
for - создано для выполнения кода n-ное количество раз
Вообще недавно видел забавную картинку, которая хорошо это дело демонстрирует

Спойлер

5c3367af26f7c126057439.jpeg

space2pacman

Ярослав Иванов @space2pacman

Rikonardo, ну вы то че))while и do while одинаковые. Разница в том что последний запускает тело цикла без проверки на первой итерации.

REKTOR_RG

Ярослав Иванов, ну по крайней мере нам на курсах c# рассказали, что do while проводит проверку после пробега кода внутри (итерации), а while сначала проверяет, а потом выполняет

space2pacman

Ярослав Иванов @space2pacman
Rikonardo, все верно) только это на первых итерациях. Потом они идентичны)

myjcom

while, do while, for

Прошу объяснить понятными определениями..

Решения вопроса 1
Программист на «си с крестами» и не только

While — сначала проверь, потом сделай, и так по кругу.
Do — сначала сделай, потом проверь, и так по кругу.

Отличаются они только случаем, когда условие не выполняется: while не пройдёт, а do пройдёт один раз.

// Пример 1. // верно while (впереди свободно) шаг; // неверно — можно врезаться в препятствие, если нельзя сделать ни шагу do шаг while (впереди свободно); // Пример 2. // Неверно — пока у вас в руках нет рубашки, условие цикла некорректно while (рубашка грязная) возьми рубашку; // верно do возьми рубашку; while (рубашка грязная);

Циклы for, foreach и прочие — это разновидность цикла while (не do!!), сделанная для специального сценария: пройти некий набор объектов.

Ответ написан более трёх лет назад
Комментировать
Нравится 5 Комментировать
Ответы на вопрос 4

webinar

Учим yii: https://youtu.be/-WRMlGHLgRg

Слишком очевидный ответ, если посмотреть на примеры: www.php.su/learnphp/cs/?cycles

Допустим у Вас есть коробочка в которой хранятся бутылочки с "пивасиком" и бутылочки с "молоком"
Если Ваш батя попросил протереть все бутылки из коробочки - это foreach
Если каждую бутылку, пока в коробке не закончится пивасик - это while
Если каждую бутылку, пока протертых бутылок с пивасиком станет 4 - это тоже while
Если каждую бутылку, пока в коробке не закончится пивасик, но раз уж взял бутылку последнюю с молоком, то будь любезен протри - это do-while
Если с 3-й по 12-ю - это for
Если только с молоком - это мамка, а не батя

Ответ написан более трёх лет назад
Нравится 10 3 комментария

space2pacman

Ярослав Иванов @space2pacman
Аналогия с пивасиком как раз ему зайдёт))) только надо ещё разбавить нецензурными словами.
Вы, учитель года :))

webinar

iMaximus, видимо нет, автор просил для детей 3-х лет, я старался. А ответами он отметил варианты 18+, со всякими взрослыми словечками 🙂

Вообще, эти три цикла взаимозаменяемы, т.е. если есть программа, написана с помощью одного из них, то она всегда может быть переписана с помощью любого другого. Но по правилам хорошего стиля и для удобства рекомендации следующие:
for используется, когда число итераций известно (есть переменная или константа, которая определяет это количество).
while и do-while используются, когда число итераций заранее неизвестно.
while используется, когда существует возможность, что цикл не выполнится ни разу, а do-while следует использовать, если известно, что как минимум одна итерация всегда требуется.

Для примера:
for - выведите N чисел на экран (N определяет число итераций).
while - алгоритм Евклида для вычисления НОД (если одно из чисел 0, то итераций не будет)
do-while - реализация игры "Угадай число". (всегда требуется хотя бы одна попытка, то точное их число неизвестно).

Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать

lxsmkv

Test automation engineer

Нам в школе так обьяснили:
while - в зависимости от условия тело цикла может быть не выполнено ни разу.
do while - тело цикла будет выполнено минимум один раз.

ну а for - будет выполняется для выбраных элементов последовательности (какие это будут элементы - указывается в условии). Тут можно задать периодичность, например, для каждого второго элемента.

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать

Как - то, почитал я ответы коллег, и остался разочарован. Понятно, что вопрос не простой, а очень простой, но можно и по аккуратнее в изложении. В общем, мои 5 копеек.
Любой цикл - это кусок кода, который обычно называют телом цикла, и который мы желаем выполнить несколько раз. Количество повторений может быть заданно заранее, например: цикл от 0 до 10, зависеть от данных, например: для каждого элемента массива или зависеть от значения, которое мы в теле цикла вычисляем, например: пока f(x) > 0 выполнять. По крайней мере, во всех известных мне языках программирования, есть оператор досрочного выхода из цикла.
while. Цикл с предварительным условием. Выполняется пока условие истинно. Проверка происходит до исполнения тела цикла. Если условие изначально ложно, то тело не выполнится ни разу. Если условие ни когда не станет ложным, то мы получим бесконечный цикл. Распространенные ошибки новичков, при использовании этого цикла:
- условие не зависит от переменных, которые изменяются в теле цикла, и оно всегда получается истинным
- условие ни когда не станет ложным, в силу его свойств, например: X * X >= 0 всегда верно
Пример на php:

$i = 1; while ($i

do . while. Цикл с постусловием. Отличие от предыдущего в том, что тело цикла исполняется хотя бы один раз, и после этого происходит проверка условия выхода из цикла. К типичным ошибкам предыдущего вида циклов добавляется то, что этот цикл гарантированно исполняется один раз, что не всегда желательно.
В этом примере цикл отработает один раз, не смотря на то, что условие ложно:

$i = 0; do < echo $i; >while ($i > 0);

for. Чаще всего этот оператор описывает цикл с фиксированным количеством повторений. Вот так он может выглядеть, например, для php:

for ($i = 1; $i

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

5. Операторы if, switch, while, for, do while, foreach, continue, break.

Оператор ветвления, проверяет некоторое условие и, в зависимости от результатов, выполняет определенный блок кода. В качестве условий могут использоваться любые операции возвращающие значение типа bool.

if(flag) // проверка истинности < // do something > 

Если при несоблюдении условия надо выполнить какой-то код, то к оператору if можно добавить блок else.

if(flag) < // do something > else < // do something else > 
Оператор while

Оператор цикла, выполняет блок кода, пока условие принимает значение true. Перед каждым выполнением цикла, выражение while проверяется и может выполняться от нуля(то есть вообше не выполниться) до нескольких раз.

while(flag) // проверка истинности < // do something > 

Цикл может быть прерван операторами break, return, throw или goto.

while(сonditionIsTrue) // проверка истинности < // do something if (flag) return; // если условие true цикл прерывается // continue do something > 
Оператор for

Оператор цикла, выполняет блок кода, пока условие не примет значение false. В каждом операторе определяются секции инициализации, условия и итератора. Они все определяют, сколько раз цикл будет повторяться.

for (initializer; condition; iterator) < //body > 

В инициализации задаются начальные условия перед циклом. В условии происходит проверка истинности выражения. В итераторе опеределяется, что происходит после каждой итерации. Цикл так же может быть прерван операторами break, return, throw или goto.

for (int i = 0; i < value; iterator(), i++) < //do something > void iterator( ) < // do something too > 

Итератор, как и инициализация может содержать несколько выражений, разделенных запятыми, в данном случае выполнялся метод iterator() и значение переменной i инкрементировалось. Все секции в операторе for не являются обязательными. Следующий операторо создает бесконечный цикл.

for ( ; ; ) < //doing something infinitely > 
Оператор do while

Оператор цикла, в отличии от while проверка условия происходит после выполнения. То есть Оператор выполнится хотя бы один раз.

do < //do something > while(condition); 

В любой точке блока do-while можно разорвать цикл с помошью оператора break. Оператор continue позволяет пропустить блок и перейти непосредственно к оператору while. Из цикла так же можно выйти с помощью return, throw или goto.

Оператор foreach

Оператор цикла, который повторяет блок кода для каждого элемента из массива или коллекции, которые реализуют интерфейс IEnumerable или IEnumerator. Однако, его нельзя использовать для изменения массива или коллекции - для этого используется цикл for.

int[] array = new int[] < . >; //инициализация массива foreach (int element in array) //проход по каждому элементу < //do something with element > 

В любой момент в блоке foreach цикл можно прервать с помощью break, goto, return или throw, или перейти к следующей итерации с помощью continue.

Оператор switch

Оператор ветвления, более продвинутый, чем if, так как позволяет обрабатывать сразу несколько условий. После каждого блока case следует явный выход из swhith путем использования операторов break, goto или return.

int i = . //переменной i присваивается какое-то значение. switch(i) // проверка истинности < case 0: //do something break; case 1: case 2: //do something else return true; break; default: //do anything break; > 

Выражение сравнения switch(expr) может быть любым выражением, отличным от null.

Оператор break

Оператор завершает выполнение цикла в котором находится или оператора switch. Управление передается дальше идущему коду.

Оператор сontinue

Оператор передает управление следующей итерации цикла while, do, for или foreach, в котором он находится.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *