В практике программирования Swift часто можно встретить следующий формат completion-коллбеков, которые могут возвращать либо результат без ошибки, либо ошибку:
func doSomething(_ completion: (data: Data?, error: Error?) -> Void())Проблема таких completion-коллбеков в опционалах которые должны разрешить проблемы возвращения nil на месте параметра data в случае ошибки и nil в параметре error. Но кроме этих двух состояния возникают ещё два непредусмотренных логикой - когда оба параметра nil, или когда оба параметра установлены. В этой заметке я хотел бы порассуждать о том как правильно обрабатывать такие вызовы, т.к. это проблема встречается часто при работе со старыми методами из CocoaTouch, при разработке кода с обратной совместимостью API, а так же при работе с библиотеками третьих сторон.
Так получилось, что в Go нет общепринятого подхода для написания обобщенных алгоритмов, типа темплейтов на которых строится STL в C++. Видимо, поэтому алгоритмические возможности стандартной библиотеки Go довольно ограничены. Для того что бы к коллекции применить какой-то алгоритм обычно требуется определять некоторый интерфейс, например, как это происходит при использовании сортировки sort.Sort из стандартной библиотеки. На примере этого интерфейса sort.Interface можно создать структуру-адаптер которая позволит применять функцию без явного определения новых методов.
Уже почти год на Twitter можно заливать короткие видеоролики, более того возможность загрузки видео доступна из официального API. Конечно, Twitter и раньше позволял отображать ролики из видеохостингов как Youtube и Vimeo, но нужно иметь ввиду, что в отличии от встроенных медиа эти ролики не воспроизводятся автоматически при прокрутке, что привлекает пользователь в меньшей степени.
В этой заметке я опишу как загруждать видео прямиком на Twitter.
К функциональным языкам программирования я уже давно испытываю неподдельный интерес, особенно к ML-семейству и в частности к Haskell. Пожалуй такой же трепет я испытываю только к LISP-языкам. Но к сожалению практических книг по созданию приложений на Haskell очень и очень мало, поэтому я решил разбираться самостоятельно. На данный момент сделал набросок реализации абстрактной фабрики на Haskell. Потом попробую реализовать и другие ООП-паттерны в таком же виде как я сделал это для Go при написании хабростатьи Язык Go: реабилитация императивного программирования.
Поучаствовал недавно в дискуссии на хабре по поводу инженерности в программировании и будущего самого программирования. Конечно предсказывать будущее дело неблагодарное, тем не менее, что касается ценности программирования есть чёткие доводы, что в будущем это будет стольже актуально как и сейчас. Так же как и латинский алфавит подходит для письма не хуже чем 2к+ лет назад.
За последнее время очень многие веб-фреймворки обзавелись RESTful роутингом. Более того, REST стал де-факто стандартом проектирования архитектуры веб-приложений. Практически все более-менее значимые сервисы обзавелись RESTful API с представлением данных через xml и json форматы. Такой популярности REST помогло как появление большого количества руководств, так и горячие обсуждения REST среди специалистов.
Вместе с тем, REST до сих пор воспринимается скорее как некоторый набор правил роутинга, а всё что не связано в прямую с роутингом решается произвольным путём, в частности это касается обработки ошибок в RESTful-приложениях.
Все мы привыкли слышать поучительные разговоры о том "как надо верстать", или о том "как не надо". Иногда понятие "как надо" строится на объективных фактах, иногда на фактах которые скрыты где-то в глубине проблемы. Всё вместе это образует некоторые правила вёрстки, которыми и руководствуется верстальщик в своей повседневной работе.
Первоначально правила вёрстки были сродни искусству - ты мог делать что угодно, и никто тебя не останавливал, кроме возможностей веб-браузеров естественно. Потом эти п
Возможность метапрограммирования в c++ позволяет расширить тривиальные способы композиции классов, варьируя сцепленность и зависимость объектов.
В объектно-ориентированном проектировании широко используются термины зависимость и сцепленность. Однако мало кто использует для оценки этих величин количественные показатели, несмотря на то что методы расчёта таких показателей хорошо описаны в литературе, например здесь. Но видимо, дело упирается в то, что существующие показатели не заслужили должного доверия, т.к. качество той или иной единицы проектирования зависит не только от объективных показателей, но и от ряда субъективных — аккуратности названия классов, их методов и переменных, компакности и чистоты логики, соответсвия общепринятым подходам.
Тем не менее, полезно представлять, какие проектные решения повышают сцепленность (что хорошо), а какие увеличивают зависимость (что плохо).
Haskell один из быстроразвивающихся функциональных языков программирования. Возможно это один из тех функциональных языков которому вы хотите отдать предпочтение практического использования в ближайшее время.
Эта статья для тех, кто хотел бы опробовать Haskell на деле, но имеет горы полезного C и C++ кода с которым требуется считаться.