Переменные


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

Переменная – это не что иное, как название области хранения, которой могут манипулировать наши программы. Каждая переменная в D имеет определенный тип, который определяет размер и способ размещения памяти переменной; диапазон значений, которые можно запоминать в этой памяти; и набор операций, которые можно применить к переменной.

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

Номер. Тип и описание
1

char

Обычно один октет (один байт). Это целочисленный тип.

2

int

Наиболее естественный размер целого числа для машины.

3

float

Значение с плавающей запятой одинарной точности.

4

double

Значение с плавающей запятой двойной точности.

5

void

Представляет отсутствие типа.

D также позволяет определять различные другие типы переменных, такие как Перечисление, Указатель, Массив, Структура, Объединение и т. д., которые мы рассмотрим в последующих главах. В этой главе изучим только основные типы переменных.

Объявление переменной в D

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

тип список_переменных;

Здесь, тип должен быть допустимым типом данных в D, включая char, wchar, int, float, double, bool или любой определённый пользователем объект и т. д., А список_переменных может состоять из одного или нескольких имен идентификаторов, разделенных запятыми. Здесь показаны некоторые допустимые объявления –

int    i, j, k; 
char   c, ch; 
float  f, salary; 
double d;

Строка int i, j, k; объявляет и определяет переменные i, j и k; т.е. даёт инструкцию компилятору создать переменные с именем i, j и k типа int.

Переменные можно инициализировать (задать им начальное значение) при их объявлении. Инициализатор состоит из знака равенства, за которым следует константное выражение следующим образом:

тип список_переменных = значение;

Примеры

extern int d = 3, f = 5;    // объявление d и f.  
int d = 3, f = 5;           // объявление и инициализация d и f.  
byte z = 22;                // объявление и инициализация z.  
char x = 'x';               // переменная x содержит значение 'x'.

Когда переменная объявляется в D, ей всегда присваивается свой «инициализатор по умолчанию», к которому можно обратиться вручную, как T.init, где T – тип (например, int.init). Инициализатор по умолчанию для целых типов – это 0, для Booleans – false, а для чисел с плавающей запятой – NaN.

Объявление переменной дает уверенность компилятору в том, что существует только одна переменная с данным типом и именем, чтобы компилятор перешёл к дальнейшей компиляции, не требуя полной информации о переменной. Объявление переменной имеет смысл только во время компиляции, компилятору требуется действительное объявление переменной во время компоновки программы.

Пример

Попробуйте следующий пример, где переменные были объявлены в начале программы, но определены и инициализированы внутри функции main:

import std.stdio; 
 
int a = 10, b = 10; 
int c;
float f;  

int main () { 
   writeln("Значение a : ", a); 
   
   /* переобъявление переменных: */ 
   int a, b; 
   int c; 
   float f;
   
   /* Инициализация */ 
   a = 30; 
   b = 40; 
   writeln("Значение a : ", a); 
   
   c = a + b; 
   writeln("Значение c : ", c);  
   
   f = 70.0/3.0; 
   writeln("Значение f : ", f); 
   return 0; 
}

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

Значение a : 10
Значение a : 30
Значение c : 70
Значение f : 23.3333

Добавлю от себя (почему-то в оригинале это не было указано), что вместо типа в объявлении переменной можно ставить ключевое слово auto, что означает "любой тип". Тем не менее, из контекста использования переменной компилятор должен быть сам способен определить тип, который нужно подставить вместо слова auto.

auto a = 10; // тип a – это int
auto b = 10.6; // тип b – это double
auto c = "строка"; // тип c – это string

– прим. пер.

Левые и правые значения в D

В D есть два вида выражений:

Переменные являются lvalues и поэтому могут отображаться в левой части присвоения. Числовые литералы являются rvalues и поэтому им нельзя присваивать значения, и они не могут отображаться с левой стороны. Следующее утверждение допустимо:

int g = 20;

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

10 = 20;

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