Зачем нужна самая простая программа
Прежде чем строить что-то серьёзное, полезно увидеть, как вообще запускается код на Swift. Хорошая новость: самая маленькая программа на этом языке умещается в одну строку, и никакой обязательной обвязки писать не нужно. Это отличает Swift от многих других языков, где сначала приходится объявлять специальную функцию, с которой начинается выполнение.
Точка входа: код верхнего уровня
В большинстве языков есть понятие «точки входа» — места, откуда компьютер начинает выполнять программу. В Swift для файла с именем main.swift точкой входа служит сам код верхнего уровня: строки, которые вы просто пишете в файле одну за другой, без какой-либо обёртки. Компилятор выполняет их по порядку — сверху вниз, строка за строкой.
То есть файл вида:
print("Привет")
print("Как дела?")
— это уже полноценная, готовая к запуску программа. Первой выполнится строка с «Привет», следом — строка с «Как дела?». Никакой функции main объявлять не требуется — это приятная особенность Swift, которая экономит новичкам лишний шаг.
Именно в песочнице платформы вы и пишете этот самый код верхнего уровня: то, что вы вводите в поле решения, ведёт себя так же, как содержимое файла main.swift.
Функция print
Чтобы что-то вывести на экран, используют функцию print. Она печатает переданное значение и переводит вывод на новую строку — поэтому, если вызвать print несколько раз подряд, каждое сообщение окажется на своей строке.
print("Первая строка")
print("Вторая строка")
Результат:
Первая строка
Вторая строка
Перевод строки добавляется автоматически, вам не нужно писать его самостоятельно.
Несколько значений через запятую
print умеет принимать сразу несколько значений через запятую — тогда они попадут в один вывод, разделённые пробелом:
print("Возраст:", 20)
Выведет одну строку: Возраст: 20. Обратите внимание — пробел между значениями добавился сам, вы его не писали.
Параметры separator и terminator
Пробел между значениями и перевод строки в конце — это не случайность, а поведение по умолчанию, которым можно управлять. У print есть именованные параметры separator (что ставить между значениями) и terminator (что ставить в самом конце вместо перевода строки):
print("яблоко", "груша", "банан", separator: ", ")
print("Без", terminator: "")
print("переноса")
Первая строка выведет яблоко, груша, банан — значения разделены запятой с пробелом вместо обычного пробела. Вторая и третья строки вместе дадут Безпереноса на одной строке: пустой terminator отменяет автоматический перевод строки после первого print, и следующий вызов продолжает вывод там же, где остановился предыдущий.
Сейчас достаточно знать, что эти параметры существуют — подробно строками и форматированием вывода вы займётесь позже.
Комментарии
Комментарий — это часть кода, которую компилятор игнорирует: она нужна не компьютеру, а человеку, который читает код. В Swift есть два вида комментариев.
Однострочный комментарий начинается с // и действует до конца строки:
// Это комментарий, компилятор его пропустит
print("Привет") // а это комментарий после кода
Блочный комментарий заключается между /* и */ и может занимать несколько строк:
/*
Здесь можно написать
длинное пояснение в несколько строк
*/
print("Привет")
Особенность Swift, которой нет во многих языках: блочные комментарии можно вкладывать друг в друга. То есть внутри одного /* ... */ можно спокойно открыть ещё один — компилятор правильно найдёт, где заканчивается каждый из них. Это удобно, когда вы хотите временно «закомментировать» кусок кода, в котором уже есть свой блочный комментарий.
Точка с запятой не нужна
Если вы видели код на других языках, то привыкли ставить ; в конце каждой строки. В Swift это необязательно — конец строки сам по себе завершает инструкцию:
print("Первая строка")
print("Вторая строка")
Точка с запятой в Swift нужна только в одном редком случае — когда вы хотите написать несколько инструкций на одной строке через ;. Но так почти никогда не делают, потому что это ухудшает читаемость. Достаточно просто переходить на новую строку.
Регистр имён важен
Swift различает заглавные и строчные буквы. print и Print — это два разных имени, и компилятор не станет угадывать, что вы имели в виду. Если ошибиться регистром, компилятор просто не найдёт такую функцию.
Что такое ошибка компиляции
Прежде чем программу можно будет запустить, компилятор читает весь код и проверяет, что он написан по правилам языка: правильно закрыты кавычки и скобки, все имена написаны верно, у каждой функции есть нужные аргументы. Если хотя бы в одном месте правило нарушено, компилятор не соберёт программу вообще — она не запустится ни на шаг, даже если ошибка всего в одной строке из ста.
Это нормально и даже полезно: компилятор ловит опечатки и явные несостыковки ещё до того, как программа начала работать, а не в середине выполнения на глазах у пользователя. Сообщение об ошибке компиляции — это не повод расстраиваться, а обычная часть работы: компилятор просто просит поправить конкретное место, и он же обычно подсказывает, где искать проблему.
Частые ошибки
- Опечатка в имени функции из-за регистра:
Print("Привет")вместоprint("Привет")— компилятор не станет искать похожие имена, он сообщит об ошибке. - Незакрытая кавычка в строке или незакрытая скобка вызова функции — из-за этого не соберётся вся программа, а не только эта строка.
- Попытка написать функцию
mainпо привычке из других языков — вSwiftдля кода верхнего уровня вmain.swiftэто не требуется. - Путаница между
//и/* */: однострочный комментарий действует только до конца строки, и если код случайно попал на следующую строку, он уже не закомментирован.
Резюме
- Код верхнего уровня в
main.swiftвыполняется сверху вниз, отдельная функцияmainне нужна. printвыводит значение и переводит строку; несколько значений через запятую печатаются в одну строку через пробел.- Параметры
separatorиterminatorпозволяют изменить разделитель между значениями и завершающий символ вывода. - Комментарии —
//для одной строки и/* */для блока; блочные комментарии можно вкладывать друг в друга. - Точка с запятой в конце строки не нужна.
- Регистр букв в именах важен:
printиPrint— разные вещи. - Ошибка компиляции останавливает сборку всей программы, пока вы её не исправите — это обычная и полезная часть работы.
Проверьте себя
3 вопроса
Приветствие миру
Напишите программу, которая печатает ровно одну строку текста:
Привет, Swift!Текст должен быть напечатан дословно, с точно таким же регистром букв, знаками препинания и без лишних пробелов до или после. Используйте функцию print.