Что такое литерал в программировании

Литерал (информатика)

Содержание

Описание

В следующем примере 1 и Кот это литералы, а a1, c и cat — переменные:

Типы литералов

Почти все языки программирования допускают использование литералов элементарных типов. Однако, использование различных типов литералов, а также их запись в программах отличается.

Обычно выделяют следующие элементарные типы литералов:

Числовые литералы — литералы, для записи чисел. Иногда, числовые литералы детализируются целые литералы, дробные литералы, с различной точностью представления и записанные в различной системе счисления (например, битовые литералы в PL/I). Обычно, в программах числовые литералы записываются непосредственно числом. В следующем примере 100 и 3.1415 — числовые литералы:

Строковые литералы, обычно, представляют собой строку символов, заключённую в кавычки или скобки. Иногда выделяют, также, символьные литералы, включающие один символ. В разных языках программирования допускаются различные типы кавычек. Например, в следующем примере на языке JavaScript один и два — строковые литералы записанные с использованием различных допустимых типов кавычек:

Логические литералы, Логические значения — два литерала: true и false или их аналоги — T, t, Y, y, F, f, N, n, NIL и т. п.. Например:

Литерал ссылочного типа, адрес в памяти — обычно, числовые литералы, указывающие на ячейку в памяти.

Null-литерал, Пустое значение — особый тип литерала, в зависимости от языка программирования, относящийся к ссылочному либо объектному типу. Единственное допустимое значение этого типа литералов null, или аналог, например NIL, None, Nothing — ссылка никуда не ведёт либо объект отсутствует.

Иногда анонимные функции относят к литералам-функциям, а анонимные объекты к литералам-объектам.

Источник

Пользовательские литералы в C++11

Более полугода прошло с момента принятия стандарта C++11. В сети можно найти много материалов посвященных новому стандарту, однако большинство из них касаются самых простых возможностей, самых сладких. Я говорю о лямбда-функциях, системе автоматического выведения типов, новых спецификаторах, умных указателях и т.д. Да, это действительно интересные вещи и, можно смело сказать, они одни из самых полезных и часто используемых. Но на них свет клином не сошелся, и новенький C++11 предлагает нам не только их.

Ниже я хочу рассказать о пользовательских литералах — весьма полезном средстве, хоть и не в повседневных целях.

Что такое литерал?

Литерал — это некоторое выражение, создающее объект. Литералы появились не только в C++11, они были и в C++03. Например, есть литералы для создания символа, строки, вещественных чисел, и т.д.

Все это литералы. С понятием литералов, думаю, мы разобрались. Самое время вернуться к C++11.

Пользовательские литералы в C++11

Как уже было отмечено выше, новый стандарт предлагает средства для создания пользовательских литералов. Существует две категории пользовательских литералов: сырые литералы (raw) и литералы для встроенных типов (cooked).

Стоит, однако, заметить, что C++ позволяет создавать только литералы-суфиксы. Иными словами, создать литералы префиксы (как, например, 0x), или префиксо-суфиксные (как «») — не получится.

Литералы для численных типов

Начнем с литералов для встроенных типов. Чтобы создать литерал для численных типов необходимо воспользоваться одной из двух сигнатур:

Использование литерала будет осуществляется следующим образом:

Ниже приведен пример литерала, преобразовывающего минуты в секунды.

Литералы для строковых типов

Для создания литерала этого типа, необходимо воспользоваться одной из следующих сигнатур:

Сигнатура выбирается в зависимости от типа строки:

Пример литерала преобразующего C-style строку в std::string приведен ниже.

Сырые литералы

Ну и наконец настало время сырого литерала. Сигнатура сырого литерала выглядит следующим образом:

Этот тип литералов приходит на помощь тогда, когда входное число надо разобрать посимвольно. Т.e. в этом случае число передается в оператор как строка. Если не совсем понятно, взгляните на приведенный ниже код:

Используя данный тип литералов, можно написать литерал преобразующий двоичное число в десятичное. Например вот так:

Существует еще одна сигнатура для сырых литералов. Основана она на применении Variadic Template:

Преимущества литералов на базе Variadic Template заключается в том, что они могут вычисляться на этапе компиляции. Тот же литерал преобразования двоичного числа в десятичное может быть переписан так:

У внимательно читателя мог возникнуть вопрос: «А что если создать и сырой литерал, и литерал для числа с одним и тем же именем? Какой литерал компилятор применит?». Стандарт по этому поводу дает точный ответ и говорит о попытке компилятора применить литералы в следующем порядке:

Выводы

Бьёрн Страуструп на конференции Going Native 2012 приводил полезный пример использования литералов. Мне кажется, он наглядно демонстрирует факт повышения читаемости кода, а также снижает вероятность ошибиться.

Механизм пользовательских литералов — это полезный в некоторых случаях инструмент. Использовать его где попало не стоит. Подумайте дважды, прежде чем их использовать, ведь литералы коварны: они могут…

Источник

Числовые, логические литералы и литералы-указатели

Литерал — это элемент программы, который непосредственно представляет значение. В этой статье рассматриваются литералы типа Integer, float-Point, Boolean и Pointer. Дополнительные сведения о строковых и символьных литералах см. в разделе строковые и символьные литералы (C++). Можно также определить собственные литералы на основе любой из этих категорий. Дополнительные сведения см. в разделе определяемые пользователем литералы (C++).

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

Целочисленные литералы

Целочисленные литералы начинаются с цифры и не имеют дробных частей или экспонент. Целочисленные литералы можно указать в десятичной, двоичной, восьмеричной или шестнадцатеричной форме. При необходимости можно указать целочисленный литерал как неподписанный, а в качестве типа long или long — с помощью суффикса.

Если префикс или суффикс отсутствует, компилятор выдает целочисленный тип литерального значения int (32 бит), если значение подходит, в противном случае присваивает ему тип long long (64 бит).

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

Чтобы указать восьмеричный целочисленный литерал, начинайте спецификацию с нуля, за которым следует ряд цифр в диапазоне от 0 до 7. Цифры 8 и 9 при указании восьмеричного литерала будут ошибками. Пример:

Чтобы указать шестнадцатеричный целочисленный литерал, начните спецификацию с 0x или 0X (регистр «x не важен)», за которым следует последовательность цифр в диапазоне от 0 до 9 и a (или A ) до f (или F ). Шестнадцатеричные цифры от a (или A ) до f (или F ) представляют собой значения в диапазоне от 10 до 15. Пример:

Разделители цифр. символ одинарной кавычки (апостроф) можно использовать для разделения значений в больших числах, чтобы облегчить чтение людям. Разделители не влияют на компиляцию.

Литералы с плавающей запятой

Литералы с плавающей запятой задают значения, которые должны иметь дробную часть. Эти значения содержат десятичные разделители ( . ) и могут содержать экспоненты.

Литералы с плавающей запятой имеют значащим (иногда называется мантиссаом), который указывает значение числа. Они имеют показатель степени, который указывает величину числа. И имеют необязательный суффикс, указывающий тип литерала. Значащим указывается как последовательность цифр, за которыми следует точка, за которой следует дополнительная последовательность цифр, представляющая дробную часть числа. Пример:

Если указан показатель степени, он задает порядок числа в виде степени 10, как показано в следующем примере:

Хотя long double и double имеют одинаковое представление, они имеют разные типы. Например, можно использовать перегруженные функции, такие как

логические литералы

Литерал-указатель (C++11)

Двоичные литералы (C++14)

Двоичный литерал можно задать с помощью префикса 0B или 0b и последовательности, состоящей из 1 и 0:

Избегайте использования литералов как «магических констант»

Несмотря на то что это не всегда является хорошим стилем программирования, можно использовать литералы непосредственно в выражениях и операторах:

В предыдущем примере рекомендуется использовать именованную константу, которая передает ясное значение, например «MAXIMUM_ERROR_THRESHOLD». Если конечные пользователи видят возвращаемое значение Success, возможно, лучше использовать именованную строковую константу. Строковые константы можно хранить в одном месте в файле, который может быть локализован на другие языки. Использование именованных констант помогает обоим и другим пользователям понять смысл кода.

Источник

4.13 – Литералы

В программировании константа – это фиксированное значение, которое нельзя изменять. В C++ есть два типа констант: литеральные константы и символьные константы. В этом уроке мы рассмотрим литеральные константы, а в следующем – символьные константы.

Литеральные константы (обычно называемые просто литералами) – это значения, вставленные непосредственно в код. Например:

Они являются константами, потому что их значения не могут быть изменены динамически (сначала вы должны изменить их, а затем перекомпилировать программу, чтобы изменение вступило в силу).

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

Суффиксы литералов

Если тип литерала по умолчанию не соответствует необходимому, вы можете изменить тип литерала, добавив суффикс:

Обычно вам не нужно использовать суффиксы для целочисленных типов, но вот пара примеров:

Начинающие программисты часто не понимают, почему следующий код работает не так, как ожидалось:

Литералы можно использовать в коде C++, если их значения понятны. Чаще всего это происходит при использовании для инициализации или присвоения значения переменной, выполнения математических операций или вывода текста на экран.

Строковые литералы

В уроке «4.11 – Символы» мы определили строку как набор последовательных символов. C++ поддерживает строковые литералы:

Экспоненциальная запись для числовых литералов с плавающей запятой

Есть два разных способа объявить литералы с плавающей точкой:

Во второй форме число после экспоненты может быть отрицательным:

Литералы в восьмеричной и шестнадцатеричной системах счисления

В повседневной жизни мы считаем, используя числа в десятичной системе счисления, где каждая цифра может быть 0, 1, 2, 3, 4, 5, 6, 7, 8 или 9. Десятичная система счисления число также называется «с основанием 10», потому что в ней возможно использование 10 цифр (от 0 до 9). В этой системе мы считаем так: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,… По умолчанию, числа в программах на C++ считаются десятичными.

В двоичной системе счисления всего 2 цифры: 0 и 1, поэтому она называется «с основанием 2». В двоичном формате мы считаем так: 0, 1, 10, 11, 100, 101, 110, 111,…

Существуют две других системы счисления, которые иногда используются в вычислениях: восьмеричная и шестнадцатеричная.

Восьмеричная система счисления – с основанием 8, то есть доступны только цифры: 0, 1, 2, 3, 4, 5, 6 и 7. В восьмеричном формате мы считаем так: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12,… (примечание: цифр 8 и 9 нет, поэтому мы сразу переходим от 7 к 10).

Десятичная система01234567891011
Восьмеричная система0123456710111213

Чтобы использовать литерал в восьмеричном формате, добавьте к вашему литералу префикс 0 (ноль):

Эта программа печатает:

Почему 10, а не 12? Потому что числа печатаются в десятичном формате, а 12 в восьмеричном формате = 10 десятичном формате.

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

Десятичная система01234567891011121314151617
Восьмеричная система0123456789ABCDEF1011

Эта программа печатает:

Поскольку для одной шестнадцатеричной цифры возможны 16 различных значений, мы можем сказать, что одна шестнадцатеричная цифра использует 4 бита. Следовательно, пара шестнадцатеричных цифр может использоваться для точного представления полного байта.

До C++14 не было возможности назначить литерал в двоичном формате. Однако шестнадцатеричные пары предоставляют нам для этого полезный обходной путь:

Литералы в двоичном формате и разделители цифр C++14

В C++14 мы можем назначать литералы в двоичном формате с помощью префикса 0b :

Поскольку длинные литералы трудночитаемы, в C++14 также добавлена ​​возможность использования кавычек ( ‘ ) в качестве разделителя цифр.

Если ваш компилятор несовместим с C++14, он пожалуется, если вы попытаетесь использовать любой из этих приемов.

Печать десятичных, восьмеричных, шестнадцатеричных и двоичных чисел

Эта программа печатает:

Эта программа напечатает:

Мы также можем создать временный (анонимный) std::bitset для печати одного значения. В приведенном выше коде эта строка:

Магические числа, и почему это плохо

Рассмотрим следующий фрагмент:

Число, такое как 30 в приведенном выше фрагменте, называется магическим числом. Магическое число – это литерал (обычно число) в середине кода, не имеющий никакого контекста. Что значит 30? Хотя вы, наверное, догадываетесь, что в данном случае это максимальное количество студентов в классе, но это не совсем очевидно. В более сложных программах может быть очень сложно сделать вывод, что представляет собой жестко запрограммированное число, если нет комментария, объясняющего его.

Использование магических чисел обычно считается плохой практикой, потому что, помимо отсутствия контекста, для чего они используются, они создают проблемы, если значение необходимо изменить. Предположим, школа покупает новые парты, позволяющие увеличить количество учеников в классе с 30 до 35, и наша программа должна это отразить. Рассмотрим следующую программу:

Хотя мы говорим «магические числа», это относится ко всем видам значений. Рассмотрим следующий пример:

В этом примере только одно число (100), но оно также используется в строках. Если мы решим обновить максимальное количество, скажем, на 200, нам придется обновить три разных случая, где встречается 100.

К счастью, существуют лучшие варианты (символьные константы). Об этом мы поговорим на следующем уроке.

Лучшая практика

Не используйте магические числа в своем коде.

Источник

BestProg

Литералы. Идентификаторы. Ключевые слова. Комментарии

Содержание

Поиск на других Web-ресурсах:

1. Что такое литералы?

Литералы представляют собою фиксированные значения (константы), которые имеют определенный тип. Более подробно о примитивных типах данных можно прочитать здесь.

Тип литерала определяется его значением. Чаще всего литералы встречаются в выражениях, параметрах функций (методов).

Примеры литералов:

2. Каким образом определяются литералы целочисленных типов?

Пример целочисленных литералов типа int :

Пример целочисленных литералов типа long :

Если забрать комментарии из строки

то компилятор выдаст сообщение об ошибке:

4. Как записать целочисленный литерал в восьмеричной или шестнадцатеричной системе исчисления?

Для записи литерала в восьмеричной системе исчисления перед ним ставится символ ‘ 0 ‘ (ноль).

Для записи литерала в шестнадцатеричной системе исчисления нужно перед значением литерала поставить символы ‘ 0x ‘ или ‘ 0X ‘.

Пример использования литералов в восьмеричной и шестнадцатеричной системах исчисления.

Если попробовать написать:

то компилятор выдаст следующее сообщение об ошибке:

Это означает, что цифра ‘9’ не входит в множество цифр восьмеричной системы исчисления.

Литералы с плавающей точкой могут быть представлены в стандартной или экспоненциальной форме.

Примеры литералов с плавающей запятой.

6. Каким образом представляются литералы с плавающей точкой в экспоненциальной форме?

В экспоненциальной форме к стандартной форме литерала добавляется символ ‘ e ‘ или ‘ E ‘. После символа ‘ e ‘ или ‘ E ‘ следует число, которое есть степенью числа 10. На это число нужно помножить данное число.

Пример представления чисел с плавающей запятой в экспоненциальной форме:

7. Каким образом представляются литералы с плавающей точкой в шестнадцатеричной системе исчисления?

Язык Java разрешает представлять литералы с плавающей точкой в шестнадцатеричной системе исчисления. В этом случае литерал состоит из таких частей:

Пример. Представление литералов в шестнадцатеричной системе исчисления.

8. Как в Java представляются логические литералы?

Пример.

9. Как в Java записываются символьные литералы?

Символьные литералы – это символы, которые поддерживают набор символов Юникод ( Unicode ). Один символ занимает в памяти 16 бит (2 байта).

Есть множество символов, которые по разным причинам нельзя представить непосредственно. В этом случае используются управляющие последовательности.

Примеры символьных литералов.

10. Что такое управляющие последовательности символов?

Управляющие последовательности позволяют отображать символы, которые:

В Java существуют следующие управляющие последовательности символов:

Пример использования символьных литералов и управляющих последовательностей в программе.

11. Как отображаются строковые литералы?

Строковые литералы берутся в двойные кавычки.

Примеры строковых литералов.

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

Идентификатор обязательно должен начинаться с буквы.

Язык Java распознает строчные и прописные буквы как разные. Это означает, что идентификатор с именем MAX отличается от идентификатора с именем Max – это два разных имени.

Примеры имен идентификаторов:

13. Что такое ключевые слова?

В языке Java определены следующие ключевые слова:

Комментарии разрешают сопровождать программный код объяснениями. Комментарии облегчают чтение деталей программного кода как разработчиками, так и сторонними программистами.

В языке программирования Java есть три вида комментариев:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *