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

Вывод с print и комментарии

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

Повар идёт по рецепту сверху вниз, и программа в файле main.swift выполняется так же — строка за строкой, в том порядке, в каком они записаны:

SWIFT
print("Hello!")       // Hello!
print("a", 1)         // a 1
print("Year:", 2014)  // Year: 2014

Давайте посмотрим, что происходит при запуске:

  1. Первая строка печатает Hello!.
  2. Вторая строка печатает a 1 ниже, на новой строке вывода.
  3. Третья строка печатает Year: 2014.
  4. Строк больше нет, и программа завершается.

Каждый вызов print печатает свою строку вывода, поэтому вывод идёт в том же порядке, что и строки программы.

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

Несколько значений

Значения в скобках при вызове функции называются аргументами. В print("Year:", 2014) два аргумента:

  • "Year:" в кавычках — текст;
  • 2014 без кавычек — число.

Аргументы разделяют запятыми. print печатает их по порядку и ставит между ними пробел: в тексте "Year:" пробела нет, его добавила сама функция. Текст печатается без кавычек, а число — цифрами.

Метки separator и terminator

У print есть два особых аргумента, которые меняют, как она печатает. Перед каждым из них стоит название с двоеточием: separator: или terminator:. Такое название перед значением называется меткой аргумента. По метке Swift понимает, что это не ещё один текст для печати, а настройка.

Аргументы с метками пишут после обычных, и separator всегда стоит раньше terminator. Любой из них можно пропустить: тогда print берёт значение по умолчанию.

SWIFT
print("a", "b", "c", separator: ", ")  // a, b, c
print("Loading", terminator: "...")
print("done")                          // Loading...done

Аргумент separator

separator задаёт, что print ставит между соседними значениями. По умолчанию это пробел. В первой строке примера separator: ", " заменил пробел на запятую с пробелом, и получилось a, b, c.

После последнего значения разделитель не ставится. Пустые кавычки "" склеивают значения вплотную: print("a", "b", separator: "") напечатает ab.

Аргумент terminator

terminator задаёт, что print печатает в самом конце, после всех значений. По умолчанию это перевод строки, поэтому следующий print начинает с новой строки. В рамке print ниже перевод строки показан как "\n": обратная косая черта и буква n вместе обозначают этот один невидимый символ.

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

  1. print("Loading", terminator: "...") печатает Loading, затем ..., а перевода строки нет.
  2. print("done") продолжает ту же строку, и вместе получается Loading...done.

print() без аргументов печатает только terminator, то есть пустую строку.

Пройдите программу ниже по шагам и следите за рамкой print: в ней видно, какие separator и terminator получил каждый вызов, даже если меток в нём нет.

ВживуюКак print собирает строкушаг 1 из 7 · рамок: 2

Меток нет, и print берёт значения по умолчанию: пробел между значениями и перевод строки в конце.

Следите за рамкой print: separator и terminator есть у каждого вызова, даже без меток

Запомните главное из этой программы: пока terminator не перевёл строку, следующий print дописывает свои значения к той же строке.

Комментарии

Комментарий — текст в программе, который компилятор пропускает. Его пишут для людей, которые читают код. В Swift есть два вида комментариев.

Однострочный комментарий

Однострочный комментарий начинается с // и идёт до конца строки. В примерах курса такие комментарии показывают, что печатает строка: в выводе их нет.

Многострочный комментарий

Многострочный комментарий начинается с /* и заканчивается */, а между ними может быть сколько угодно строк. Так удобно на время выключить часть программы:

SWIFT
print("one")    // one
/*
print("two")
*/
print("three")  // three

Строка print("two") стоит внутри комментария, поэтому компилятор её пропускает, и two не печатается.

Одна команда на строке

Каждая команда стоит на своей строке. В некоторых других языках строку заканчивают точкой с запятой, а Swift её не требует, и в коде на Swift её обычно не ставят.

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

Метки записаны в другом порядке:

SWIFT
print("a", "b", terminator: "!", separator: "-") // ✗
TEXT
error: argument 'separator' must precede argument 'terminator'

Программа не компилируется: сообщение говорит, что separator должен стоять раньше terminator. Порядок меток у print закреплён, поэтому поменяйте их местами: print("a", "b", separator: "-", terminator: "!").

Главное

  • Строки main.swift выполняются сверху вниз, и каждый вызов print по умолчанию печатает свою строку вывода.
  • print печатает несколько аргументов через пробел: текст без кавычек, числа цифрами.
  • separator: задаёт, что стоит между значениями, а terminator: — что печатается в конце вместо перевода строки.
  • Метки пишут после значений, и separator: идёт раньше terminator:.