Константы

Неизменность - признак мастерства или ограниченности мышления, не знаю, чего именно...

Итак, мы отлично поработали над такой важной для любого языка программирования темой, как операторы. Были приведены разнообразные примеры, которые с одной стороны, оживили повествование, с другой же стороны, дали нам почувствовать, что нам уже становится тесно в рамках пройденного материала и хочется вкусностей - новых и разных. Что же, приступим незамедлительно!

Рассматривая ECR протокол HYPERCOM, мы узнали, что, по сути, этот протокол, как и многие подобные, базируется на ASCII. Таблица ASCII же, в свою очередь, содержит не только символы, представляющие цифры, знаки и буквы латиницы, но и так называемые управляющие символы, то есть такие символы в кодировке, которым не приписано графическое представление, но которые используются для управления устройствами, организации передачи данных и других целей. Любой из символов ASCII имеет свой байтовый эквивалент. Здесь наблюдается своеобразный дуализм в том, что всякий ASCII-based протокол может быть представлен как байтовый, что, в том числе, служит причиной появления "гибридных" протоколов, где часть байтов трактуется как управляющие или символьные ASCII, другая же - как наборы байтов, представляющих текст в иных кодировках, например cp-1251, или числа, приведенные к двух- или четырёхбайтовому виду. Таков, к примеру, аналогичный рассмотренному протоколу HYPERCOM, ECR протокол компании Банкомсвязь. Работая с управляющими символами ASCII, нам в первую очередь представилось удобным использовать константы.

Как объявляются константы?

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

package main

const DC2 = 0x12 //DEVICE CONTROL TWO

const (
	STX = 0x02 // START OF TEXT
	ETX = 0x03 // END OF TEXT	
	EOT = 0x04 // END OF TRANSMISSION
)
//Некоторые управляющие символы ASCII 

Существует также возможность группового объявления в строку

package main

const ACK, NAK = 0x06, 0x15 
// ACKNOWLEDGE and NEGATIVE ACKNOWLEDGE

Это только один из множества возможных примеров, который мы избрали как логичное продолжение рассмотренного ранее материала. В целом же константы окружают нас повсюду, олицетворяя саму по себе возможность существования нашего мира. Это может быть число Pi и постоянная Планка, гравитационная постоянная и скорость света в вакууме. В каждом подобном случае, будь то число Авогадро или простое количество сантиметров в дюйме - смело используем константы.

Генератор констант iota

Константы могут объявляться следующим способом:

Однако, что толку от одинаковых констант? Настоящий полезный инструмент - генератор констант iota.

iota - на самом деле весьма мощный инструмент, в применении которого можно долго оттачивать своё искусство и проявлять изобретательность.

Особенности констант в языке Go

Константы в языке Go являются выражениями, значение которых не может быть изменено в процессе выполнения программы. Это значение заранее известно компилятору, и вычисление его относится ко времени компиляции а не ко времени выполнения. Значения констант ограничиваются базовыми типами, а также именованными типами, производными от базовых. Внимательный читатель мог заметить, что при инициализации констант мы до сих пор ни разу не указывали явно тип, выводя его из присваиваемого значения. На самом же деле тип можно указывать явно, однако необходимо отметить, что в языке Go это делают нечасто, и это связано с определённой своеобразностью констант этом языке. Константы, объявленные без явного указания типа становятся нетипизированными. Числовые нетипизированные константы компилятор не привязывает к определённому типу, и они обрабатываются с повышенной точностью, и, таким образом, могут содержать в себе значения, превышающие разрядность базовых типов. Присвоение константе значения обычной переменной компилятором не допускается. При выполнении операций с константами, при необходимости, следует выполнять привидение типов. Проиллюстрируем сказанное примерами. Как и ранее, примеры местами будут содержать некоторые новые сущности и понятия, во избежание излишнего упрощения. Разумеется, значение всех действий объясняется в комментариях.

Объявление константы с явным указанием типа

Объявление константы именованного типа, производного от базового

А такие приёмы недопустимы

Использование нетипизированных констант (полезнейшая вещь!)

Ещё один пример

Приведение типов

Пожалуй, теперь мы неплохо подготовлены и осведомлены в важной теме - использование констант в языке Go. "С чувством глубокого удовлетворения" двигаемся далее!

Last updated