Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goPmFnRI 248 of 350 menu
◀ ▶

Возврат по условию в Go

Давайте теперь будем возвращать результат прямо из ветки, без лишней переменной. Сначала запишем выбор большего числа через промежуточную res:

package main import "fmt" func func(a, b int) int { var res int if a > b { res = a } else { res = b } return res } func main() { fmt.Println(func(3, 7)) // выведет 7 }

В зависимости от условия в res попадает либо одно значение, либо другое, а последней строкой оно возвращается. Ту же функцию можно записать короче:

package main import "fmt" func func(a, b int) int { if a > b { return a } return b } func main() { fmt.Println(func(3, 7)) // выведет 7 }

Тот же шаблон подходит для проверки четности. Нечетное число дает 0, четное делится пополам:

package main import "fmt" func func(n int) int { if n%2 != 0 { return 0 } return n / 2 } func main() { fmt.Println(func(8)) // выведет 4 fmt.Println(func(5)) // выведет 0 }

Пусть функция func возвращает сумму чисел от 1 до 5. Команду return ставят после цикла:

package main import "fmt" func func() int { sum := 0 for i := 1; i <= 5; i++ { sum += i } return sum } func main() { res := func() fmt.Println(res) // выведет 15 }

Если поставить return внутри цикла, он прокрутится лишь одну итерацию и функция сразу закончится. За один шаг в sum окажется только 1, а не вся сумма. После цикла компилятору все равно нужен возврат: он считает, что цикл мог не выполниться.

package main import "fmt" func func() int { sum := 0 for i := 1; i <= 5; i++ { sum += i return sum } return 0 } func main() { res := func() fmt.Println(res) // выведет 1 }

То, что return стоит внутри цикла, не всегда ошибка. Следующая функция считает, сколько целых чисел, начиная с 1, нужно сложить, чтобы сумма стала больше или равна 100:

package main import "fmt" func func() int { sum := 0 i := 1 for { // цикл крутится, пока не выйдет return sum += i if sum >= 100 { return i } i++ } } func main() { fmt.Println(func()) // выведет 14 }

Что выведется на экран в результате выполнения следующего кода:

func func(num int) int { sum := 0 for i := 1; i <= num; i++ { sum += i return sum } return 0 } fmt.Println(func(5))

Объясните почему. Что хотел сделать автор данного кода? Исправьте ошибку автора.

Напишите функцию, которая параметром типа int будет принимать число и делить его на 2 столько раз, пока результат не станет меньше 10. Пусть функция возвращает количество итераций, которое потребовалось для достижения результата.

Дана следующая функция:

func func(num1, num2 int) int { var res int if num1 > 0 && num2 > 0 { res = num1 * num2 } else { res = num1 - num2 } return res } fmt.Println(func(3, 4))

Перепишите ее в сокращенной форме: возвращайте результат прямо из веток, без переменной res.

Напишите функцию func с параметрами a и b, которая по условию возвращает меньшее. Выведите результат для 2 и 9.

Напишите функцию func с параметром n: при n меньше нуля верните -1, иначе верните 1. Проверьте на 0 и -4.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить