$ sudo teach IT

Зачем нужна самая простая программа

Прежде чем строить что-то серьёзное, полезно увидеть, как вообще запускается код на 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.