← Все этапы
02 · ИНСТРУМЕНТЫУрок 03 из 1235 мин

Функции и результаты

Выделяем повторяемые действия в функции с понятными входами и выходами.

Функция описывает один шаг

Функция — именованный кусок программы, который можно вызвать из другого места. В объявлении func ticketTotal(prices ...int) int имя ticketTotal задаёт действие, prices ...int принимает любое число целых цен, а последний int означает, что функция вернёт целое число. Вызов ticketTotal(1200, 900, 900) передаёт три входных значения.

У dailyBudget два входа и два результата: дневной лимит и остаток от деления. В main переменные слева от := принимают возвращённые значения. main — специальная функция, с которой начинается запуск программы; выведите результаты через fmt.Println и посмотрите их в терминале командой go run main.go.

package main

import "fmt"

func ticketTotal(prices ...int) int {
	total := 0
	for _, price := range prices {
		total += price
	}
	return total
}

func dailyBudget(budget, days int) (int, int) {
	return budget / days, budget % days
}

func main() {
	total := ticketTotal(1200, 900, 900)
	daily, remainder := dailyBudget(10000, 3)
	fmt.Println("билеты:", total, "в день:", daily, "остаток:", remainder)
}

Сигнатура функции — контракт: в ней видны входы и выходы. Короткие функции легче проверить и повторно использовать. Несколько результатов удобны, когда операция естественно даёт пару связанных значений.

Практика

Попробуйте сами

В main.go оставьте три входные цены билетов 1200, 900, 900 и бюджет поездки 10000 на 3 дня. Напишите ticketTotal, которая принимает цены и возвращает их сумму, и dailyBudget, которая возвращает дневной лимит и остаток. Вызовите обе функции из main и выведите результаты в терминал командой go run main.go.

Проверка результата

Как понять, что получилось

В выводе есть билеты: 3000, в день: 3333 и остаток: 1. Сумма получена вызовом ticketTotal(1200, 900, 900), а оба значения бюджета — вызовом dailyBudget(10000, 3); функции не печатают результат сами, его выводит main.

Функции и результаты | Go | WebSchool · Go