Введение
В этом лабе студенты углубятся в структуры циклов JavaScript, изучая различные методы итерации, которые являются фундаментальными для логики программирования. Лаб涵盖了基本的循环类型,包括 while 循环、do-while 循环、for 循环和 for-in 循环,通过实际的编码示例和渐进式学习,为每种结构提供实践经验。
Участники начнут с понимания базового синтаксиса while-циклов, узнавая, как создавать контролируемые итерации и выполнять задачи, такие как подсчет и условный поиск. При продвижении они будут практиковать реализацию различных структур циклов, сравнивать их уникальные характеристики и области применения, что поможет развить комплексное понимание того, как циклы могут быть использованы для манипуляции данными, итерации по массивам и создания динамических решений в JavaScript.
Изучите синтаксис и базовое использование цикла while
В этом шаге вы узнаете о базовом синтаксисе и использовании циклов while в JavaScript. Циклы while - это фундаментальные управляющие структуры, которые позволяют повторять блок кода, пока заданное условие истинно.
Давайте начнём с создания нового файла JavaScript для изучения циклов while. Откройте WebIDE и создайте файл с именем whileLoop.js в директории ~/project.
// Создадим простой цикл while для подсчёта от 1 до 5
let count = 1;
while (count <= 5) {
console.log(`Текущее значение счётчика: ${count}`);
count++;
}
Теперь запустите файл JavaScript с использованием Node.js, чтобы увидеть вывод:
node ~/project/whileLoop.js
Пример вывода:
Текущее значение счётчика: 1
Текущее значение счётчика: 2
Текущее значение счётчика: 3
Текущее значение счётчика: 4
Текущее значение счётчика: 5
Разберёмся с синтаксисом цикла while:
let count = 1;инициализирует переменную-счётчик перед цикломwhile (count <= 5)определяет условие, которое должно быть истинным, чтобы продолжать циклconsole.log()выводит текущее значениеcountcount++увеличивает счётчик на каждой итерации
Теперь создадим более практический пример, демонстрирующий цикл while с более сложным условием:
// Создадим цикл while для поиска первого числа, которое делится на 3 и на 5
let number = 1;
while (!(number % 3 === 0 && number % 5 === 0)) {
number++;
}
console.log(`Первое число, делящееся на 3 и на 5: ${number}`);
Запустите файл снова:
node ~/project/whileLoop.js
Пример вывода:
Первое число, делящееся на 3 и на 5: 15
Этот пример показывает, как циклы while могут быть использованы для поиска конкретных условий или выполнения итеративных задач.
Практикуйте цикл do-while с инкрементальной итерацией
В этом шаге вы узнаете о циклах do-while в JavaScript, которые похожи на циклы while, но с важной разницей: блок кода выполняется хотя бы один раз перед проверкой условия.
Создайте новый файл с именем doWhileLoop.js в директории ~/project с использованием WebIDE:
// Демонстрируем цикл do-while с имитацией ввода пользователя
let attempts = 0;
let secretNumber = 7;
let guess;
do {
// Имитируем случайный угадывание между 1 и 10
guess = Math.floor(Math.random() * 10) + 1;
attempts++;
console.log(`Попытка ${attempts}: Угадано ${guess}`);
if (guess === secretNumber) {
console.log(`Поздравляем! Вы угадали число за ${attempts} попыток.`);
}
} while (guess !== secretNumber);
Запустите файл JavaScript, чтобы увидеть, как работает цикл do-while:
node ~/project/doWhileLoop.js
Пример вывода:
Попытка 1: Угадано 3
Попытка 2: Угадано 9
Попытка 3: Угадано 7
Поздравляем! Вы угадали число за 3 попытки.
Основные характеристики циклов do-while:
- Блок кода выполняется хотя бы один раз перед проверкой условия
- Условие проверяется в конце каждой итерации
- Полезен, когда нужно гарантировать, что код выполнится хотя бы один раз
Давайте создадим еще один пример, чтобы более наглядно показать цикл do-while:
// Демонстрируем инкрементальную итерацию с циклом do-while
let total = 0;
let i = 1;
do {
total += i;
console.log(`Текущая сумма: ${total}, Текущее число: ${i}`);
i++;
} while (total < 10);
console.log(`Конечная сумма: ${total}`);
Запустите файл снова:
node ~/project/doWhileLoop.js
Пример вывода:
Текущая сумма: 1, Текущее число: 1
Текущая сумма: 3, Текущее число: 2
Текущая сумма: 6, Текущее число: 3
Текущая сумма: 10, Текущее число: 4
Конечная сумма: 10
Этот пример показывает, как циклы do-while могут быть использованы для инкрементальной итерации, гарантируя, что блок кода выполнится хотя бы один раз перед проверкой условия завершения.
Реализуйте цикл for для контролируемых итераций
В этом шаге вы узнаете о циклах for в JavaScript, которые предоставляют простой способ для выполнения контролируемых итераций с четким началом, концом и механизмом инкремента/декремента.
Создайте новый файл с именем forLoop.js в директории ~/project с использованием WebIDE:
// Базовый цикл for для вывода чисел от 1 до 5
console.log("Базовый цикл подсчета:");
for (let i = 1; i <= 5; i++) {
console.log(`Текущее число: ${i}`);
}
// Цикл for для вычисления факториала числа
console.log("\nВычисление факториала:");
let number = 5;
let factorial = 1;
for (let j = 1; j <= number; j++) {
factorial *= j;
}
console.log(`Факториал ${number} равен: ${factorial}`);
// Цикл for для итерации по массиву
console.log("\nИтерация по массиву:");
let fruits = ["apple", "banana", "cherry", "date"];
for (let k = 0; k < fruits.length; k++) {
console.log(`Фрукт по индексу ${k}: ${fruits[k]}`);
}
Запустите файл JavaScript, чтобы увидеть различные примеры цикла for:
node ~/project/forLoop.js
Пример вывода:
Базовый цикл подсчета:
Текущее число: 1
Текущее число: 2
Текущее число: 3
Текущее число: 4
Текущее число: 5
Вычисление факториала:
Факториал 5 равен: 120
Итерация по массиву:
Фрукт по индексу 0: apple
Фрукт по индексу 1: banana
Фрукт по индексу 2: cherry
Фрукт по индексу 3: date
Разберёмся с синтаксисом цикла for:
for (initialization; condition; increment/decrement)- стандартная структураlet i = 1инициализирует счётчик циклаi <= 5определяет условие продолженияi++увеличивает счётчик после каждой итерации
Создайте еще один пример, демонстрирующий более сложное использование цикла for:
// Вложенный цикл for для создания таблицы умножения
console.log("Таблица умножения:");
for (let row = 1; row <= 5; row++) {
let rowOutput = "";
for (let col = 1; col <= 5; col++) {
rowOutput += `${row * col}\t`;
}
console.log(rowOutput);
}
Запустите файл снова:
node ~/project/forLoop.js
Пример вывода:
Таблица умножения:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
Этот пример показывает, как вложенные циклы for могут быть использованы для создания более сложных паттернов итерации.
Используйте цикл for-in для перебора элементов массива
В этом шаге вы узнаете о цикле for-in в JavaScript, который предоставляет простой способ итерировать по свойствам объекта или элементам массива.
Создайте новый файл с именем forInLoop.js в директории ~/project с использованием WebIDE:
// Итерирование по массиву с использованием цикла for-in
let fruits = ["apple", "banana", "cherry", "date"];
console.log("Итерирование по индексам массива:");
for (let index in fruits) {
console.log(`Индекс: ${index}, Фрукт: ${fruits[index]}`);
}
// Итерирование по объекту с использованием цикла for-in
let student = {
name: "John Doe",
age: 22,
major: "Computer Science",
gpa: 3.8
};
console.log("\nИтерирование по свойствам объекта:");
for (let property in student) {
console.log(`${property}: ${student[property]}`);
}
// Практический пример: вычисление общей стоимости товаров
let shoppingCart = [
{ name: "Ноутбук", price: 1000 },
{ name: "Наушники", price: 100 },
{ name: "Мышь", price: 50 }
];
console.log("\nВычисление общей стоимости:");
let totalPrice = 0;
for (let index in shoppingCart) {
totalPrice += shoppingCart[index].price;
}
console.log(`Общая стоимость: $${totalPrice}`);
Запустите файл JavaScript, чтобы увидеть работу цикла for-in:
node ~/project/forInLoop.js
Пример вывода:
Итерирование по индексам массива:
Индекс: 0, Фрукт: apple
Индекс: 1, Фрукт: banana
Индекс: 2, Фрукт: cherry
Индекс: 3, Фрукт: date
Итерирование по свойствам объекта:
name: John Doe
age: 22
major: Computer Science
gpa: 3.8
Вычисление общей стоимости:
Общая стоимость: $1150
Основные моменты о циклах for-in:
- Работает как с массивами, так и с объектами
- Итерируется по индексам (для массивов) или свойствам (для объектов)
- Предоставляет простой способ доступа к элементам без использования традиционных циклов с индексами
- Будьте осторожны при использовании с массивами, так как он итерируется по всем перечисляемым свойствам
Давайте рассмотрим еще один пример, чтобы продемонстрировать его гибкость:
// Использование цикла for-in для фильтрации и преобразования данных
let grades = {
math: 85,
science: 92,
english: 78,
history: 88
};
console.log("Фильтрация оценок выше 80:");
for (let subject in grades) {
if (grades[subject] > 80) {
console.log(`${subject}: ${grades[subject]}`);
}
}
Запустите файл снова:
node ~/project/forInLoop.js
Пример вывода:
Фильтрация оценок выше 80:
math: 85
science: 92
history: 88
Сравните и противопоставьте разные структуры циклов
В этом шаге вы изучите различия между различными структурами циклов в JavaScript и узнаете, когда эффективно использовать каждый тип цикла.
Создайте новый файл с именем loopComparison.js в директории ~/project с использованием WebIDE:
// Демонстрация различных структур циклов для одной и той же задачи
// 1. Цикл while: Лучший для неизвестного количества итераций
console.log("Пример цикла while:");
let whileCounter = 1;
while (whileCounter <= 5) {
console.log(`Цикл while: ${whileCounter}`);
whileCounter++;
}
// 2. Цикл do-while: Гарантирует хотя бы одну итерацию
console.log("\nПример цикла do-while:");
let doWhileCounter = 1;
do {
console.log(`Цикл do-while: ${doWhileCounter}`);
doWhileCounter++;
} while (doWhileCounter <= 5);
// 3. Цикл for: Лучший для известного количества итераций
console.log("\nПример цикла for:");
for (let forCounter = 1; forCounter <= 5; forCounter++) {
console.log(`Цикл for: ${forCounter}`);
}
// 4. Цикл for-in: Итерирование по свойствам объекта
console.log("\nПример цикла for-in:");
let student = {
name: "John Doe",
age: 22,
major: "Computer Science"
};
for (let property in student) {
console.log(`${property}: ${student[property]}`);
}
// 5. Сравнение производительности циклов
console.log("\nСравнение производительности циклов:");
const iterations = 1000000;
console.time("Цикл while");
let a = 0;
while (a < iterations) {
a++;
}
console.timeEnd("Цикл while");
console.time("Цикл for");
for (let b = 0; b < iterations; b++) {}
console.timeEnd("Цикл for");
Запустите файл JavaScript, чтобы увидеть сравнение:
node ~/project/loopComparison.js
Пример вывода:
Пример цикла while:
Цикл while: 1
Цикл while: 2
Цикл while: 3
Цикл while: 4
Цикл while: 5
Пример цикла do-while:
Цикл do-while: 1
Цикл do-while: 2
Цикл do-while: 3
Цикл do-while: 4
Цикл do-while: 5
Пример цикла for:
Цикл for: 1
Цикл for: 2
Цикл for: 3
Цикл for: 4
Цикл for: 5
Пример цикла for-in:
name: John Doe
age: 22
major: Computer Science
Сравнение производительности циклов:
Цикл while: 2.345мс
Цикл for: 1.876мс
Основные различия:
Цикл while:
- Используйте, когда количество итераций неизвестно
- Условие проверяется перед каждой итерацией
- Может не выполниться, если условие ложно с самого начала
Цикл do-while:
- Гарантирует хотя бы одну итерацию
- Условие проверяется после каждой итерации
- Полезен, когда нужно выполнить код хотя бы один раз
Цикл for:
- Лучший для известного количества итераций
- Компактный синтаксис с инициализацией, условием и инкрементом
- Чаще всего используется для итерации по массивам и подсчета
Цикл for-in:
- Особенно для итерирования по свойствам объекта
- Работает с объектами и массивами
- Предоставляет индексы или имена свойств
Давайте создадим последний пример, чтобы продемонстрировать выбор правильного цикла:
// Выбор правильного цикла для различных сценариев
let numbers = [10, 20, 30, 40, 50];
// Цикл while для условного поиска
console.log("\nВыбор правильного цикла:");
let searchValue = 30;
let index = 0;
while (index < numbers.length && numbers[index] !== searchValue) {
index++;
}
console.log(`Найдено ${searchValue} по индексу: ${index}`);
// Цикл for для простой итерации
console.log("Квадраты чисел:");
for (let i = 0; i < numbers.length; i++) {
console.log(`${numbers[i]} в квадрате: ${numbers[i] * numbers[i]}`);
}
Запустите файл снова:
node ~/project/loopComparison.js
Пример вывода:
Выбор правильного цикла:
Найдено 30 по индексу: 2
Квадраты чисел:
10 в квадрате: 100
20 в квадрате: 400
30 в квадрате: 900
40 в квадрате: 1600
50 в квадрате: 2500
Резюме
В этом практическом занятии участники изучали различные структуры циклов в JavaScript, сосредоточившись на понимании и реализации разных типов циклов. Практическое занятие началось с глубокого изучения циклов while, демонстрации их базового синтаксиса и практических применений с помощью примеров подсчета итераций и поиска конкретных числовых условий. Участники узнали, как инициализировать переменные цикла, определить условия цикла и использовать операторы инкремента для управления выполнением цикла.
Практическое занятие продолжалось с изучением дополнительных типов циклов, включая циклы do-while, for и for-in, предоставляя практический опыт работы с каждой структурой. Сравнив и противопоставив эти механизмы циклов, ученики приобрели понимание способа выбора подходящих структур циклов для различных сценариев программирования, повысив свои навыки программирования на JavaScript и加深了对控制流机制的理解。



