Функция может возвращать некоторый результат. Для этого используется оператор return, после которого указывается результат функции:
return результат_функции;
В качестве результата функции может выступать какое-то значение (число, строка, объект другого типа), значение переменной или константы, какое-то вычисляемое выражение, например, арифметическая операция или даже результ другой функции.
Например, определим функцию, которая возвращает сумму двух чисел:
int sum(int a, int b){ return a + b; }
Возвращаемый тип ставится перед именем функции. То есть в данном случае функция возвращает значение типа int. После оператора return
в теле функции указывается какое именно значение будет возвращено. В данном случае это результат выражения (a + b). Причем тип значения после
оператора return должен соответствовать типу функции. В данном случае функция имеет тип int и возвращает сумму a + b
,
которая тоже представляет тип int
.
Кроме того, оператор return завершает выполнение функции, поэтому все остальные инструкции в функции должны идти до оператора return.
Результат функции мы можем присвоить переменной и затем использовать в программе:
void main() { int result = sum(2, 5); print(result); // 7 } int sum(int a, int b){ return a + b; }
Здесь результат функции sum, то есть сумма двух чисел присваивается переменной result.
Поскольку функция sum возвращает число, то мы можем использовать результат функции как число:
void main() { print(sum(2, 5)); // 7 print(sum(4, 5)); // 9 print(sum(11, 5)); // 16 } int sum(int a, int b){ return a + b; }
Здесь в функцию print напрямую передается результат функции sum.
При определении функции мы можем не указывать возвращаемый тип. Тогда он выводится исходя из значения после оператора return:
void main() { var n = sum(2, 5); print(n); } // функция имеет тип int sum(int a, int b){ return a + b; }
Если функция имеет одну строку кода, как выше в случае с функции sum, то мы можем сократить определение функции:
void main() { print(sum(2, 5)); // 7 } int sum(int a, int b) => a + b;
В этмо случае возвращаемое значение указывается после стрелки =>
, а оператор return
явным образом не указывается.
Если функция не имеет оператора return, то в тело функции неявно добавляется инструкция return null;
. Например, функция sum в следующем коде
void main() { sum(2, 5); } sum(int a, int b){ print(a + b); }
фактически будет эквивалентна
sum(int a, int b){ print(a + b); return null; }
Если функция не должна возвращать никакого значения, то функция имеет тип void. Причем мы даже можем определить переменную типа void и присвоить ей результат void-функции, но ничего сделать c void-объектом мы не сможем:
void main() { void n = hello(); // поскольку переменная n представляет тип void, // ничего мы с ней не сможем сделать, даже вывести на консоль // print(n); } void hello(){ print("Hello!"); return null; }
Оператор return не только возвращает некоторое значение, некоторый результат из функции. Кроме того, return
осуществляет выход из функции. Например,
возьмем следующее определение функции sum:
int sum(int a, int b){ return a + b; int result = a + b; // эта строка выполняться не будет }
После оператора return осуществляется выход из функции sum, и последующие строки не выполняются.
И иногда необходимо в зависимости от некоторых условий выйти из функции, до ее завершения. В Dart также есть другая форма оператора return:
return;
Эта форма применяется в функция с типом void. Например:
void main() { checkAge(22); // Ваш возраст: 22 checkAge(222); // Недействительный возраст } void checkAge(int age){ if(age < 1 || age > 110) { print("Недействительный возраст"); return; // выходим из функции } print("Ваш возраст: $age"); }
Здесь функция checkAge принимает через параметр age некоторый возраст. Но значение типа int может представлять любое число - и отрицательное, и очень большое, которое не соответствует реально возможному значению возраста. И в функции checkAge сначала проверяем, если переданное значение меньше 0 или больше 110, то, будем считать, что возраст нейдествителен. И в этом случае выводим сообщение на консоль и выходим из функции:
if(age < 1 || age > 110) { print("Недействительный возраст"); return; // выходим из функции }
Если же это условие неверно, то есть age находится в диапазоне от 1 до 110, то выводим другое сообщение на консоль:
print("Ваш возраст: $age");