Досрочный return в Dart
После того, как выполнится команда return, функция закончит
свою работу. То есть после выполнения return больше никакой
код не выполнится.
Смотрите пример:
int func(int val) {
return val * val;
print("!"); // этот код никогда не выполнится
}
void main() {
var res = func(3);
}
Это не значит, что в функции должен быть один return. Но
выполнится только один из них.
В следующем примере в зависимости от значения параметра выполнится
либо первый, либо второй return:
String func(int val) {
if (val >= 0) {
return "+";
} else {
return "-";
}
}
void main() {
print(func(3)); // выведет '+'
print(func(-3)); // выведет '-'
}
Что выведется на экран в результате выполнения следующего кода:
int func(int val) {
return val;
var res = val * val;
return res;
}
void main() {
print(func(3));
}
Объясните почему.
Что выведет каждый из print в результате выполнения
следующего кода:
int func(int val) {
if (val <= 0) {
return val.abs();
} else {
return val * val;
}
}
void main() {
print(func(10));
print(func(-5));
}
Объясните почему.
Что выведет каждый из print в результате выполнения
следующего кода:
int func(int val) {
if (val <= 0) {
return val.abs();
}
return val * val;
}
void main() {
print(func(10));
print(func(-5));
}
Объясните почему.
Пусть у нас есть функция, возвращающая сумму чисел от 1 до
5:
int func() {
var sum = 0;
for (var i = 1; i <= 5; i++) {
sum += i;
}
return sum;
}
void main() {
var res = func();
print(res); // выведет 15
}
Пусть теперь мы расположим return внутри цикла, вот так:
int func() {
var sum = 0;
for (var i = 1; i <= 5; i++) {
sum += i;
return sum;
}
return sum;
}
void main() {
var res = func();
print(res);
}
В этом случае цикл прокрутится лишь одну итерацию и произойдет
автоматический выход из функции и заодно из цикла. А за одну
итерацию цикла в переменной sum окажется лишь число 1,
а не вся нужная сумма.
Что выведется на экран в результате выполнения следующего кода:
int func(int val) {
var sum = 0;
for (var i = 1; i <= val; i++) {
sum += i;
return sum;
}
return sum;
}
void main() {
print(func(5));
}
Объясните почему.
Что хотел сделать автор данного кода? Исправьте ошибку автора.
То, что return расположен внутри цикла, не всегда может быть
ошибкой.
В следующем примере сделана функция, которая определяет, сколько
первых элементов списка нужно сложить, чтобы сумма стала больше или
равна 10. Если порог так и не достигнут, функция вернет
0:
int func(List<int> arr) {
var length = arr.length;
var sum = 0;
for (var i = 0; i < length; i++) {
sum += arr[i];
// Если сумма больше или равна 10:
if (sum >= 10) {
return i + 1; // выходим из цикла и из функции
}
}
return 0;
}
void main() {
var res = func([1, 2, 3, 4, 5]);
print(res);
}
А в следующем примере сделана функция, которая вычисляет, сколько
целых чисел, начиная с 1, нужно сложить, чтобы результат был
больше 100:
int func() {
var sum = 0;
var i = 1;
while (true) { // бесконечный цикл
sum += i;
if (sum >= 100) {
return i; // цикл крутится пока не выйдет тут
}
i++;
}
}
void main() {
print(func());
}
Напишите функцию, которая параметром будет принимать число и делить
его на 2 столько раз, пока результат не станет меньше
10. Пусть функция возвращает количество итераций, которое
потребовалось для достижения результата.