Hello, World!
В прошлом уроке программа была рецептом, который компьютер выполняет сверху вниз. Теперь разберём, из чего состоит один шаг такого рецепта и как напечатать несколько строк.
Вот снова программа из одной строки:
Console.WriteLine("Hello, World!"); // Hello, World!Давайте разберём строку по частям, слева направо:
Console— имя консоли: текстового окна, в котором программа печатает и читает текст. Это то же окно терминала, где вы набиралиdotnet run.- Точка после
Consoleоткрывает то, что консоль умеет делать, аWriteLine— одно из её действий: «написать строку». - В круглых скобках стоит то, что нужно напечатать. Имя действия вместе со скобками называют вызовом: так программа просит консоль что-то сделать.
"Hello, World!"— текст в двойных кавычках, строковый литерал. Программа печатает его как есть, без кавычек.- Точка с запятой
;завершает шаг.
Весь код от Console до ; — одна инструкция, то есть один шаг рецепта. В файле нет ничего, кроме неё, и этого достаточно: такой файл уже целая программа.
Инструкции идут по порядку
Инструкций в программе может быть сколько угодно. Компьютер выполняет их по очереди, сверху вниз, и следующая начинается, только когда закончилась предыдущая:
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 печатает текст и оставляет курсор в той же строке. Курсор — это место, где появится следующий символ, поэтому следующий вывод продолжит эту строку:
Console.Write("Hello, ");
Console.Write("World");
Console.WriteLine("!"); // Hello, World!
Console.WriteLine("Bye"); // ByeДавайте посмотрим, что делает каждая инструкция:
Console.Write("Hello, ")печатаетHello,вместе с пробелом в конце, и курсор остаётся в первой строке.- Второй
WriteдописываетWorldсразу после пробела. WriteLine("!")ставит восклицательный знак и переводит строку: первая строка вывода готова, в нейHello, World!.- Последняя инструкция печатает
Byeуже на второй строке.
Пробел между словами стоит в самом первом литерале. Ни Write, ни WriteLine ничего не добавляют между выводами: они печатают ровно то, что стоит в кавычках.
В виджете ниже рецепт блинов печатается по шагам. Нажимайте «Следующий шаг» и следите за строкой «вывод»: после Write текст остаётся в той же строке, а после WriteLine следующий вывод начинается с новой.
1Console.WriteLine("Pancakes");2Console.Write("1. Mix ");3Console.Write("flour and milk");4Console.WriteLine(".");5Console.Write("2. Fry");6Console.WriteLine();7Console.WriteLine("Enjoy!");
WriteLine печатает «Pancakes» и переводит строку.
Порядок здесь тот же, что в рецепте: каждая инструкция выполняется после предыдущей и печатает свой кусок с того места, где остановился курсор. Где закончится строка, зависит только от того, что вы вызвали: Write или WriteLine.
Комментарии
Комментарий — пометка для людей, компилятор его пропускает. В C# их два вида:
//— комментарий от этих знаков до конца строки;/*и*/— комментарий между ними, он может занимать несколько строк.
Комментарием удобно на время выключить инструкцию: поставьте // в начало строки, и компилятор её пропустит.
Частая ошибка
Слова напечатали двумя вызовами и забыли пробел:
Console.Write("Hello,"); // ✗
Console.WriteLine("World");Программа скомпилируется и напечатает Hello,World — слова слиплись. Write не добавляет пробела после текста, а WriteLine не добавляет его перед текстом. Пробел нужно поставить внутрь литерала, как в примере выше: Console.Write("Hello, ");.
Главное
- Инструкции программы выполняются по очереди, сверху вниз, и каждая заканчивается точкой с запятой.
Console.WriteLineпечатает текст и переводит строку, аConsole.WriteLine()с пустыми скобками только переводит строку.Console.Writeпечатает текст и оставляет курсор в той же строке, поэтому следующий вывод продолжит её.- Ни
Write, ниWriteLineне добавляют пробелов: пробел ставят внутрь строкового литерала.