Немного о функторах и функциях высшего порядка в Swift

Коллекции


Разработчики, перешедшие на Swift с Objective-C, не могли не заметить удобнейший функционал, который предоставляет Swift для работы с коллекциями. Использование диапазонов в индексах

let slice = array[1..<10]

удобный синтаксис инициализации и добавления элемента в коллекцию, расширяемость, и, конечно функции высшего порядка

Filter


Самой часто используемой функцией для коллекций, пожалуй, является filter

let alex = Person(name: "Alex", age: 23)
let jenny = Person(name: "Jenny", age: 20)
let jason = Person(name: "Jason", age: 35)
let persons = [alex, jenny, jason]
let jNamedPersons = persons.filter { $0.name.hasPrefix("J") } // [jenny, jason]

Reduce


Реже используемой, но при этом крайне выразительной и удобной является функция reduce


let ages = persons.map{ Float($0.age) }
let average = ages.reduce(0, +) / Float(persons.count)


Можно писать свои функции высшего порядка и это довольно увлекательно:

func divisible(by numbers: Int...) -> (Int) -> Bool {
    return { input -> Bool in
        return numbers.reduce(true) { divisible, number in
            divisible && input % number == 0
        }
    }
}

let items = [6, 12, 24, 13]
let result = items.filter(divisible(by: 2, 3, 4)) // [12, 24]

Map


Функциональные понятия функторов и монад пришли к нам из языка Haskell. Говорят, невозможно просто взять и понять, что такое монада, а уж тем более невозможно это объяснить. Тем не менее мы можем временно отбросить все сложности и объяснить себе только то, что действительно необходимо, а те, кто захочет закопаться поглубже, могут начать с изучения Haskell.


Итак, для простоты мы можем считать, что функтор это контейнер, к которому применима функция map, а монада это функтор, к которому применима функция flatMap.


Поскольку коллекции это контейнеры, и в Swift для них определена функция map, они могут выступать в роли функторов:

для того, чтобы трансформировать коллекцию одного типа в коллекцию другого типа, возьмем наш массив persons и получим из него массив возрастов типа [Int]

let ages = array.map{ $0.age } // [23, 20, 35]

FlatMap


И в роли монад:

для того, чтобы из массива oprtional типов вернуть массив не опциональных значений

let optionalStrings: [String?] = ["a", nil, "b", "c", nil]
let strings = optionalStrings.flatMap { $0 } // ["a", "b", "c"]


для того, чтобы расширить первоначальную коллекцию

let odds = [1,3,5,7,9]
let evensAndOdds = odds.flatMap { [$0, $0 + 1] } // [1,2,3,4,5,6,7,8,9,10]

Читать дальше →
Немного о функторах и функциях высшего порядка в Swift
Source: habrahabr

Про опыт обучения в OKademy

Вместо вступления


Всем привет. Делюсь впечатлениями от обучения в школе скрам-мастеров от ScumTrek, под хабракатом шесть страниц текста моих мыслей и впечатлений по этому поводу. Велкам.

Читать дальше →
Про опыт обучения в OKademy
Source: habrahabr

Различия, достоинства, недостатки: публичные и приватные блокчейны

В 2014 году базы данных на основе блокчейнов начали набирать популярность в финансовой сфере. Банки занялись разработкой концептов и прототипов на основе этой технологии. Например, фондовая биржа NASDAQ планировала использовать протокол Open Assets Protocol, основанный на окрашенных монетах (colored coins), для обеспечения полного цикла контроля за ценными бумагами клиентов.


Крупнейший французский банк BNP Paribas исследует возможность внедрения биткойна в валютную систему. Австралийские банки — Commonwealth Bank of Australia (CBA), Westpac Banking Corporation и Australia and New Zealand Banking Group также экспериментируют с платежами на основе протокола Ripple.


Помимо работы над внедрением общедоступных протоколов, организации изучают возможности построения собственных приватных блокчейнов. Например, компания Citigroup построила три блокчейна и внутреннюю валюту на их основе с целью минимизации рисков при взаимодействии с другими банками. Получается, что как публичные, так и приватные блокчейны способны найти применение в финансовом секторе. Сегодня мы посмотрим, в чем разница между ними и какими достоинствами и недостатками они обладают.
Читать дальше →
Различия, достоинства, недостатки: публичные и приватные блокчейны
Source: habrahabr

Пост №3035242

Автор: commissarmanul

Развернуть { «@context»: «http://schema.org», «@type»: «BlogPosting», «mainEntityOfPage»:{ «@type»:»WebPage», «@id»:»/post/3035242″ }, «headline»: «•* •• шшш.рпт.пс / romantically apocalyptic :: Мрачные картинки :: Серьезные комиксы :: alexiuss :: красивые картинки :: фэндомы», «image»: { «@type»: «ImageObject», «url»: «http://img0.joyreactor.cc/pics/post/full/alexiuss-%D0%BA%D1%80%D0%B0%D1%81%D0%B8%D0%B2%D1%8B%D0%B5-%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B8-%D0%9C%D1%80%D0%B0%D1%87%D0%BD%D1%8B%D0%B5-%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B8-romantically-apocalyptic-3734808.jpeg», «height»: 1359, «width»: 1920 }, «datePublished»: «2017-03-21T11:18:21+03:00», «dateModified»: «2017-03-21T11:18:21+03:00», «author»: { «@type»: «Person», «name»: «commissarmanul» }, «publisher»: { «@type»: «Organization», «name»: «JoyReactor.cc», «logo»: { «@type»: «ImageObject», «url»: «http://joyreactor.cc/images/joyreactor_ie6.png», «width»: 207, «height»: 54 } }, «description»: «» }
Комментировать 
Пост №3035242
Source: Joyreactor

Цитата #444029

Работаю в магазине автозапчастей. Мой стол стоит у окна, окна выходят на парковку перед офисом.
Приходит очередной клиент, мы начинаем оформлять заказ и он диктует необходимые товары:
«Колодки, диски, масло и т.д…»
Вдруг из-за окна раздается глухой удар и звук чего то разбившегося. За окном разворачивающаяся Газелька сдавая задом въехала в одну из припаркованных машин.
Клиент поворачивает голову, смотрит в окно секунд 5, и легким и непринужденным голосом продолжает:
«… и левую фару»
Цитата #444029
Source: bash

Экскурсия на московское производство компонентов для сетей связи. Часть вторая

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


Читать дальше →
Экскурсия на московское производство компонентов для сетей связи. Часть вторая
Source: habrahabr

[recovery mode] Как выбрать оптимальное серверное решение и не ошибиться

Если вы уже сделали для себя стратегический выбор в пользу покупки сервера и создания собственной IT-инфраструктуры, то следующим вашим шагом станет выбор конкретной серверной платформы.

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

Вам стоит ознакомиться с этим руководством потому что:

  • Вы сможете выбрать сервер, который не только справится со своими задачами, но также не создаст избыточной производительности и лишних затрат на владение железом.
  • Вы не только оптимизируете свои затраты сегодня, но также обеспечите максимальный возврат инвестиций и защиту ИТ-инфраструктуры в будущем.

Читать дальше →
[recovery mode] Как выбрать оптимальное серверное решение и не ошибиться
Source: habrahabr

Создатели чехла popSLATE 2 объявили о банкротстве

Микроинвестирования через краудфандинг уже давно на слуху у рядовых пользователей, однако в новостях чаще всего мелькает информация лишь об удачно завершённых проектах. К сожалению, иногда ситуация развивается […]
Создатели чехла popSLATE 2 объявили о банкротстве
Source: 4pda

[Перевод] Факторы, влияющие на отказы и конверсии по мнению искусственного интеллекта


Компания Soasta предоставляет ряд сервисов для аналитики и тестирования сайтов. Специалисты компании использовали огромный массив данных, собранный их системой аналитики, в машинном обучении с целью определить, какие взаимосвязи между различными показателями обнаружит искусственный интеллект. Тэмми Эвертс из Soasta и Пэт Минан из Google представили результаты на конференции Velocity 2016, проходившей в Нью-Йорке в сентябре 2016 года.


Исследование проводилось в отношении двух конечных результатов взаимодействия пользователя с сайтом – отказов и конверсий. То есть исследователи пытались научить искусственный интеллект «отгадывать» с большой вероятностью на основании различных признаков уйдет ли пользователь со страницы не совершив никаких действий (отказ), и совершит ли он конверсию.
Читать дальше →
[Перевод] Факторы, влияющие на отказы и конверсии по мнению искусственного интеллекта
Source: habrahabr

Цитата #444028

Бывает, просыпаешься среди ночи, в темноте натыкаешься на кота, дотрагиваешься до него, чтобы пододвинуть к себе, а он неестественно мягкий! Так бывает только когда животное совсем недавно умерло. Ты начинаешь тормошить его что есть силы, но он не реагирует. Ты чувствуешь его до ужаса обмякшее тело и понимаешь, что твой кот умер по непонятным причинам. В один прыжок ты оказываешься у выключателя, за эту секунду от такого мощного заряда ужаса и страха на твоей голове успевает появиться прядь седых волос, включается свет, а эта сонная пушистая морда смотрит на тебя, щурится и вообще не понимает, что случилось — нормально же спали!
Цитата #444028
Source: bash