while loop - demonoved/A-trial-run-in-solidity GitHub Wiki
// SPDX-License-Identifier: MIT
// compiler version must be greater than or equal to 0.8.20 and less than 0.9.0
pragma solidity ^0.8.23;
contract Loop {
function loop() public {
// цикл for
for (uint i = 0; i < 10; i++) {
if (i == 3) {
//переход к следующей интерации через continue
continue;
}
if (i == 5) {
//выход из цикла через break
break;
}
}
//цикл while
uint j;
while (j < 10) {
j++ ;
}
}
}
contract Loop {
Определение начала нового смарт контракта с именем Loop.
function loop() public {
Объявление функции loop, которая отмечена как public, что означает, что эта функция будет доступна для вызова извне контракта.
// цикл for
for (uint i = 0; i < 10; i++) {
Запуск цикла for, который инициализирует переменную счетчика i значением 0. Цикл будет выполняться, пока i меньше 10, и после каждой итерации значение i увеличивается на 1 (i++).
if (i == 3) {
//переход к следующей интерации через continue
continue;
}
Если переменная i равна 3, то оператор continue будет вызван. Это приведет к пропуску оставшейся части текущей итерации цикла и немедленному переходу к следующей итерации цикла.
if (i == 5) {
//выход из цикла через break
break;
}
Если переменная i равна 5, то оператор break будет вызван. Это приведет к тому, что выполнение цикла немедленно прекратится, и компилятор перейдет к выполнению кода, следующего за циклом for.
Итерации цикла for проходят следующим образом:
- i = 0: итерация выполняется,
- i = 1: итерация выполняется,
- i = 2: итерация выполняется,
- i = 3: цикл пропускает остальную часть этих операций и переходит к увеличению i до 4,
- i = 4: итерация выполняется,
- i = 5:
breakвызывается, и цикл завершается.
//цикл while
uint j;
while (j < 10) {
j++;
Это объявление цикла while, который не закончит свое выполнение, пока j не достигнет 10. Переменная j объявляется вне цикла и инициализируется как 0 (по умолчанию для uint в Solidity). В блоке цикла j увеличивается на 1 на каждой итерации.
}
}
Это окончание функции loop и окончание контракта Loop.
Применимость
Такой код, возможно, был написан с целью обучения или в качестве примера для демонстрации работы циклов в Solidity. В реальных смарт-контрактах, использующих циклы, очень важно учитывать стоимость газа и предотвращать возможность "out of gas" исключений (когда транзакция прерывается из-за того, что заданный лимит газа был исчерпан). В случае выполнения большого количества итераций или неопределенности в количестве итераций следует с особым вниманием оценивать возможные риски и затраты.