Перейти к содержимому
Теория · Первая программа · урок 2 из 7

Hello, World!

В прошлом уроке программа была рецептом, который компьютер выполняет сверху вниз. Теперь разберём, из чего состоит один шаг такого рецепта и как напечатать несколько строк.

Вот снова программа из одной строки:

C#
Console.WriteLine("Hello, World!"); // Hello, World!

Давайте разберём строку по частям, слева направо:

  1. Console — имя консоли: текстового окна, в котором программа печатает и читает текст. Это то же окно терминала, где вы набирали dotnet run.
  2. Точка после Console открывает то, что консоль умеет делать, а WriteLine — одно из её действий: «написать строку».
  3. В круглых скобках стоит то, что нужно напечатать. Имя действия вместе со скобками называют вызовом: так программа просит консоль что-то сделать.
  4. "Hello, World!" — текст в двойных кавычках, строковый литерал. Программа печатает его как есть, без кавычек.
  5. Точка с запятой ; завершает шаг.

Весь код от Console до ; — одна инструкция, то есть один шаг рецепта. В файле нет ничего, кроме неё, и этого достаточно: такой файл уже целая программа.

Инструкции идут по порядку

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

C#
Console.WriteLine("Heat the pan"); // Heat the pan
Console.WriteLine("Add the oil");  // Add the oil
Console.WriteLine("Fry an egg");   // Fry an egg

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

Обычно инструкции пишут по одной на строку, чтобы их было удобно читать. Компилятор же ориентируется на точки с запятой, а не на концы строк: две инструкции в одной строке тоже сработают, если каждая заканчивается своей ;.

WriteLine и Write

Печатать в консоль можно двумя способами. Разница между ними одна: что происходит после текста.

WriteLine переводит строку

Console.WriteLine печатает текст и переводит строку: следующий вывод пойдёт с новой строки. Вызов Console.WriteLine() с пустыми скобками ничего не печатает и только переводит строку.

Write оставляет строку открытой

Console.Write печатает текст и оставляет курсор в той же строке. Курсор — это место, где появится следующий символ, поэтому следующий вывод продолжит эту строку:

C#
Console.Write("Hello, ");
Console.Write("World");
Console.WriteLine("!");   // Hello, World!
Console.WriteLine("Bye"); // Bye

Давайте посмотрим, что делает каждая инструкция:

  1. Console.Write("Hello, ") печатает Hello, вместе с пробелом в конце, и курсор остаётся в первой строке.
  2. Второй Write дописывает World сразу после пробела.
  3. WriteLine("!") ставит восклицательный знак и переводит строку: первая строка вывода готова, в ней Hello, World!.
  4. Последняя инструкция печатает Bye уже на второй строке.

Пробел между словами стоит в самом первом литерале. Ни Write, ни WriteLine ничего не добавляют между выводами: они печатают ровно то, что стоит в кавычках.

В виджете ниже рецепт блинов печатается по шагам. Нажимайте «Следующий шаг» и следите за строкой «вывод»: после Write текст остаётся в той же строке, а после WriteLine следующий вывод начинается с новой.

ВживуюWrite и WriteLine по шагамшаг 1 из 7

WriteLine печатает «Pancakes» и переводит строку.

Подсвечена строка, которая выполнилась на этом шаге

Порядок здесь тот же, что в рецепте: каждая инструкция выполняется после предыдущей и печатает свой кусок с того места, где остановился курсор. Где закончится строка, зависит только от того, что вы вызвали: Write или WriteLine.

Комментарии

Комментарий — пометка для людей, компилятор его пропускает. В C# их два вида:

  • // — комментарий от этих знаков до конца строки;
  • /* и */ — комментарий между ними, он может занимать несколько строк.

Комментарием удобно на время выключить инструкцию: поставьте // в начало строки, и компилятор её пропустит.

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

Слова напечатали двумя вызовами и забыли пробел:

C#
Console.Write("Hello,"); // ✗
Console.WriteLine("World");

Программа скомпилируется и напечатает Hello,World — слова слиплись. Write не добавляет пробела после текста, а WriteLine не добавляет его перед текстом. Пробел нужно поставить внутрь литерала, как в примере выше: Console.Write("Hello, ");.

Главное

  • Инструкции программы выполняются по очереди, сверху вниз, и каждая заканчивается точкой с запятой.
  • Console.WriteLine печатает текст и переводит строку, а Console.WriteLine() с пустыми скобками только переводит строку.
  • Console.Write печатает текст и оставляет курсор в той же строке, поэтому следующий вывод продолжит её.
  • Ни Write, ни WriteLine не добавляют пробелов: пробел ставят внутрь строкового литерала.