Возвращение результата из функции

Последнее обновление: 02.04.2023

Функция может возвращать некоторый результат. Для этого используется оператор 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 явным образом не указывается.

Функции типа void

Если функция не имеет оператора 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");
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850