Вывод с print и комментарии
В прошлом уроке программа печатала одну строку. Теперь научимся печатать несколько значений сразу и решать, чем print их разделяет и чем заканчивает строку.
Повар идёт по рецепту сверху вниз, и программа в файле main.swift выполняется так же — строка за строкой, в том порядке, в каком они записаны:
print("Hello!") // Hello!
print("a", 1) // a 1
print("Year:", 2014) // Year: 2014Давайте посмотрим, что происходит при запуске:
- Первая строка печатает
Hello!. - Вторая строка печатает
a 1ниже, на новой строке вывода. - Третья строка печатает
Year: 2014. - Строк больше нет, и программа завершается.
Каждый вызов print печатает свою строку вывода, поэтому вывод идёт в том же порядке, что и строки программы.
Здесь рецепт и программа расходятся. Блюдо получается одно и только в самом конце, а программа выводит текст по ходу работы: каждый вызов print добавляет к выводу свою часть.
Несколько значений
Значения в скобках при вызове функции называются аргументами. В print("Year:", 2014) два аргумента:
"Year:"в кавычках — текст;2014без кавычек — число.
Аргументы разделяют запятыми. print печатает их по порядку и ставит между ними пробел: в тексте "Year:" пробела нет, его добавила сама функция. Текст печатается без кавычек, а число — цифрами.
Метки separator и terminator
У print есть два особых аргумента, которые меняют, как она печатает. Перед каждым из них стоит название с двоеточием: separator: или terminator:. Такое название перед значением называется меткой аргумента. По метке Swift понимает, что это не ещё один текст для печати, а настройка.
Аргументы с метками пишут после обычных, и separator всегда стоит раньше terminator. Любой из них можно пропустить: тогда print берёт значение по умолчанию.
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 вместе обозначают этот один невидимый символ.
Давайте разберём вторую и третью строки примера:
print("Loading", terminator: "...")печатаетLoading, затем..., а перевода строки нет.print("done")продолжает ту же строку, и вместе получаетсяLoading...done.
print() без аргументов печатает только terminator, то есть пустую строку.
Пройдите программу ниже по шагам и следите за рамкой print: в ней видно, какие separator и terminator получил каждый вызов, даже если меток в нём нет.
1print("Swift")2print("one", "two", "three")3print("one", "two", separator: "-")4print("Hi", terminator: "")5print("!")6print(1, 2, separator: "+", terminator: "=")7print(3)
Меток нет, и print берёт значения по умолчанию: пробел между значениями и перевод строки в конце.
Запомните главное из этой программы: пока terminator не перевёл строку, следующий print дописывает свои значения к той же строке.
Комментарии
Комментарий — текст в программе, который компилятор пропускает. Его пишут для людей, которые читают код. В Swift есть два вида комментариев.
Однострочный комментарий
Однострочный комментарий начинается с // и идёт до конца строки. В примерах курса такие комментарии показывают, что печатает строка: в выводе их нет.
Многострочный комментарий
Многострочный комментарий начинается с /* и заканчивается */, а между ними может быть сколько угодно строк. Так удобно на время выключить часть программы:
print("one") // one
/*
print("two")
*/
print("three") // threeСтрока print("two") стоит внутри комментария, поэтому компилятор её пропускает, и two не печатается.
Одна команда на строке
Каждая команда стоит на своей строке. В некоторых других языках строку заканчивают точкой с запятой, а Swift её не требует, и в коде на Swift её обычно не ставят.
Частая ошибка
Метки записаны в другом порядке:
print("a", "b", terminator: "!", separator: "-") // ✗error: argument 'separator' must precede argument 'terminator'Программа не компилируется: сообщение говорит, что separator должен стоять раньше terminator. Порядок меток у print закреплён, поэтому поменяйте их местами: print("a", "b", separator: "-", terminator: "!").
Главное
- Строки
main.swiftвыполняются сверху вниз, и каждый вызовprintпо умолчанию печатает свою строку вывода. printпечатает несколько аргументов через пробел: текст без кавычек, числа цифрами.separator:задаёт, что стоит между значениями, аterminator:— что печатается в конце вместо перевода строки.- Метки пишут после значений, и
separator:идёт раньшеterminator:.