HTML / CSSJavaScriptNode jsПаттерны проектированияПрактические

Циклы.

Инкремент (++)

Инкремент - это увеличение значения числовой переменной на единицу

Пост-префиксная форма: i++

Префиксная форма: ++i

Пост-префиксная форма означает, что переменная будет увеличена после операции, в которой она принимает участие

1var x = 0, i = 2
2var z = i + x++

После операции:

1var z = i + x++
2console.log('z=',z);

Значение переменной zбудет 2 + 0 = 2, а значение переменной x станет равным 1

А вот после такой операции:

1var x = 0,i = 2
2var z = i + ++x
3console.log('z=',z);

Сначала значение переменной x станет 0 + 1 = 1, а затем будет вычислено значение переменной z: 2 + 1 = 3

Декремент (--)

Все то же самое, только значение не увеличивается на 1, а уменьшается.

Цикл for

while

Сначала вычисляется значение логического выражения в круглых скобках, и если условие выполнено (true), то выполняется очередная итерация цикла

1while ( condition ) {
2 // your code here
3}

Цикл while выполняется, пока условие истинно и прекращает свое выполнение как только условие становится ложно:

1var i = 99;
2while (i > 0)
3{
4 console.log(i + " bottles of water on the table");
5 i -= 1;
6}

На каждой итерации цикла значение переменной i будет увеличиваться на 1

1var i = 5;
2while (i > 5)
3{
4 console.log(i + " bottles of water on the table");
5 i ++
6}

Цикл не будет выполняться, поскольку условие i < 5 не выполнено

break

1var i = 99;
2while (true)
3{
4 console.log(i + " bottles of water on the table");
5 i--
6 if (i === 0)
7 {
8 break;
9 }
10}

continue

1var i = 0;
2
3while (i<99){
4
5 if (i % 2 === 0)
6 {
7 continue;
8 }
9 // Число нечетное
10 console.log(i + " is an odd number.");
11}

do ... while

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

1var sum = 0;
2var number = 1;
3do {
4 sum += number; // -- body
5 number++; // -- updater
6} while (number <= 50); // -- condition
7console.log("Sum = " + sum); // => Sum = 1275

Итерируемые структуры данных

:pencil:Итерирование

Итерирование - это последовательный перебор элементов какого-то множества ( например, массива )

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

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

for of & for in

Оба оператора, и for...in и for...of производят обход объектов. Разница лишь в том, как они это делают.

for...of

Оператор for...of выполняет обход по элементам коллекций (иначе говоря, итерируемых объектов, например, Array, Map, Set, String, arguments, DOM коллекций и т.д.), вызывая на каждом шаге итерации значение, а не ключ.

Оператор for...of для массивов работает аналогично forEach, но имеет преимущества: возможность использовать continue и break для контроля итераций, что невозможно в forEach

1// Обход массива
2var arr = [10, 20, 30];
3
4for (var value of arr) {
5 value += 1;
6 console.log(value);
7}
8// 11 21 31
9
10
11// Обход строки
12
13var str = 'cold';
14
15for (var char of str) {
16 console.log(char);
17}
18// "c" "o" "l" "d"
19
20// Обход Map
21
22var iterable = new Map([['a', 1], ['b', 2], ['c', 3]]);
23
24for (var entry of iterable) {
25 console.log(entry);
26}
27// ['a', 1] ['b', 2] ['c', 3]
28
29for (let [key, value] of iterable) {
30 console.log(value);
31}
32// 1 2 3
🔥Важно

Обычные объекты JS не являются итерабельными, поэтому цикл for ... of не может быть использован с объектом

1var obj = {
2 firstName: "John",
3 lastName:"Doe"
4 age:30,
5
6}
7
8for ( var x of obj ) {
9 console.log ( x )
10}
11
12// Uncaught TypeError: obj is not iterable

for...in

Цикл for...in проходит через перечисляемые свойства объекта. Он пройдёт по каждому отдельному элементу, вызывая на каждом шаге ключ.

1var obj = {a:1, b:2, c:3};
2
3for (var prop in obj) {
4 console.log(obj[prop]);
5}
6
7// 1 2 3

Цикл for...in проходит по свойствам в произвольном порядке, поэтому его не следует использовать для Array.

1arr = [ 7, 8, 9 ]
2
3for ( var x in arr ) {
4 console.log ( x, " : ", arr [ x ] )
5}
6
7/*
80 : 7
91 : 8
102 : 9
11*/

Практика 👨‍💻👩‍💻

Задание 1

Используя задание из лекции c циклом for переписать с использованием цикла while

Задание 2

Напишите код, который вычисляет среднюю оценки следующих учеников.

Затем основываясь на результате вывести Grade

RangeGrade
<60F
<70D
<80C
<90B
<100A

можно использовать любой из циклов

1var students = [
2{name:'David', score:80},
3{name:'John', score: 77},
4{name:'Maria', score:88},
5{name:'Alice', score:95},
6{name:'Thomas',score: 68}
7];
8
9/**
10*
11*/

Задание 3

Напишите программу, которая выполняет итерацию целых чисел от 1 до 100. Но для кратных трем выведите «Fizz» вместо числа, а для кратных пяти выведите «Buzz». Для чисел, кратных трем и пяти, выведите «FizzBuzz».

Алгоритм работы

fizbuz flowchart

Нужно использовать цикл while

Hello