Перейти к содержимому
Теория · Переменные и типы · урок 1 из 8

Переменные

Чему вы научитесь

Чему вы научитесь:

  • объявлять переменные и константы, задавать им значения и менять значения переменных;
  • объяснять, почему после b = a и a = 7 в b остаётся старое значение;
  • различать встроенные типы int, long, double, decimal, bool, char и string;
  • переводить значения из одного типа в другой: приведением и методами int.Parse и Convert.ToInt32.
Коробка age со штампом int и плиткой 30 внутри, а длинная полоска с текстом в неё не входит

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

У коробки есть ещё и форма. В коробку для целых чисел текст не положить, а в коробку для текста — число. Форму коробки в C# называют типом, и её выбирают сразу, когда коробку заводят.

Зачем нужны имена? Имя пользователя, его возраст, счёт в игре — каждое такое значение программа использует в нескольких местах. Если дать значению имя, его можно напечатать, заменить и напечатать снова:

C#
string name = "Anna";
int age = 30;
Console.WriteLine(name); // Anna
Console.WriteLine(age); // 30
age = 31;
Console.WriteLine(age); // 31

Давайте разберём пример по строкам:

  1. string name = "Anna"; заводит коробку name для текста и кладёт в неё строку "Anna".
  2. int age = 30; заводит коробку age для целых чисел и кладёт в неё 30.
  3. Console.WriteLine(name) печатает не слово name, а то, что лежит в коробке: Anna.
  4. Console.WriteLine(age) печатает 30.
  5. age = 31; кладёт в age новое значение, и старое 30 пропадает.
  6. Последняя строка печатает 31.

Объявление

Строка int age = 30; объявляет переменную: сообщает компилятору её тип и имя. Разберём эту строку по частям:

  • int — тип: в age можно хранить только целые числа;
  • age — имя переменной;
  • = 30 — начальное значение;
  • ; — конец инструкции.

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

C#
int score;
score = 10;
Console.WriteLine(score); // 10

Объявить переменную нужно до первого использования, выше по тексту программы. Если объявления нет совсем, строку score = 10; компилятор не примет: имени score он не знает и сообщит об ошибке CS0103.

Имена переменных

Имя переменной подчиняется трём правилам:

  • имя начинается с буквы или знака _, дальше идут буквы, цифры и _;
  • регистр букв важен: age и Age — две разные переменные;
  • ключевое слово языка, например int, не может быть именем: за ним в C# уже закреплён смысл.

Кроме правил, есть соглашение, принятое в .NET. Составные имена переменных пишут слитно и начинают каждое слово после первого с заглавной буквы: itemCount, maxSpeed.

Присваивание

Знак = выполняет присваивание: берёт значение справа и кладёт его в переменную слева. Что происходит, когда справа стоит другая переменная?

C#
int a = 5;
int b = a;
a = 7;
Console.WriteLine(a); // 7
Console.WriteLine(b); // 5

Разберём по шагам:

  1. int a = 5; кладёт 5 в коробку a.
  2. int b = a; заводит коробку b и кладёт в неё копию значения из a, то есть тоже 5.
  3. a = 7; меняет только коробку a.
  4. Программа печатает 7 и 5: в b лежит своя копия, и новое значение a её не задело.

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

Нажимайте «Следующий шаг» и следите за b: после строки a = 7 её значение остаётся прежним.

ВживуюДве отдельные коробкишаг 1 из 10 · рамок: 1

int a = 5 заводит коробку a и кладёт в неё 5.

Следите за b после строки a = 7

Здесь аналогия с коробками перестаёт работать. Настоящую вещь нельзя положить в две коробки сразу: переложите её — и первая коробка опустеет. Присваивание ничего не перекладывает, а копирует: после b = a в обеих коробках лежит по своей пятёрке, и a не пустеет.

Этот вопрос часто задают на собеседовании: изменится ли b, если после b = a поменять a? Для int ответ — нет: присваивание скопировало само число.

Частая ошибка

Переменную объявили, а значение положить забыли:

C#
int total;
Console.WriteLine(total); // ✗
TEXT
error CS0165: Use of unassigned local variable 'total'

Программа не компилируется. Компилятор следит, чтобы переменная получила значение раньше, чем её прочитают: в пустой коробке смотреть не на что. Задайте начальное значение при объявлении: int total = 0;.

Главное

  • Переменная — коробка с именем и значением; её тип задаётся при объявлении: int age = 30;.
  • = кладёт значение справа в переменную слева, а старое значение пропадает.
  • b = a копирует значение: дальше a и b меняются независимо.
  • Читать переменную можно только после того, как в неё положили значение.