Category Archives: Управление ошибками

8.A.Управление ошибками и Optionals в Swift – интерпретация в коде.

В этом посте представлен Swift код, который сопровождал изучение и перевод статей Alexandros Salazar. Статьи переведены на русский и представлены на этом сайте.

Вот эти статьи:

  1. “Управление ошибками в Swift: магия и могущество” –  в оригинале: “Error handling in Swift: Might and Magic”
  2. “Управление ошибками в Swift: магия и могущество -2” – в оригинале: “Error handling in Swift: Might and Magic -2”
  3. “Понимание Optional Chaining” –  в оригинале: “Understanding Optional Chaining”
  4. “Подробнее об Implicitly Unwrapped Optionals” –  в оригинале: “Implicitly Unwrapped Optionals in Depth”

В этих статьях с целью краткости и простоты изложения часто приводится лишь набросок кода, иллюстрирующий ту или иную идею. Он не всегда компилируется в Swift. Кроме того Swift – еще молодой язык и имеет некоторые ошибки, о которых известно, и которые в дальнейшем будут устранены. Но сейчас, чтобы сделать код работающим, требуются некоторые дополнительные усилия.

Был создан код, который работает в Swift 1.1, и интерпретирует идеи , представленные в вышеприведенных статьях. Моя интерпретация представлена ввиде файла Playground на Github.

Continue reading

6.A.Кульминация – часть 2

ALEXANDROS SALAZAR The Culmination: Part II

Это действительно так, я сказал “Монады”. Эта недоступная для понимания концепция, мистическая математическая химера, на которой  Haskell программисты клянутся перед оставшемся миром, закатывая глаза. Я же только сказал, что это слово имеет отношение к будущему Swift—что я, конечно, не могу точно знать, так как я не работаю на Apple, но которое я решил прогнозировать.

Смысл в том, что если вы дошли со мной так далеко, то вы практически уже подошли к монадам. Это немного больше: чем фундаментальный оператор  >>=-. Остальное, которое я собираюсь рассказать в этом посте, нужно для поддержки и управления—именно это делает их прекрасными, удобными и дружелюбными. Это заставляет вас полюбить их. И чтобы доказать это , я собираюсь начать с решения (с помощью Магического Будущего  Swift) проблемы unwrapping multiple Optionals –  “развернутых” множественных Optionals.

Continue reading

4.A.Подробнее об Implicitly Unwrapped Optionals (IUO)

Это перевод статьи ALEXANDROS SALAZAR  “Implicitly Unwrapped Optionals in Depth”. Перевод сопровождает код на Github, который подробно описывается в посте “Управление ошибками и Optionals в Swift – интерпретация в коде”.

В моем последнем посте я детально рассмотрел как в  Swift работает Optional chaining (цепочкиOptionals) , и мимоходом механизм конструкции if-let. Но это только половина истории об Optionals. Другая половина истории – это implicitly unwrapped Optionals (неявно “развернутые”Optionals ).

Continue reading

3.A.Понимание Optional Chaining

Это перевод статьи ALEXANDROS SALAZAR  “Understanding Optional Chaining”. Перевод сопровождает код на Github, который подробно описывается в посте “Управление ошибками и Optionals в Swift – интерпретация в коде”.

Optionals в  Swift – это такой интересный “зверь”. С одной стороны, Optionals абсолютно необходимы для взаимодействия с  Objective-C и C методами, которые могут возвращать  nil или NULL по желанию. С другой стороны, Optionals являются действительно очень продвинутой жесткой концепцией, которая как “снег на голову” сваливается на ничего не подозревающих разработчиков.
Мостиком между абстрактной природой типа Optional и хорошо понятной семантикой  nil в  Objective-C, Swift предлагает механизм, называемый “optional chaining”, то есть создание цепочек для типа Optional. Пользователям нужно знать, когда они имеют дело с типом Optional, а не с этими приспособлениями к Objective-C, они могут их использовать почти как обычные типы до тех пор, пока не потребуется их “разворачивать”. Для упрощения те optionals, о которых известно, что у них есть значение  (value), могут быть объявлены как  implicitly unwrapped (неявно “развернутыми”) и использованы как если бы они не были Optional совсем.

Continue reading

5.A.Кульминация – часть 1

Это перевод статьи ALEXANDROS SALAZAR  “Culmination: Part I”.

Большая часть продуктивности программирования определяется правильным уровнем абстракции заданной задачи. Ответ не однозначен, существует множество подходов к  решению той же самой задачи : процедурный, объектно-ориентированный, функциональный и т.д. Некоторые больше поддерживаются в языке, чем другие, и степень этой поддержки зависит от языка, который мы выбрали. В этой части Swift позволяет нам идиоматически внести абстракции функционального программирования в  Cocoa разработку, что является большим благом—если вы знаете как распознать patterns и использовать их.

Среди этих patterns, есть один – фундаментальный. Я сражался несколько недель над этим постом, который является кульминацией моих постов об optionals и error-handling (обработкой ошибок), и я все еще не удовлетворен результатами. Но у меня достаточно храбрости, чтобы попытаться представить проблемы концептуально. Но перед этим я хочу еще раз показать как это работает.

Continue reading

2.A.Управление ошибками в Swift: магия и могущество – Часть 2

Это перевод статьи ALEXANDROS SALAZAR  “Error handling in Swift: Might and Magic: Part II”. Перевод сопровождает код на Github, который подробно описывается в посте “Управление ошибками и Optionals в Swift – интерпретация в коде”.

В моем предыдущем посте ( оригинал на английском)  я показал, как метод  map для перечисления Result позволяет строить цепочки для серии трансформаций первоначальных данных в результат, не принимая во внимание, является ли результат “успехом” трансформаций или ошибкой до тех пор, пока этот результат будет необходим для финального отображения. Я указал в конце этого поста, что существует некоторая проблема с определенным типом методов. Вот это сейчас мы и рассмотрим.

.   .   .   .   .   .   .

Краткое резюме. Метод map позволяет создавать цепочки любых методов типа “один вход – один выход” для получения результата, подобного этому:

var finalResult = someResult.map(f1)
                            .map(f2)
                            .map(f3)

Выход такой, как мы и ожидали:

Continue reading

1.A.Управление ошибками в Swift: магия и могущество.

Это перевод статьи ALEXANDROS SALAZAR  “Error handling in Swift: Might and Magic”. Перевод сопровождает код на Github, который подробно описывается в посте “Управление ошибками и Optionals в Swift – интерпретация в коде”.

Расстояние дает перспективу, а близость – понимание. Концепции, которые были совершенно удаленными , когда я играл с ними в Haskell или читал о них в Scala теперь являются ослепительно ясными решениями для ряда задач при программировании в Swift.

Возьмем задачу обработки ошибок. В качестве конкретного примера рассмотрим деление двух чисел, которое заканчивается ошибкой если делитель – 0 . Вот как это выглядело бы на Objective-C:

Continue reading