return
Оператор return завершает функцию и возвращает значение вызывающему коду — или просто прерывает void-функцию досрочно, без возврата значения.
Полная статья
Описание
Оператор return прерывает выполнение текущей функции и передаёт управление обратно в то место, откуда она была вызвана. Если функция должна что-то вернуть — число, флаг, результат вычисления — return передаёт это значение вместе с управлением.
Функции типа void могут использовать return; без значения, чтобы досрочно прервать выполнение при выполнении какого-либо условия. Функции с любым другим возвращаемым типом обязаны вернуть значение совместимого типа.
Синтаксис
return;return value;
Параметры
value: любая переменная или константа подходящего типа. Тип должен совпадать с типом, объявленным в сигнатуре функции.
Пример кода
Функция сравнивает показания датчика с пороговым значением и возвращает результат:
int checkSensor() {
if (analogRead(0) > 400) {
return 1;
}
else {
return 0;
}
}
Отладочный приём с return
Оператор return удобно использовать при отладке: если вставить его в начало подозрительного блока кода, функция будет выходить раньше, не выполняя остальные инструкции. Это позволяет временно «отключить» часть логики без комментирования десятков строк.
void loop() {
// блестящая идея для проверки здесь
return;
// остальная часть нерабочего скетча
// этот код никогда не будет выполнен
}
Где применяется
- Защитные проверки в начале функции — если входной параметр некорректен, сразу выйти через
return, не выполняя остальной код. - Возврат результата вычисления — функция считает значение и возвращает его в
loop()или другую функцию для дальнейшей обработки. - Ранний выход из конечного автомата — если состояние не изменилось, незачем выполнять всю функцию целиком.
- Временное отключение кода при отладке — вставить
return;перед проблемным участком, чтобы проверить остальную часть скетча.
Практические замечания
- Функция, объявленная как
void, может содержатьreturn;без значения — это нормально и иногда очень удобно. - Если функция объявлена с конкретным типом (например,
intилиbool), компилятор потребует, чтобы все пути выполнения заканчивалисьreturnс подходящим значением. Забытыйreturnв одной из ветвейif— частая причина предупреждений при компиляции. - После
returnвесь код в той же функции ниже этой строки не выполняется. Следите за порядком проверок, чтобы не пропустить важную логику. - Возвращаемое значение можно сразу использовать в условии:
if (checkSensor() > threshold)— нет необходимости сохранять его в промежуточную переменную, если оно нужно только один раз. - Не путайте
returnсbreak:breakвыходит из цикла илиswitch, аreturnзавершает всю функцию целиком.