Ранний выход из функции в Go
Давайте теперь будем смотреть, что происходит после команды
return. Как только она выполнится, функция закончит свою
работу. До строк ниже в этом вызове выполнение уже не дойдет.
В Go команда в том же блоке сразу после return еще и
недостижима: компилятор такую программу не собирает. Поэтому после
возврата в том же блоке код не пишут.
Если параметр равен нулю, func вернет ноль раньше, чем
дойдет до умножения. Для другого числа сработает второй return:
package main
import "fmt"
func func(n int) int {
if n == 0 {
return 0
}
return n * 2
}
func main() {
fmt.Println(func(0)) // выведет 0
fmt.Println(func(4)) // выведет 8
}
Это не значит, что в функции должен быть один return. Но в
одном вызове выполнится только один из них. В зависимости от параметра
сработает либо первый, либо второй:
package main
import "fmt"
func func(n int) string {
if n >= 0 {
return "+"
}
return "-"
}
func main() {
fmt.Println(func(3)) // выведет '+'
fmt.Println(func(-3)) // выведет '-'
}
Тот же ранний выход возвращает первое положительное из двух чисел:
package main
import "fmt"
func func(a, b int) int {
if a > 0 {
return a
}
return b
}
func main() {
fmt.Println(func(3, 9)) // выведет 3
}
Соберется ли следующий код? Что хотел вернуть автор и что получится,
если оставить только первый return?
func square(n int) int {
return n
res := n * n
return res
}
fmt.Println(square(3))
Что выведет каждый из вызовов fmt.Println в результате
выполнения следующего кода:
func func(n int) int {
if n <= 0 {
if n < 0 {
return -n
}
return 0
} else {
return n * n
}
}
fmt.Println(func(10))
fmt.Println(func(-5))
Объясните почему.
Что выведет каждый из вызовов fmt.Println в результате
выполнения следующего кода:
func func(n int) int {
if n <= 0 {
if n < 0 {
return -n
}
return 0
}
return n * n
}
fmt.Println(func(10))
fmt.Println(func(-5))
Объясните почему.
Напишите функцию func с параметром n: если n
отрицательное, сразу верните 0, иначе верните n.
Выведите результат для 5 и для -3.
Напишите функцию func с параметром n: если n
больше 100, верните 100 раньше конца, иначе верните
n. Проверьте на 150.