"Информатика (в 2-х частях)", Горячев А.В., Герасимова В.Г., Макарина Л.А., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Юдина А.Г., Чернышёва Т.Л.
Константы и собственные типы помогают писать программы понятнее и задавать правила для данных. Именованная константа заменяет повторяющееся неизменное значение удобным именем. Собственный тип описывает, какие значения может принимать переменная: это может быть набор отдельных вариантов или непрерывный диапазон. Разберём, где объявлять такие элементы и как использовать их в программе.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Именованная константа — имя, которому при объявлении присваивают значение, не изменяемое во время выполнения программы. Например, имя MaxScore может обозначать число 100. Такая запись нужна, чтобы число имело понятный смысл и не приходилось повторять его в разных местах программы.
Собственный тип — тип данных, который программист объявляет самостоятельно, чтобы точнее задать допустимые значения переменных. Например, можно описать тип для оценки или дня недели. Это помогает сделать назначение переменной яснее и уменьшает вероятность случайно использовать значение не по смыслу.
Перечислимый тип — собственный тип, значения которого задаются перечислением отдельных именованных элементов. Так можно записать конечный набор вариантов: например, дни недели или состояния светофора. Он нужен, когда переменная должна принимать один из заранее известных вариантов, а не произвольный текст.
Интервальный тип — собственный тип, значения которого образуют непрерывный диапазон элементов базового типа. Например, диапазон целых чисел от 2 до 5 включает 2, 3, 4 и 5. Такой тип нужен, чтобы явно обозначить границы допустимых значений переменной.
Именованную константу объявляют в разделе const до описания переменных, потому что программе сначала нужно сообщить, что означает выбранное имя. Например, запись MaxScore = 100 связывает понятное имя с конкретным значением. После объявления в проверках и вычислениях используют MaxScore, а не каждый раз вводят 100. Если правило изменится, значение можно поправить в одном месте, и смысл программы останется заметным.
Собственные типы объявляют в разделе type: сначала указывают имя, затем описывают, какие значения он задаёт. После этого переменную можно объявить с новым именем типа, например score: Mark. Такое разделение нужно потому, что описание типа задаёт общее правило, а объявление переменной создаёт конкретное место для хранения данных. Один и тот же тип можно использовать для нескольких переменных, не повторяя его устройство.
Перечислимый тип задаёт конечный набор значений в определённом порядке. В записи вроде (Monday, Tuesday, Wednesday) элементы — самостоятельные значения типа, а не строки с текстом внутри кавычек. Имена помогают программе работать с понятными вариантами вместо условных чисел, смысл которых пришлось бы запоминать. Порядок перечисления также задаёт порядок элементов, что может быть полезно в операциях сравнения.
Интервальный тип задают нижней и верхней границами базового типа, например 2..5 на основе целых чисел. Компилятор знает, что допустимы только значения внутри этого диапазона, поскольку остальные не соответствуют описанию типа. Границы выбирают по правилам задачи: для отметки это могут быть 2 и 5, а для номера месяца — 1 и 12. При этом тип не должен считаться заменой проверки ввода: поведение при ошибочном значении зависит от языка и среды, а программу нужно защищать от неверных данных.
Константа фиксирует конкретное значение, а собственный тип описывает допустимые значения переменной. Поэтому их используют для разных целей: например, константа может хранить максимальный результат, а интервальный тип — ограничивать диапазон отметок. Явные имена и границы помогают человеку читать программу и замечать несоответствия. Чем яснее описаны данные, тем проще проверять и изменять программу.
| Что объявляется | Как задаётся | Какие значения или смысл имеет | Пример применения |
|---|---|---|---|
| Именованная константа | В разделе const указывают имя и значение, например MaxScore = 100 | Неизменное значение с понятным именем | Проверить, не превышает ли результат MaxScore |
| Перечислимый тип | В разделе type перечисляют имена элементов в скобках, например Day = (Monday, Tuesday, Wednesday) | Конечный набор отдельных значений в заданном порядке | Хранить день недели в переменной типа Day |
| Интервальный тип | В разделе type задают границы базового типа, например Mark = 2..5 | Непрерывный диапазон значений между нижней и верхней границами включительно | Описать переменную для отметки от 2 до 5 |
Чтобы воспользоваться таблицей, сначала определите, что требуется задать: одно неизменное значение, отдельные варианты или диапазон. Затем найдите подходящий способ объявления и проверьте, где он используется в программе. Примеры показывают общий смысл записей; точный синтаксис зависит от языка программирования.
Условие: задать константу MaxScore со значением 100 и использовать её при проверке введённого результата. Решение начинаем с определения того, что число 100 обозначает неизменный предел, поэтому это константа, а не переменная. Запись ниже использует синтаксис Pascal-подобного языка.
Ответ: константа объявлена один раз, а проверка обращается к MaxScore. Если максимальный результат изменится, достаточно заменить 100 в объявлении, не переписывая условие. Имя также объясняет, почему сравнивается именно это число.
Условие: описать тип Day как перечисление дней недели и объявить переменную этого типа. Сначала замечаем, что множество значений конечное: день недели не может быть произвольным числом или любой строкой. Поэтому выбираем перечислимый тип и задаём в нём названия дней, каждое как отдельный элемент.
Ответ: тип Day содержит семь именованных значений, а today может обозначать один из этих дней. Элементы не записывают как строки в кавычках, потому что это значения нового типа. Такой способ делает условие проверки наглядным.
Условие: описать тип Mark как диапазон целых чисел от 2 до 5 и определить, допустимо ли введённое значение. Здесь значения идут подряд, поэтому перечислять их по одному не требуется. Интервальный тип можно построить на основе целого типа и задать его границы.
Ответ: допустимыми являются целые числа 2, 3, 4 и 5. Значения меньше 2 или больше 5 нужно отклонить или обработать как ошибочный ввод. Само объявление типа описывает границы, но проверка введённых данных остаётся задачей программы.
Ошибка: пытаться изменить именованную константу. Так делают, когда воспринимают её как обычную переменную, ведь у обеих есть имя и значение. Проверьте себя: если значение должно меняться в ходе работы программы, объявляйте переменную; если оно неизменно — константу.
Ошибка: путать объявление типа и объявление переменной. Причина в том, что обе записи связаны с описанием данных, но выполняют разные роли. В разделе type задают правило и имя типа, а затем отдельно объявляют переменную этим типом. Проверьте, есть ли в программе оба шага, если вам нужна переменная.
Ошибка: заключать элементы перечисления в кавычки или считать их строками. Это часто происходит потому, что элементы выглядят как слова. Но они являются отдельными значениями объявленного типа, поэтому кавычки меняют смысл записи. Проверьте себя: в объявлении перечисления и при использовании его элемента пишите имя без кавычек.
Ошибка: считать, что интервальный тип сам исправит неверный ввод. Границы типа описывают допустимый диапазон, но не гарантируют, что любое введённое пользователем значение будет безопасно обработано. Ошибку допускают, полагаясь только на ограничение в объявлении. Проверьте программу на значениях ниже нижней и выше верхней границы и предусмотрите отдельную реакцию на них.
Перед изучением констант и собственных типов нужно понимать, как объявлять переменные и использовать стандартные типы данных. Например, целый тип помогает хранить целые числа, а символьный — отдельные символы. Собственные типы опираются на эти знания: интервал задают на основе уже известного базового типа.
В больших программах одни и те же значения и правила встречаются во многих местах, поэтому константы помогают избегать повторов. Собственные типы дают возможность описать, какие данные подходят для конкретной задачи. Вместе эти средства делают программу понятнее и помогают находить ошибки в описании данных.
Зачем использовать константу, если можно записать само число?
Имя константы объясняет смысл числа и делает программу понятнее. Если значение нужно заменить, достаточно изменить его в объявлении, а не искать все его повторы.
Можно ли изменить значение именованной константы?
Нет, после объявления значение константы в программе не изменяют. Если значение должно меняться, для него нужна переменная.
Чем объявление типа отличается от объявления переменной?
Объявление типа задаёт правило: какие значения относятся к этому типу. Объявление переменной создаёт имя для данных и указывает, по какому типу эти данные должны храниться.
Как задать тип, который включает только несколько отдельных значений?
Для этого объявляют перечислимый тип и перечисляют в фигурных скобках имена допустимых элементов. Например, дни недели можно задать как Monday, Tuesday и другие значения без кавычек.
Что произойдёт, если присвоить переменной интервального типа значение за его границами?
Такое значение не входит в допустимый диапазон типа. Компилятор или среда выполнения могут сообщить об ошибке, но на автоматическую проверку пользовательского ввода полагаться нельзя: программу нужно продумать так, чтобы проверять ввод отдельно.
§ 7. Использование констант и собственных типов