Литералы


Предыдущая страница
Следующая страница  

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

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

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

Целые литералы

Целочисленный литерал может быть одним из следующих типов:

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

Когда вы не используете суффикс, компилятор сам выбирает между int, uint, long и ulong в зависимости от размера значения.

Вот несколько примеров целочисленных литералов:

212         // Допустимо 
215u        // Допустимо 
0xFeeL      // Допустимо 
078         // Недопустимо: 8 не является цифрой восьмеричной системы 
032UU       // Недопустимо: нельзя повторять суффикс 

Ниже приведены другие примеры различных типов целочисленных литералов:

85         // десятичный int
0x4b       // шестнадцатиричный 
30         // int 
30u        // unsigned int (беззнаковый)
30l        // long 
30ul       // unsigned long (беззнаковый)
0b001      // двоичный

Литералы с плавающей точкой

Литералы с плавающей точкой можно указывать либо в десятичной системе, как в 1.568, либо в шестнадцатеричной системе, как в 0x91.bc.

В десятичной системе порядок может быть представлен путем добавления символа e или E и числа после него. Например, 2.3e4 означает «2.3 умножить на 10 в степени 4». Символ «+» можно указывать до значения порядка, но он не даст эффекта. Например, 2.3e4 и 2.3e + 4 означают одно и то же.

Символ «-», добавленный до значения порядка, придаёт значение «делится на 10 в степени». Например, 2.3e-2 означает «2.3, делённое на 10 в степени 2».

В шестнадцатеричной системе значение начинается с 0x или 0X. Порядок записывается через p или P вместо e или E. Порядок означает не «10 в степени», а «2 в степени». Например, P4 в 0xabc.defP4 означает «abc.de умножить на 2 в степени 4».

Вот несколько примеров литералов с плавающей точкой:

3.14159       // Допустимо 
314159E-5L    // Допустимо 
510E          // Недопустимо: неполный порядок 
210f          // Допустимо (В оригинале было "Illegal", но у меня компиляция с этим значением ошибок не выдаёт - прим. пер.)
.e55          // Недопустимо: отсутствует целая или дробная часть 
0xabc.defP4   // Допустимо: Hexa decimal with exponent 
0xabc.defe4   // Допустимо: Hexa decimal without exponent.

По умолчанию тип литерала с плавающей точкой устанавливается в double. Суффикс f или F означает float, а спецификатор L означает real.

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

Существует два логических (булевых) литерала, и они входят в список ключевых слов D:

Вы не должны считать значение true равным 1, а значение false равным 0.

Литералы символов

Литералы символов заключаются в одинарные кавычки.

Литерал символа может быть простым символом (например, 'x'), escape-последовательностью (например, '\t'), символом ASCII (например, '\x21'), символом Unicode (например, '\u011e'), или в виде именованного символа (например, '\©','\♥', '\€').
Не очень я понял про эти "именованные символы" – прим.пер.

В D существуют определённые символы, когда им предшествует обратная косая черта, они будут иметь особый смысл, и они используются для представления таких вещей, как новая строка (\n) или табуляция (\t). Здесь приведён список некоторых из таких кодов escape-последовательностей:

escape-последовательность Означает
\\ символ \
\' символ '
\" символ "
\? символ ?
\a Предупреждение или звонок
\b Backspace
\f Form feed
\n Новая строка
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция

В следующем примере показаны несколько символов escape-последовательностей:

import std.stdio;
  
int main(string[] args) { 
   writefln("Привет\tМир%c\n",'\x21'); 
   writefln("Хорошего дня%c",'\x21'); 
   return 0; 
}

Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:

Привет	Мир!

Хорошего дня!

Литералы строк

Строковые литералы заключаются в двойные кавычки. Строка содержит символы, похожие на литералы символов: простые символы, escape-последовательности и универсальные символы.

Вы можете разбить длинную строку на несколько строк с использованием строковых литералов и разделить их, используя пробельные символы.
В современных версиях компилятора это работает, но выдаётся предупреждение "Deprecation" (устарело) и предлагается использовать конкатенацию с помощью оператора "~" – прим.пер.

Вот несколько примеров строковых литералов:

import std.stdio;

void main(string[] args) {
   writeln(q"MY_DELIMITER
      Hello World
      Have a good day
MY_DELIMITER");

   writefln("Хорошего дня%c",'\x21'); 
   auto str = q{int value = 20; ++value;}; 
   writeln(str); 
}

В приведенном выше примере вы можете найти q"MY_DELIMITER MY_DELIMITER" для представления многострочных символов. Кроме того, вы можете увидеть, что q{} представляет собой инструкцию языка D.
К сожалению, у меня не получилось простым образом использовать русские буквы внутри этих q"MY_DELIMITER MY_DELIMITER" – часто на выходе вместо буквы появлялся её код в виде '\u041f' – прим. пер.


Предыдущая страница
Следующая страница