cpp

Пользовательские функции

Функция — это фрагмент кода, который можно неоднократно вызвать из любого места программы. В предыдущих главах мы уже не один раз использовали встроенные функции, входящие в состав стандартной библиотеки. Например, с помощью функции len() получали количество байтов в строке. В этой главе мы рассмотрим создание пользовательских функций, которые позволят уменьшить избыточность программного кода и повысить его структурированность.

Создание функции и ее вызов

Определение функции имеет следующий формат:

func <Название функции>([<Название параметра 1> <Тип>
     [, ..., <Название параметра N> <Тип>]])[ <Тип результата>] {
   <Тело функции>
   [return[ <Возвращаемое значение>]]
}

Определение функции начинается с ключевого слова func, после которого указывается название функции. Название функции должно быть допустимым идентификатором, к которому предъявляются такие же требования как и к названиям переменных. Регистр первой буквы названия функции имеет значение. Если название начинается со строчной буквы, то функция будет доступна только внутри пакета, в котором она определена. Если название начинается с прописной буквы, то функцию можно будет импортировать из другого пакета. Кроме того, некоторые префиксы являются специальными, например, если название функции начинается с префикса Test, то она предназначена для тестирования фрагментов кода.

После названия функции, внутри круглых скобок, указывается название параметра и его тип. Если параметров несколько, то они перечисляются через запятую. Если функция не принимает параметров, то указываются пустые круглые скобки. Каждый параметр является локальной переменной. Эта переменная создается при вызове функции, а после выхода из функции она удаляется. Таким образом, локальная переменная видна только внутри функции. Если название локальной переменной совпадает с названием глобальной переменной, то все операции будут производиться с локальной переменной, а значение глобальной не изменится.

Параметр <Тип результата> задает тип значения, которое возвращает функция с помощью оператора return. Если функция не возвращает никакого значения, то тип возвращаемого значения не указывается.

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

func test() {
   fmt.Println("test()")
}

Так написать нельзя:

func test() 
{ // Ошибка! Так нельзя!
   fmt.Println("test()")
}

Вернуть значение из функции позволяет оператор return. После исполнения этого оператора выполнение функции останавливается и управление передается обратно в точку вызова функции. Это означает, что инструкции после оператора return никогда не будут выполнены. Пример возврата суммы двух чисел:

func Sum(x int, y int) int {
   return x + y
}

При вызове функции из программы указывается название функции, после которого внутри круглых скобок передаются значения. Если функция не принимает параметров, то указываются только круглые скобки. Если функция возвращает значение, то его можно присвоить переменной или просто проигнорировать. Необходимо заметить, что количество и тип параметров в объявлении функции должны совпадать с количеством и типом параметров при вызове. Пример вызова трех функций:

Print("Message") // Функция выведет сообщение Message
PrintOK()        // Вызываем функцию без параметров
z := Sum(10, 20) // Переменной z будет присвоено значение 30

Переданные значения присваиваются переменным, расположенным в той же позиции в определении функции. Так при использовании функции Sum(x int, y int) int переменной x будет присвоено значение 10, а переменной y — значение 20. Результат выполнения функции присваивается переменной z.

В качестве примера создадим три разные функции и вызовем их (листинг 10.1).

Листинг 10.1. Создание функций и их вызов

package main

import "fmt"

func main() {
   // Вызов функций
   Print("Сообщение")            // Сообщение
   PrintOK()                     // OK
   z := Sum(10, 20)
   fmt.Println(z)                // 30
}

// Определения функций
func Sum(x int, y int) int {     // Два параметра
   return x + y
}
func Print(msg string) {         // Один параметр
   fmt.Println(msg)
}
func PrintOK() {                 // Без параметров
   fmt.Println("OK")
}

Если несколько параметров имеют один и тот же тип данных, то тип можно указать только для последнего параметра. Например, определение функции Sum() можно записать так (переменные x и y будут иметь тип int):

func Sum(x, y int) int {
   return x + y
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp