Досрочный выход из функции в C#
После того, как выполнится инструкция return, функция
закончит свою работу. То есть после выполнения return больше
никакой код не выполнится.
Смотрите пример:
int Func(int num)
{
return num * num;
Console.WriteLine("!"); // this code never runs
}
int res = Func(3);
Console.WriteLine(res); // prints 9
Это не значит, что в функции должен быть один return. Но
выполнится только один из них.
В следующем примере в зависимости от значения параметра выполнится
либо первый, либо второй return:
string Func(int num)
{
if (num >= 0)
{
return "+";
}
else
{
return "-";
}
}
Console.WriteLine(Func(3)); // prints +
Console.WriteLine(Func(-3)); // prints -
Пусть у нас есть функция, возвращающая сумму чисел от 1 до
5:
int Func()
{
int sum = 0;
for (int i = 1; i <= 5; i++)
{
sum += i;
}
return sum;
}
int res = Func();
Console.WriteLine(res); // prints 15
Пусть теперь мы расположим return внутри цикла, вот так:
int Func()
{
int sum = 0;
for (int i = 1; i <= 5; i++)
{
sum += i;
return sum;
}
return sum; // never reached
}
int res = Func();
Console.WriteLine(res); // prints 1
В этом случае цикл прокрутится лишь одну итерацию и произойдет
автоматический выход из функции (ну и заодно из цикла). А за одну
итерацию цикла в переменной sum окажется лишь число
1, а не вся нужная сумма.
То, что return расположен внутри цикла, не всегда может
быть ошибкой.
В следующем примере сделана функция, которая определяет, сколько
первых чисел, начиная с 1, нужно сложить, чтобы сумма стала
больше или равна 10:
int Func()
{
int sum = 0;
for (int i = 1; i <= 5; i++)
{
sum += i;
if (sum >= 10)
{
return i;
}
}
return 0;
}
int res = Func();
Console.WriteLine(res); // prints 4
А в следующем примере сделана функция, которая вычисляет, сколько
целых чисел, начиная с 1, нужно сложить, чтобы результат
был больше 100:
int Func()
{
int sum = 0;
int i = 1;
while (true)
{
sum += i;
if (sum >= 100)
{
return i;
}
i++;
}
}
Console.WriteLine(Func()); // prints 14
Что выведется в консоль в результате выполнения следующего кода:
int Func(int num1)
{
return num1;
int num2 = num1 * num1;
return num2;
}
Console.WriteLine(Func(3));
Объясните почему.
Что выведет каждый из Console.WriteLine в результате выполнения
следующего кода:
int Func(int num)
{
if (num <= 0)
{
return -num;
}
else
{
return num * num;
}
}
Console.WriteLine(Func(10));
Console.WriteLine(Func(-5));
Объясните почему.
Что выведет каждый из Console.WriteLine в результате выполнения
следующего кода:
int Func(int num)
{
if (num <= 0)
{
return -num;
}
return num * num;
}
Console.WriteLine(Func(10));
Console.WriteLine(Func(-5));
Объясните почему.
Что выведется в консоль в результате выполнения следующего кода:
int Func(int num1)
{
int num2 = 0;
for (int i = 1; i <= num1; i++)
{
num2 += i;
return num2;
}
return num2;
}
Console.WriteLine(Func(5));
Объясните почему.
Что хотел сделать автор данного кода? Исправьте ошибку автора.
Напишите функцию, которая параметром будет принимать число и
делить его на 2 столько раз, пока результат не станет
меньше 10. Пусть функция возвращает количество итераций,
которое потребовалось для достижения результата.