Pull to refresh
  • by relevance
  • by date
  • by rating

Зоопарк Алгебрaических Типов Данных

ProgrammingHaskellFunctional Programming
В этой статье мы попытаемся рассмотреть всё разнообразие Алгебраических Типов Данных.

Надо сказать, задача это достаточно неподъёмная, и понять человеку, если он ранее с Алгебраическими Типами не имел дело — не очень просто.
АТД были впервые использованы в языке Hope, но основную популярность они приобрели благодаря языкам ML, такими как Standart ML, OCaml, F#, и языку Haskell.
Ныне АТД в той или иной мере поддерживаются в значительно большем количестве языков: Scala, Rust, Nemerle, Racket,…
АТД — это универсальный тип данных. С помощью него можно представить большинство типов данных.
АТД называются алгебраическими, потому что их можно представить как некую алгебраическую композицию типов его составляющих. Это знание даёт своё преимущество: понимая свойства алгебраической композиции, можно посчитать какой тип необходим для построения тех или иных данных.
Будем рассматривать типы на основе языка Haskell, однако подобного с лёгкими изменениями можно добиться в других языках с поддержкой АТД.
Читать дальше →
Total votes 43: ↑38 and ↓5 +33
Views22.5K
Comments 34

The ever-lasting strife of static vs dynamic typing – TypeScript won’t help

JavaScript.NETTypeScript
Translation


When my friend and I were of school age and aspiring to become software developers, we daydreamed of designing some cool stuff together – like a game or a mega-useful app.

I chose to learn C++ and C#, he picked JavaScript. We finished school, graduated from our universities, served in the army and started our jobs. We had a pretty busy time in industrial software engineering, with lots of different jobs and positions, and after it all started to wear on us, we recalled where it all had begun.

Having finally got together as mature developers, we decided to work on our own project – a 2D video game. Since my friend’s domain was front-end and I was a full-stack developer, our immediate choice of development platform was an Internet browser. As I was only used to working with TypeScript when designing front-end, we thought, ok, no problem, after all, TS is just JavaScript at scale. Let’s use it and things will go smoothly. If I only knew how wrong I was! When we started discussing the project, we ran into an extensive chasm of misunderstanding between us.
Read more →
Total votes 23: ↑20 and ↓3 +17
Views3.8K
Comments 1

Runtime Type Safety in Typescript (Возможна ли удобная проверка типов в рантайме)

JavaScriptTypeScript

Относительная простота и доступность Javascript, относительная легкость входа в него предопределила на многие годы вперед его популярность. Некоторые языки программирования существенно повлияли на развитие всей отрасли в целом. Так, например SmallTalk стал неким прадедушкой ООП и объектного подхода, хоть сам по себе мало где используется. А Javascript… на мой взгляд это язык, о потенциале которого создатели не имели должного представления. Но мне всегда хотелось работать с чем-то на стыке между гибкостью  Javascript и строгостью типизированных языков. Возможно ли это?


В добрых традициях хабра я хочу сразу оговориться, что не претендую на применимость в 100% случаев, и не считаю мое мнение единственно верным. Приведенное ниже — мой взгляд и отношение к программированию вообще и к написанию кода на TS/JS в частности. Кроме статьи, я этот взгляд постарался донести на митапе, запись которого доступна тут.

Читать дальше →
Total votes 19: ↑16 and ↓3 +13
Views6.1K
Comments 11

Strict mode in TypeScript: описание флагов, примеры

Website developmentTypeScript
Sandbox

--strict флаг включает следующие флаги:


--strictNullChecks
--alwaysStrict
--noImplicitAny
--noImplicitThis
--strictBindCallApply
--strictFunctionTypes
--strictPropertyInitialization

Приведем примеры и попытаемся разобраться в одном месте, что все это значит.
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Views5.1K
Comments 1

Динамическое определение класса в Python

Abnormal programmingPythonООP
Под динамическим определением объекта можно понимать определение во время исполнения. В отличие от статического определения, которое используется в привычном определении класса с помощью ключевого слова class, динамическое определение использует встроенный класс type.

Метакласс type


Класс type часто используется для получения типа объекта. Например так:

h = "hello"
type(h)
<class 'str'>

Но у него есть другое применение. Он может инициализировать новые типы.
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Views6.5K
Comments 16

Как перенести на TypeScript большую кодовую базу React UI-компонентов

Badoo corporate blogJavaScriptInterfacesDevelopment ManagementTypeScript

Привет! Меня зовут Иван Греков, я работаю UI-разработчиком в frontend-команде Badoo. Главные задачи нашей команды — создание новых и поддержка существующих пользовательских интерфейсов для сайтов и приложений Badoo и Bumble. 

Когда в конце 2019 года мы начали параллельно работать над несколькими проектами, мы задумались над повышением стабильности кода и возможностью его многократного использования. Для этого мы решили переписать наши 630 React UI-компонентов на TypeScript. Я расскажу о том, как мы работали над ними без перерыва в доставке фич и как организовали поэтапный переход на TypeScript для UI-разработчиков, которым этот язык был в новинку.

Читать далее
Total votes 39: ↑38 and ↓1 +37
Views10.5K
Comments 15

Простые TypeScript-хитрости, которые позволят масштабировать ваши приложения бесконечно

TINKOFF corporate blogJavaScriptAngularReactJSTypeScript

Мы используем TypeScript, потому что это делает разработку безопаснее и быстрее.

Но, на мой взгляд, TypeScript из коробки содержит слишком много послаблений. Они помогают сэкономить немного времени JavaScript-разработчикам при переходе на TS, но съедают очень много времени в долгосрочной перспективе.

Я собрал ряд настроек и принципов для более строгого использования TypeScript. К ним нужно привыкнуть один раз — и они сэкономят массу времени в будущем.

Сэкономить время в будущем
Total votes 41: ↑39 and ↓2 +37
Views22.7K
Comments 32

Hi Programming Language: начинаем конструировать

ProgrammingLearning languages
Мы приступаем к конструированию языка программирования Hi. Здесь ввод в курс дела и некоторые ответы на вопросы, зачем это нужно. Впрочем, и без веских причин конструирование языка – это необыкновенно интересная задача, если относиться к делу серьёзно.

Следуя нашему тезису максимальной доступности для обучения, постараемся логично интегрировать все основные элементы языка из широко используемых элементов других алгоритмических языков. Здесь мы следуем внутренней логике, заданной в первой статье и тому предположению, что композиция сущностей нескольких популярных языков позволит легче схватить новое содержание с меньшими усилиями, так как люди обладают встроенной интегрирующей машиной на базе нейронных сетей, которая автоматически вастнавливаят semantics parte наруш. soobщeniй.

Идея конструирования новых языков из элементов уже известных имеет давнюю историю. Более 140 лет назад доктор Заменгоф создал искусственный язык Эсперанто из составных частей других естественных языков. Язык получился настолько логичным и легким в усвоении, что оказался жизнеспособен и дожил до наших дней. Например, он есть в Google – переводчике. Saluton Habr! Bonvenon sub la kat!
Читать дальше →
Total votes 6: ↑4 and ↓2 +2
Views1.5K
Comments 26

Typescript: Объединение типов в глубину

TypeScript
Translation

Пошаговое руководство о том, как в TypeScript написать такой generic-тип, который рекурсивно объединяет произвольные вложенные key-value структуры данных. Это может оказаться несколько более сложной задачей, чем вы думаете.

Подробнее
Total votes 13: ↑13 and ↓0 +13
Views5.8K
Comments 28

ТайпСкрип: Ох уж эта весёлая система типов

Website developmentProgrammingTypeScript

Здравствуйте, меня зовут Дмитрий Карловский и недавно я, вместе с Артуром Мукминовым, проводил воркшоп, где показывал как разрабатывать сложные типофункции через тестирование. Это 2 часа сурового программирования на типах. Так что в качестве тизера, ловите разбор курьёзов тайпскриптовой системы типов.


Читать дальше →
Total votes 45: ↑40 and ↓5 +35
Views11.5K
Comments 16

Имя не гарантирует безопасность. Haskell и типобезопасность

Timeweb corporate blogHaskellFunctional Programming
Translation
Разработчики на Haskell много говорят о типобезопасности (type safety). Сообщество Haskell-разработчиков отстаивает идеи «описания инвариант на уровне системы типов» и «исключения недопустимых состояний». Звучит как вдохновляющая цель! Однако не совсем понятно, как ее достичь. Почти год назад я опубликовала статью «Parse, don’t validate» — первый шаг к восполнению этого пробела.

За статьей последовали продуктивные обсуждения, но нам так и не удалось прийти к консенсусу относительно правильного использования конструкции newtype в Haskell. Идея достаточно проста: ключевое слово newtype объявляет wrapper type (тип-обертка), который отличается по имени, но репрезентативно эквивалентен типу, который он обертывает. На первый взгляд, это понятный путь к достижению типобезопасности. Например, рассмотрим, как использовать объявление newtype для определения типа адреса электронной почты:

newtype EmailAddress = EmailAddress Text

Этот прием предоставляет нам определенное значение, а в сочетании с умным конструктором и границей инкапсуляции даже может обеспечить безопасность. Но это совсем другой вид типобезопасности. Он намного слабее и отличается от того, который я выделила год назад. Сам по себе newtype — это просто псевдоним.

Names are not type safety ©
Читать дальше →
Total votes 13: ↑10 and ↓3 +7
Views1.8K
Comments 2