Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр2_Go.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
351.23 Кб
Скачать

Лабораторная работа 2 Процедурное программирование. Ветвление, инструкция выбора и цикл

Введение в инструкции

Формально во многих ситуациях синтаксис языка Go требует использовать точки с запятой (;) для завершения инструкций. В действительности использовать точки с запятыми требуется довольно редко. Это объясняется тем, что компилятор автоматически вставляет точки с запятой в концах непустых строк, завершающихся идентификатором, числовым литералом, символьным литералом, строковым литералом, некоторыми ключевыми словами (break, continue, fallthrough, return), инструкциями инкремента или декремента (++ или -- ) или закрывающей круглой, квадратной или фигурной скобкой (), ], }).

Два типичных случая обязательного использования точек с запятой – когда в одной строке находятся две или более инструкций и в простых циклах for.

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

// Правильно

for i := 0; i < 5; i++ {

fmt.Println(i)

}

// НЕПРАВИЛЬНО! (Не будет компилироваться)

for i := 0; i < 5; i++

{

fmt.Println(i)

}

Фрагмент справа не будет компилироваться, потому что компилятор автоматически добавит точку с запятой после ++.

Присваивание значений выполняется с помощью оператора присваивания =. Переменные могут одновременно объявляться с помощью ключевого слова var и инициализироваться с использованием оператора =. Тип, присваиваемый переменной, должен быть совместим с присваиваемым значением. Если оператор = используется без ключевого слова var , переменная слева от него уже должна существовать к этому моменту. Допускается указывать слева от оператора присваивания несколько переменных, перечисленных через запятую, а также использовать пустой идентификатор (_), совместимый со значениями любых типов и позволяющий игнорировать любые присваиваемые значения. Множественное присваивание упрощает возможность обмена двух переменных значениями без явного создания временной переменной, например a, b = b, a.

Оператор сокращенного объявления переменных (:= ) одновременно объявляет новую переменную и присваивает ей значение. Допускается указывать слева от оператора несколько переменных, перечисленных через запятую, как в случае с оператором присваивания =, за исключением того, что слева должна быть указана как минимум одна новая переменная (пустой идентификатор не считается). Если слева от оператора указана уже существующая переменная, ей просто будет присвоено новое значение, если только оператор := не находится в начале новой области видимости, такой как инструкция if или блок инициализации инструкции for.

x, y, z := 1, -1, 15

for x := 4; x < 10; x++ { // переменная x цикла затенит внешнюю переменную x

y := 1 // переменная y затенит внешнюю переменную y

z = -13 // z - это внешняя переменная z

fmt.Printf("значение переменных внутри цикла:

x=%d y=%d z=%d\n", x, y, z)

}

fmt.Printf("значение внешних переменных: x=%d y=%d z=%d\n", x, y, z)

значение переменных внутри цикла: x=9 y=1 c=-13

значение внешних переменных: x=1 y=-1 z=-13

Этот фрагмент демонстрирует способность оператора := «затенять» переменные. Здесь, внутри цикла for , переменные x и y затеняют переменные из внешней области видимости, и, хотя это вполне допустимо, такой прием практически всегда является ошибкой программирования. С другой стороны, здесь существует только одна переменная z (из внешней области видимости), то есть такое ее использование правильно.

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

Инструкция if

Инструкция if в языке Go имеет следующий синтаксис: