- 10 главных конструкций языка Swift
- О чём пойдёт речь
- Переменные
- Комментарии
- Ввод данных с клавиатуры
- Вывод данных в терминал
- Присваивание и сравнение
- Классы
- Объекты
- Что ещё
- Swift — Основные операторы
- Терминология
- Оператор присваивания
- Арифметические операторы
- Оставшийся оператор
- Унарный минус оператор
- Унар Плюс Оператор
- Составные операторы присваивания
- Операторы сравнения
- Тернарный условный оператор
- Ноль-коалесцирующий оператор
- Операторы диапазона
- Закрытый оператор
- Оператор полуоткрытого диапазона
- Односторонние ряды
- Логические Операторы
- Логическое НЕ Оператор
- Логический И Оператор
- Оператор логического ИЛИ
- Объединение логических операторов
- Явные круглые скобки
10 главных конструкций языка Swift
Быстрый гайд по языку.
Чтобы быстро начать программировать на языке, достаточно знать несколько основных конструкций и общих правил написания кода. Со временем вы освоите все нюансы, а на старте можно использовать что-то попроще.
Мы уже писали про Swift — что умеет этот язык и для чего он нужен. Теперь посмотрим, из чего он состоит и как можно быстро вникнуть в код на Свифте.
О чём пойдёт речь
🤔 Мы обещали 10 конструкций, но в итоге получилось 12. Простите 🙂
Переменные
В Swift используют две основных команды:
- var — для обозначения переменной;
- let — для того, чтобы задать константу.
Тип данных можно не указывать, язык сам разберётся, что к чему:
var myVar = 42
let myConst = 42
Если нужно указать, что переменная должна иметь дробную часть, то делают так:
var myVar: Double = 40
Обратите внимание — Свифт не требует точки с запятой после каждой команды (и не считает ошибкой, если вы их поставите). Но если вы захотите написать несколько команд на одной строке, то точка с запятой понадобится, чтобы отделить одну команду от другой:
var s = 20; let q = ‘string’
Комментарии
Комментарии оформляются так же, как и в JavaScript — двойным слешем:
// привет, это комментарий
Ввод данных с клавиатуры
Чтобы ввести данные с клавиатуры, применяют команду readLine(). С её помощью можно ввести любые значения в какую угодно переменную, если ей подойдёт то, что мы написали.
Вывод данных в терминал
Для стандартного вывода данных можно использовать команду print() или println(). Они отличаются тем, что в первой команде курсор остаётся на той же строке, а во второй курсор после вывода перейдёт на новую строчку.
Присваивание и сравнение
Присваивание обозначается одним знаком равно, а проверка на равенство — двумя:
Ещё есть другие, тоже привычные всем операторы сравнения:
- равно (a == b)
- не равно (a != b)
- больше (a > b)
- меньше (a = b)
- меньше или равно (a func hello() <
print(«Привет, это журнал Код»)
>
Эта функция ничего не возвращает, а при вызове hello() просто выводит на экран нужную фразу.
Если мы хотим передать в функцию какие-то параметры, то их нужно прописать в круглых скобках при объявлении:
Чтобы функция возвращала какое-то значение, мы должны указать тип этого значения, например, что функция вернёт строку или число:
Классы
Классы определяются так, как это принято в ООП — сначала идёт название класса, потом переменные (свойства класса) и функции (методы класса, если они нужны):
Объекты
Чтобы создать новый объект на основе класса, берут переменную и присваивают ей значение этого класса. После этого можно работать с любыми свойствами объекта, прописанного в классе, и вызывать любые методы:
👉 Если пока не знаете, зачем нужны классы и объекты, прочитайте наш цикл статей про объектно-ориентированное программирование.
Что ещё
Или оставайтесь у нас, мы будем рассказывать про технологии и программирование на русском 🙂
Источник
Swift — Основные операторы
Оператор является специальным символом или фразы , которую вы используете , чтобы проверить, изменить или скомбинировать значение. Например, оператор сложения ( + ) добавляет два числа, как в , а логический оператор И ( ) объединяет два логических значения, как в . let i = 1 + 2 && if enteredDoorCode && passedRetinaScan
Swift поддерживает большинство стандартных операторов C и улучшает некоторые возможности для устранения распространенных ошибок кодирования. Оператор присваивания ( = ) не возвращает значение, чтобы предотвратить его ошибочное использование, когда == предполагается, что равно operator ( ). Арифметические операторы ( + , — , * , / , % и т.д.) обнаружить и запретить переполнение значения, чтобы избежать неожиданных результатов при работе с числами , которые становятся больше или меньше , чем диапазон допустимого значения типа , который хранит их. Вы можете выбрать поведение переполнения, используя операторы переполнения Swift, как описано в разделе «Операторы переполнения» .
Swift также предоставляет операторы диапазона, которых нет в C, такие как a.. и a. b , в качестве ярлыка для выражения диапазона значений.
В этой главе описываются общие операторы в Swift. Расширенные операторыохватывают расширенные операторы Swift и описывают, как определять свои собственные пользовательские операторы и реализовывать стандартные операторы для собственных пользовательских типов.
Терминология
Операторы унарные, двоичные или троичные:
- Унарные операторы работают на одну цель (например, -a ). Унарные префиксныеоператоры появляются непосредственно перед их целью (например !b ), а унарные постфиксные операторы появляются сразу после их цели (например c! ).
- Бинарные операторы работают с двумя целями (такими как ) и являются инфиксными, потому что они появляются между двумя целями. 2 + 3
- Тернарные операторы работают на три цели. Как и C, Swift имеет только один троичный оператор — троичный условный оператор ( ). a ? b : c
Значения, на которые влияют операторы, являются операндами . В выражении , то символ является бинарным оператором и его два операнда являются значениями и . 1 + 2 + 1 2
Оператор присваивания
Оператор присваивания ( ) инициализирует или обновляет значение со значением : a = b a b
Если правая часть присваивания представляет собой кортеж с несколькими значениями, его элементы можно разложить на несколько констант или переменных одновременно:
В отличие от оператора присваивания в C и Objective-C, оператор присваивания в Swift сам по себе не возвращает значение. Следующее утверждение недопустимо:
Эта функция предотвращает = случайное использование оператора присваивания ( ), когда == фактически предполагается равенство с оператором ( ). Делая недействительным, Swift помогает вам избежать подобных ошибок в вашем коде. if x = y
Арифметические операторы
Swift поддерживает четыре стандартных арифметических оператора для всех типов чисел:
В отличие от арифметических операторов в C и Objective-C, арифметические операторы Swift не допускают переполнения значений по умолчанию. Вы можете выбрать поведение переполнения, используя операторы переполнения Swift (например, ). Смотрите Операторы переполнения . a &+ b
Оператор сложения также поддерживается для String объединения:
Оставшийся оператор
Оператор remainder ( ) определяет, сколько крат будет помещаться внутри, и возвращает оставшееся значение (известное как остаток ). a % b b a
Оператор остатка ( % ) также известен как оператор по модулю в других языках. Однако его поведение в Swift для отрицательных чисел означает, что, строго говоря, это остаток, а не операция по модулю.
Вот как работает оператор остатка. Чтобы рассчитать , вы сначала определите, сколько s поместится внутри : 9 % 4 4 9
Вы можете поместить два 4 s внутри 9 , а остальное 1 (показано оранжевым цветом).
В Swift это будет записано как:
Чтобы определить ответ для , оператор вычисляет следующее уравнение и возвращает его результат: a % b % remainder
a = ( b х ) + some multiplier remainder
где наибольшее число, кратное тому, что поместится внутри . some multiplier b a
Вставка 9 и 4 в это уравнение дает:
Тот же метод применяется при расчете остатка для отрицательного значения a :
Вставка -9 и 4 в уравнение дает:
давая остаток стоимости -1 .
Знак b игнорируется для отрицательных значений b . Это значит, что и всегда дают один и тот же ответ. a % b a % -b
Унарный минус оператор
Знак числового значения можно переключать с помощью префикса — , известного как унарный оператор минус :
Оператор унарного минуса ( — ) добавляется непосредственно перед значением, с которым он работает, без пробелов.
Унар Плюс Оператор
Унарный плюс ( + ) просто возвращает значение, которое действует на, без каких — либо изменений:
Хотя унарный оператор плюс на самом деле ничего не делает, вы можете использовать его, чтобы обеспечить симметрию в своем коде для положительных чисел, а также использовать унарный оператор минус для отрицательных чисел.
Составные операторы присваивания
Как и C, Swift предоставляет составные операторы присваивания, которые комбинируют метод assign ( = ) с другой операцией. Одним из примеров является оператор присваивания ( += ):
Выражение является сокращением для . По сути, сложение и назначение объединяются в одного оператора, который выполняет обе задачи одновременно. a += 2 a = a + 2
Составные операторы присваивания не возвращают значение. Например, вы не можете писать . let b = a += 2
Для получения информации об операторах, предоставляемых стандартной библиотекой Swift, см. Объявления операторов .
Операторы сравнения
Swift поддерживает все стандартные операторы сравнения C :
- Равно ( ) a == b
- Не равно ( ) a != b
- Больше чем ( ) a > b
- Меньше чем ( ) a
- Больше или равно ( ) a >= b
- Меньше или равно ( ) a
Swift также предоставляет два идентификатора оператора ( === и !== ), которые вы используете, чтобы проверить, ссылаются ли обе ссылки на один и тот же экземпляр объекта. Для получения дополнительной информации см. Identity Operators .
Каждый из операторов сравнения возвращает Bool значение, чтобы указать, верно ли утверждение:
Операторы сравнения часто используются в условных выражениях, таких как if :
Для получения дополнительной информации об if операторе см. Поток управления .
Вы можете сравнить два кортежа, если они имеют одинаковый тип и одинаковое количество значений. Кортежи сравниваются слева направо, по одному значению за раз, пока сравнение не обнаружит два значения, которые не равны. Эти два значения сравниваются, и результат этого сравнения определяет общий результат сравнения кортежей. Если все элементы равны, то сами кортежи равны. Например:
В приведенном выше примере вы можете увидеть поведение сравнения слева направо в первой строке. Потому 1 что меньше чем 2 , считается меньше чем , независимо от любых других значений в кортежах. Неважно, что это не меньше , потому что сравнение уже определяется первыми элементами кортежей. Однако, когда первые элементы кортежей являются одинаковыми, их вторые элементы имеют по сравнению, это то , что происходит на второй и третьей линии. (1, «zebra») (2, «apple») «zebra» «apple»
Кортежи можно сравнивать с данным оператором, только если оператор можно применить к каждому значению в соответствующих кортежах. Например, как показано в приведенном ниже коде, вы можете сравнить два кортежа типа, так как и значения, и значения можно сравнить с помощью оператора. Напротив, два кортежа типа не могут сравниваться с оператором, потому что оператор не может быть применен к значениям. (String, Int) String Int (String, Bool) Bool
Стандартная библиотека Swift включает в себя операторы сравнения кортежей для кортежей, содержащих менее семи элементов. Чтобы сравнить кортежи с семью или более элементами, вы должны самостоятельно реализовать операторы сравнения.
Тернарный условный оператор
Тройной условный оператор является специальным оператором с тремя частями, который принимает форму . Это ярлык для оценки одного из двух выражений в зависимости от того, является ли оно истинным или ложным. Если это правда, он оценивает и возвращает свое значение; в противном случае он оценивает и возвращает свое значение. question ? answer1 : answer2 question question answer1 answer2
Тернарный условный оператор является сокращением для кода ниже:
Вот пример, который вычисляет высоту строки таблицы. Высота строки должна быть на 50 пунктов выше, чем высота содержимого, если строка имеет заголовок, и на 20 пунктов выше, если строка не имеет заголовка:
Пример выше является сокращением для кода ниже:
В первом примере использование троичного условного оператора означает, что ему rowHeight может быть задано правильное значение в одной строке кода, что является более кратким, чем код, использованный во втором примере.
Тернарный условный оператор обеспечивает эффективную стенограмму для решения, какое из двух выражений следует рассмотреть. Однако используйте троичный условный оператор с осторожностью. Его краткость может привести к сложному для чтения коду при чрезмерном использовании. Избегайте объединения нескольких экземпляров тернарного условного оператора в один составной оператор.
Ноль-коалесцирующий оператор
Оператор nil- coalescing ( ) разворачивает необязательное значение, если оно содержит значение, или возвращает значение по умолчанию, если оно есть . Выражение всегда имеет необязательный тип. Выражение должно соответствовать типу, который хранится внутри . a ?? b a b a nil a b a
Оператор nil-coalescing является сокращением для кода ниже:
Приведенный выше код использует троичный условный оператор и принудительный unwrapping ( a! ) для доступа к значению, заключенному внутри, a когда a его нет nil , и для возврата в b противном случае. Оператор nil-coalescing предоставляет более элегантный способ инкапсулировать эту условную проверку и развертывание в сжатой и читаемой форме.
Если значение не a является nil , значение b не оценивается. Это известно как оценка короткого замыкания .
В приведенном ниже примере оператор nil-coalescing выбирает имя цвета по умолчанию и необязательное имя цвета, определяемое пользователем:
userDefinedColorName Переменная определяется как необязательный String , со значением по умолчанию nil . Поскольку userDefinedColorName это необязательный тип, вы можете использовать оператор nil-coalescing, чтобы рассмотреть его значение. В приведенном выше примере оператор используется для определения начального значения для String вызываемой переменной colorNameToUse . Потому userDefinedColorName что nil , выражение возвращает значение или . userDefinedColorName ?? defaultColorName defaultColorName «red»
Если вы назначите ненулевое nil значение и снова userDefinedColorName выполните проверку оператора nil-coalescing, userDefinedColorName вместо значения по умолчанию используется значение, заключенное внутри :
Операторы диапазона
Swift включает в себя несколько операторов диапазона , которые являются ярлыками для выражения диапазона значений.
Закрытый оператор
Диапазон оператор замкнутого ( a. b ) определяет диапазон , который проходит от a до b , и включает в себя значения a и b . Значение a не должно быть больше чем b .
Оператор закрытого диапазона полезен при итерации по диапазону, в котором вы хотите использовать все значения, например, с циклом for — in :
Более подробную информацию о for — in петлями см Flow Control .
Оператор полуоткрытого диапазона
Оператор полуоткрытого диапазона ( a.. ) определяет диапазон, который работает от a до b , но не включает в себя b . Говорят, что он наполовину открыт, потому что содержит его первое значение, но не его окончательное значение. Как и в случае с оператором закрытого диапазона, значение a не должно быть больше, чем b . Если значение a равно b , то результирующий диапазон будет пустым.
Полуоткрытые диапазоны особенно полезны, когда вы работаете со списками, начинающимися с нуля, такими как массивы, где полезно подсчитывать (но не включая) длину списка:
Обратите внимание, что массив содержит четыре элемента, но 0.. считается только до 3 (индекс последнего элемента в массиве), потому что это полуоткрытый диапазон. Для получения дополнительной информации о массивах см. Массивы .
Односторонние ряды
Оператор закрытого диапазона имеет альтернативную форму для диапазонов, которые продолжаются, насколько это возможно, в одном направлении, например, диапазон, который включает все элементы массива от индекса 2 до конца массива. В этих случаях вы можете опустить значение с одной стороны оператора диапазона. Этот вид диапазона называется односторонним диапазоном, потому что оператор имеет значение только с одной стороны. Например:
Оператор полуоткрытого диапазона также имеет одностороннюю форму, написанную только с его конечным значением. Так же, как когда вы включаете значение с обеих сторон, окончательное значение не входит в диапазон. Например:
Односторонние диапазоны могут использоваться в других контекстах, а не только в подписках. Вы не можете выполнять итерацию по одностороннему диапазону, в котором пропущено первое значение, потому что неясно, где должна начинаться итерация. Вы можете перебирать односторонний диапазон, в котором не указывается его окончательное значение; однако, поскольку диапазон продолжается бесконечно, убедитесь, что вы добавили явное конечное условие для цикла. Вы также можете проверить, содержит ли односторонний диапазон конкретное значение, как показано в приведенном ниже коде.
Логические Операторы
Логические операторы изменяют или объединяют значения логической логики true и false . Swift поддерживает три стандартных логических оператора в языках на основе C:
- Логическое НЕ ( !a )
- Логическое И ( ) a && b
- Логическое ИЛИ ( ) a || b
Логическое НЕ Оператор
Логический оператор НЕ ( !a ) инвертирует логическое значение , таким образом , что true становится false , и false становится true .
Логический оператор NOT является префиксным оператором и появляется непосредственно перед значением, с которым он работает, без пробелов. Его можно прочитать как «нет a », как показано в следующем примере:
Фраза может быть прочитана как «если недопустимая запись». Следующая строка выполняется только в том случае, если «недопустимая запись» имеет значение true; если есть . if !allowedEntry allowedEntry false
Как и в этом примере, тщательный выбор логических констант и имен переменных может помочь сделать код читаемым и кратким, избегая двойных отрицаний или запутанных логических выражений.
Логический И Оператор
Логический оператор ( ) создает логические выражения , где оба значения должны быть для всего выражения также быть . a && b true true
Если любое значение равно false , общее выражение также будет false . Фактически, если первое значение равно false , второе значение даже не будет оцениваться, потому что оно не может сделать общее выражение равным true . Это известно как оценка короткого замыкания .
В этом примере рассматриваются два Bool значения и разрешается доступ только в том случае, если оба значения true :
Оператор логического ИЛИ
Оператор логического ИЛИ ( ) — это инфиксный оператор, состоящий из двух соседних символов канала. Вы используете его для создания логических выражений, в которых должно быть только одно из двух значений для общего выражения . a || b true true
Как и оператор логического И выше, оператор логического ИЛИ использует оценку короткого замыкания для рассмотрения его выражений. Если левая сторона выражения логического ИЛИ равна true , правая сторона не оценивается, потому что она не может изменить результат всего выражения.
В приведенном ниже примере первое Bool значение ( hasDoorKey ) есть false , а второе значение ( knowsOverridePassword ) есть true . Поскольку одно значение — true общее выражение также оценивается true , и доступ разрешен:
Объединение логических операторов
Вы можете объединить несколько логических операторов для создания более длинных составных выражений:
В этом примере используются несколько операторов && и || операторы для создания более длинного составного выражения. Тем не менее, && и || операторы по- прежнему работают только два значения, так что это на самом деле три меньших выражения прикован вместе. Пример можно прочитать как:
Если мы ввели правильный код двери и прошли сканирование сетчатки, или у нас есть действующий ключ от двери, или если мы знаем пароль аварийного отмены, тогда разрешите доступ.
На основании значений enteredDoorCode , passedRetinaScan и hasDoorKey первые два подвыражения false . Однако пароль аварийного переопределения известен, поэтому общее составное выражение все равно оценивается как true .
Логические операторы Swift && и || являются левоассоциативными, это означает, что составные выражения с несколькими логическими операторами сначала оценивают крайнее левое подвыражение.
Явные круглые скобки
Иногда полезно включать скобки, когда они не являются строго необходимыми, чтобы облегчить чтение намерения сложного выражения. В приведенном выше примере доступа к двери полезно добавить круглые скобки вокруг первой части составного выражения, чтобы сделать его намерение явным:
Скобки проясняют, что первые два значения рассматриваются как часть отдельного возможного состояния в общей логике. Вывод составного выражения не меняется, но общее намерение становится понятнее читателю. Читаемость всегда предпочтительнее краткости; используйте скобки, где они помогают прояснить ваши намерения.
Источник