Урок 2.1 — Переменные и вывод
Научимся создавать переменные, разберём типы данных и освоим главный инструмент отладки — вывод на экран.
Представь, что ты открываешь ящик для хранения вещей. Ты берёшь маркер, пишешь на ящике «Игрушки» и складываешь туда машинки, кубики, мячик. Когда захочешь найти мячик — ты не перерываешь все ящики, а идёшь к ящику с надписью «Игрушки». Переменная в C# — это такой же ящик с надписью. Только вместо игрушек в нём хранятся данные: числа, текст, флаги.
Что такое переменная в C#
Когда программа работает, ей нужно где-то хранить данные: имя пользователя, результат вычисления, счёт в игре, цену товара. Для этого используется оперативная память (RAM) — быстрое временное хранилище компьютера.
Переменная — это именованная область в памяти, в которой хранится значение определённого типа. В отличие от Python, в C# ты обязан указать тип переменной при её создании. Это называется статической типизацией.
Общая схема:
тип имя = значение;
Пример: int age = 25; — «создай переменную age типа int (целое число) и положи туда 25».
int age = 25; // целое число
double price = 1499.99; // дробное число
string name = "Анна"; // строка текста
bool isStudent = true; // логическое значение (истина/ложь)
Важно понять: в отличие от Python, ты не можешь написать age = 25 без указания типа. C# строг: если переменная объявлена как int, ты не сможешь положить в неё строку.
Переменная может менять своё значение. Но тип остаётся тем же:
int score = 0; // в начале игры счёт равен 0
Console.WriteLine(score); // → 0
score = 10; // игрок набрал 10 очков
Console.WriteLine(score); // → 10
score = score + 5; // прибавляем ещё 5
Console.WriteLine(score); // → 15
// ❌ Ошибка! Нельзя положить строку в int:
// score = "привет"; // compilation error!
score = score + 5 читается так: «возьми текущее значение score (10), прибавь 5, и результат (15) запиши обратно в score». Сначала вычисляется правая часть, потом записывается в левую.Имена переменных и стиль camelCase
В C# действуют строгие правила для имён переменных, а также соглашения, принятые в .NET-сообществе.
Правила (нарушать нельзя — ошибка компиляции):
- Имя может содержать буквы (включая Unicode), цифры и символ подчёркивания
_ - Имя не может начинаться с цифры
- Имя не может содержать пробелы или спецсимволы (
-,+,@и т.д.) - Имя не может быть ключевым словом C# (
int,class,if,forи т.д.) - C# чувствителен к регистру:
ageиAge— разные переменные
Соглашения (рекомендуется соблюдать):
- camelCase — первое слово с маленькой буквы, каждое следующее с большой:
userName,maxSpeed,totalPrice - Имя должно быть осмысленным:
customerName, а неcnилиx - Не используй сокращения без необходимости:
buttonColor, а неbtnClr
✅ Правильно
- userName
- totalPrice
- maxSpeed
- isActive
- itemsCount
❌ Неправильно
- 2name — цифра в начале
- user-name — дефис запрещён
- user name — пробел запрещён
- int — ключевое слово
- user_name — это snake_case (стиль Python, не C#)
⚠️ Зарезервированные слова C#
Вот ключевые слова, которые нельзя использовать как имена переменных:
Базовые типы данных: int, double, string, bool
В C# каждое значение имеет тип. Тип определяет, какие данные можно хранить и какие операции выполнять. В отличие от Python, C# требует объявления типа — зато компилятор ловит ошибки до запуска.
Целые числа без дробной части. Занимает 4 байта (32 бита). Диапазон: от −2 147 483 648 до 2 147 483 647. Этого достаточно для большинства задач: возраст, количество товаров, счёт в игре.
int age = 17;
int temperature = -5;
int itemsInCart = 0;
int year = 2026;
Console.WriteLine(age + 1); // 18 — можно складывать
Console.WriteLine(age * 2); // 34 — умножать
Console.WriteLine(age * age); // 289 — квадрат числа
Числа с дробной частью. Занимает 8 байт. Точность: около 15-16 знаков после запятой. Используй для цен, координат, научных расчётов.
double price = 1499.99; // цена товара
double height = 1.75; // рост в метрах
double pi = 3.1415926535; // число π
// Деление целых чисел может дать неожиданный результат:
int a = 5;
int b = 2;
Console.WriteLine(a / b); // → 2 (не 2.5!) — целочисленное деление!
// Чтобы получить дробный результат, нужен double:
double x = 5.0;
double y = 2.0;
Console.WriteLine(x / y); // → 2.5
Строка — это последовательность символов, заключённая в двойные кавычки "...". В C# строка — это ссылочный тип (хранится в куче, а не на стеке).
string firstName = "Анна";
string lastName = "Смирнова";
string city = "Москва";
// Конкатенация — склеивание строк через +
string fullName = firstName + " " + lastName;
Console.WriteLine(fullName); // Анна Смирнова
// Важно: "5" и 5 — разные вещи!
string numStr = "5";
int numInt = 5;
// Console.WriteLine(numStr + numInt); // ОШИБКА! Нельзя сложить string и int
"42" — это строка (текст). 42 — это число. Внешне похожи, но C# работает с ними по-разному. Строку нельзя умножать, делить или вычитать.Самый простой тип: только два значения — true и false (строчными буквами). Используется для условий, флагов, переключателей.
bool isLoggedIn = true;
bool isPremium = false;
bool hasDiscount = true;
// Bool возникает при сравнениях:
int age = 20;
bool isAdult = age >= 18;
Console.WriteLine(isAdult); // True
double price = 500;
bool isExpensive = price > 1000;
Console.WriteLine(isExpensive); // False
Как узнать тип переменной?
Используй метод GetType() или оператор typeof():
Console.WriteLine(42.GetType()); // System.Int32
Console.WriteLine(3.14.GetType()); // System.Double
Console.WriteLine("привет".GetType()); // System.String
Console.WriteLine(true.GetType()); // System.Boolean
Вывод данных: Console.WriteLine() и Console.Write()
Console.WriteLine() — это метод, который выводит данные на экран и переводит курсор на новую строку. Console.Write() делает то же самое, но без переноса строки.
Console.WriteLine("Привет, мир!"); // → Привет, мир! (и перенос строки)
Console.Write("Привет, "); // → Привет, (без переноса)
Console.WriteLine("мир!"); // → мир! (дописывает в ту же строку и переносит)
// Вывод: Привет, мир!
Можно выводить несколько значений, передавая их через + (конкатенация) или через запятую:
string name = "Ольга";
int age = 28;
string city = "Питер";
// Через конкатенацию (+):
Console.WriteLine("Имя: " + name + ", возраст: " + age);
// Через форматирование (подстановка):
Console.WriteLine("Имя: {0}, возраст: {1}", name, age);
// Через интерполяцию (лучший способ!):
Console.WriteLine($"Имя: {name}, возраст: {age}");
Интерполяция строк: $"..."
Интерполяция строк — это самый удобный и современный способ вставить переменную в текст в C#. Ставишь знак $ перед строкой и пишешь имя переменной в фигурных скобках:
string name = "Катя";
int age = 22;
string city = "Казань";
Console.WriteLine($"Меня зовут {name}, мне {age} лет, я из {city}");
// → Меня зовут Катя, мне 22 лет, я из Казань
// Внутри {} можно писать выражения:
Console.WriteLine($"Через 5 лет мне будет {age + 5} лет");
// → Через 5 лет мне будет 27 лет
// Можно даже вызывать методы:
Console.WriteLine($"Моё имя в верхнем регистре: {name.ToUpper()}");
// → Моё имя в верхнем регистре: КАТЯ
+. Код становится чище и читабельнее.Комментарии в коде: //, /* */, ///
Комментарии — это строки, которые C# полностью игнорирует. Они нужны для людей: для тебя через месяц, для коллег, для проверяющего.
В C# есть три вида комментариев:
// 1. Однострочный комментарий — начинается с двойного слеша
// Всё, что после // до конца строки, игнорируется
int x = 10; // комментарий в конце строки
// 2. Многострочный комментарий /* ... */
/* Этот комментарий
может занимать
несколько строк */
// 3. XML-комментарий /// — для документации
/// <summary>
/// Этот метод вычисляет скидку для клиента.
/// </summary>
static double CalculateDiscount(double price)
{
return price * 0.9;
}
Когда писать комментарии?
- Объясни почему, а не что. Разбери сам:
// +1 потому что массив начинается с 0— полезно.// прибавляем 1— бесполезно. - Временно отключи строку при отладке:
// Console.WriteLine("тест"); - Оставь заметку TODO:
// TODO: добавить обработку ошибок - Обозначь секции кода:
// ====== РАЗДЕЛ: РАСЧЁТ ЦЕНЫ ======
Всё вместе — реальный пример
Давай напишем программу, которая использует все изученные концепции: переменные, типы, вывод, интерполяцию и комментарии.
using System;
class Program
{
static void Main()
{
// ============================================
// Программа: Карточка покупки товара
// ============================================
// Данные покупателя
string customerName = "Виктория";
int customerAge = 31;
bool isPremium = true;
// Данные товара
string productName = "Наушники Sony";
double productPrice = 7990.0;
int quantity = 2;
// Подсчёт скидки: премиум-клиенты получают 15%
double discountRate = isPremium ? 0.15 : 0.0;
// Итоговая сумма
double subtotal = productPrice * quantity;
double discountAmount = subtotal * discountRate;
double total = subtotal - discountAmount;
// Вывод красивого чека
Console.WriteLine("=".PadRight(40, '='));
Console.WriteLine($" Добро пожаловать, {customerName}!");
Console.WriteLine("=".PadRight(40, '='));
Console.WriteLine($" Товар: {productName}");
Console.WriteLine($" Цена: {productPrice} руб. x {quantity} шт.");
Console.WriteLine($" Скидка: {(int)(discountRate * 100)}% (-{discountAmount} руб.)");
Console.WriteLine("-".PadRight(40, '-'));
Console.WriteLine($" ИТОГО: {total} руб.");
Console.WriteLine("=".PadRight(40, '='));
}
}
string.PadRight() — дополняет строку символами до нужной длины. "=".PadRight(40, '=') создаёт строку из 40 знаков «=». Это один из встроенных методов работы со строками.Что важно запомнить
int x = 5; — это статическая типизация. Тип изменить нельзя.int (целые), double (дробные), string (текст в двойных кавычках), bool (true/false).$"..." — лучший способ вставить переменную.// — однострочный, /* */ — многострочный, /// — XML-документация. Пиши для людей, объясняя «почему».Тест: 2.1: Переменные и вывод
7 вопросов