Category Archives: Функциональное программирование

Swift код к статье “Парсинг вложенных JSON и массивов (Arrays) в Swift.”

В этом посте представлен Swift код, который сопровождал изучение и перевод статьи Tony DiPasquale  “Парсинг вложенных JSON  и массивов (Arrays) в Swift.” (перевод) – оригинал Parsing Embedded JSON and Arrays in Swift

Автор предлагает Swift код в самих статьях, но это, как правило, только результирующий вариант и с очень малым количеством примеров.

Кроме того, хотелось бы отследить сам процесс превращения функции парсинга JSON-данных в Модель из тривиального  варианта в компактный  вариант “функциональных концепций”. В этой статье появление компактного варианта осложняется необходимостью доставать данные из “вложенных” JSON  структур и массивов. Посмотрим как эта задача решается с позиции Swift кода как на тестовых примерах, предложенных в самой статье, так и на двух наших контрольных данных.

Continue reading

Swift код к статье Tony DiPasquale “Реальный мир парсинга JSON в Swift”

В этом посте представлен Swift код, который сопровождал изучение и перевод статьи Tony DiPasquale  “Реальный мир парсинга JSON в Swift” (перевод) – оригинал Real World JSON Parsing with Swift .

Автор предлагает Swift код в самих статьях, но это, как правило, только результирующий вариант и с очень малым количеством примеров.

Эксперименты с алгоритмами Тони ДеПаскуале проводились в Swift 1.1, и представлены в репозитории на Github, который включает в себя различные  Playground файлы и полноценное небольшое приложение для работы  с данными с сайта Flickr.com.

Continue reading

Swift код к статьe Tony DiPasquale “Эффективный JSON с функциональными коцепциями и дженериками в Swift”

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

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

  1. “Эффективный JSON с функциональными концепциями и дженериками в Swift”  (перевод) – оригинал  Efficient JSON in Swift with Functional Concepts and Generics. Код Swift, сопровождающий изучение этой статьи , представлен в этом посте.
  2.  “Реальный мир парсинга JSON в Swift” (перевод) – оригинал Real World JSON Parsing with Swift . Код Swift, сопровождающий изучение этой статьи , представлен в этом посте.
  3. “Парсинг вложенных JSON  и массивов (Arrays) в Swift.” (перевод) – оригинал Parsing Embedded JSON and Arrays in Swift.  . Код Swift, сопровождающий изучение этой статьи , представлен в этом посте.

Автор предлагает Swift код в самих статьях, но это, как правило, только результирующий вариант с очень малым количеством примеров. Кроме того, хотелось отследить сам процесс превращения функции парсинга JSON-данных в Модель из тривиального и громоздкого "if-let" варианта в компактный  вариант “функциональных концепций”. Последний вариант представлен в виде цепочки трансформаций, начинающихся с запроса в “сеть” и заканчивающихся заполнением Модели данными. Он выдает на выходе не просто Модель, а Result <Модель>, включающий в себя помимо самой Модели, всевозможные ошибки на различных этапах трансформации.

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

Эксперименты с алгоритмами Тони ДеПаскуале проводились в Swift 1.1, и представлены в репозитории на Github, который включает в себя различные  Playground файлы и полноценное небольшое приложение для работы с данными с сайта Flickr.com.

Continue reading

Swift код к статьям автора Chris Eidhof

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

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

  1.  “Работа с JSON в Swift. Безопасно и просто.” (перевод) – оригинал Chris Eidhof  “Parsing JSON in Swift. Safe and easy”
  2. Выступление в San Francisco “Функциональное программирование в Swift на примере JSON” (перевод).

Continue reading

3.Парсинг вложенных JSON и массивов (Arrays) в Swift

В предыдущих постах  – first post, second post (и соответствующие перевод первого поста и второго) – по поводу парсинга JSON в Swift. мы видели как можно использовать концепции функционального программирования и дженерики ( generics), чтобы сделать парсинг  JSON кратким и читабельным. Прошлый раз мы остановились на пользовательских операторах, позволяющих проводить декодирование JSON в Модель объектов с использованием infix нотации. В этом случае реализация Модели выглядела так:

struct User: JSONDecodable {
  let id: Int
  let name: String
  let email: String?

  static func create(id: Int)(name: String)(email: String?) -> User {
    return User(id: id, name: name, email: email)
  }

  static func decode(json: JSON) -> User? {
    return _JSONParse(json) >>> { d in
      User.create
        <^> d <|  "id"
        <*> d <|  "name"
        <*> d <|? "email"
    }
  }
}

Теперь мы можем проводить JSON парсинг непосредственно в модель нашего объекта, используя  операторы <| и <|? . Окончательный кусок, который мы здесь пропустили, – это возможность получать данные из вложенных JSON объектов и возможность парсинга массивов.

Continue reading

1.Эффективный JSON с функциональными концепциями и дженериками в Swift

Это перевод первой статьи  Efficient JSON in Swift with Functional Concepts and Generics, написанной Tony DiPasquale

Несколько месяцев назад Apple представила новый язык программирования, Swift, чем сильно воодушевила разработчиков относительно будущего написания приложений для iOS и OS X. Люди немедленно, начиная с версии  Xcode 6 Beta1 начали пробовать Swift и понадобилось не так много времени, чтобы обнаружить, что парсинг JSON – редкое приложение обходится без него – не так прост как в Objective-C. Swift является статически типизованным языком, а это означает, что мы не можем больше забрасывать объекты в типизованные переменные и заставлять компилятор доверять нам, что они таковыми и являются. Теперь, в Swift, компилятор выполняет проверку, давая нам уверенность, что мы случайно не вызовем runtime ошибки. Это позволяет нам опираться на компилятор при создании безошибочного кода, но это также означает, что мы должны делать дополнительную работу, чтобы его удовлетворить. В этом посту я обсуждаю API для парсинга JSON, который использует концепции функционального программирования и дженерики ( Generics ) для создания читаемого и эффективного кода.

Continue reading

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

2.C.Функциональное программирование в Swift на примере JSON

Это отрывок из выступления Chris Eidhof на встрече в Сан-Франциско, в котором он рассказал о возможностях функционального программирования в Swift, но не как о замещении Объектно-ориентированного программирования (OOP), а как о дополнительном инструменте разработки приложений.

Я привожу перевод только той части, которая относится к парсингу JSON.

Почему функциональное программирование?

Существует множество путей решения проблем помимо объектно-ориентированного (OOP). Вы уже знаете, как решать проблемы с помощью OOP, но теперь Swift делает это очень легко и удобно, используя функциональное программирование. В действительности, некоторые задачи даже легче решать, используя функциональное программирование!

Одна из этих задач – парсинг JSON

Continue reading

1.C.Работа с JSON (parsing) в SWIFT: безопасно и просто

 

Перевод статьи  Parsing JSON in Swift

После прочтения постов  Brent‘s и David‘s по парсингу JSON в Swift, я действительно захотел написать этот пост. Полный код, сопровождающий этот пост находится на GitHub.

В этом посте я дам лишь наброски к библиотеке по парсингу JSON в Swift типизованным и безопасным способом, то есть превращению нетипизованных JSON словарей в годные для дальнейшей обработке, типизованные словари. Я прямо скопировал пример JSON данных у Дэвида (David), и он выглядит так:

Continue reading