169 похожих чатов

> Типы это типы а тесты это тесты Кстати тут есть

другая мысль
Ну то есть понятно что не надо новичков путать философскими рассуждениями
Но что есть юнит-тест?
1) быстро выполняется (чтобы был быстрый фидбек)
2) проверяет небольшой кусок функциональности
3) должен сломаться если поведение сломано (или поменялось)

Например есть вот такая функция
function foo(arg1) {
if (typeof arg1 === 'string')
throw new Error('arg1 must be string')
// do smth
}

Ну и мы её тестируем
test(expect => {
expect.ToThrow(() => foo(1))
}

По сути то же самое можно выразить и в типах и все условия соблюдаются, фидбек будет быстрее, функциональность та же (с оговоркой), прекрасно сломается (причем еще в редакторе)
Понятно что пример немного вырожденный, но такое можно положить и на всякие null -проверки (strictNullChecks)
Получается типами мы можем выразить некий сабсет контрактного программирования (https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5), то бишь предусловия и постусловия на тип
При этом фидбэк у нас прямо в редакторе (быстрее и удобнее), писать меньше и еще всякие плюшки типа code completion и quick fix
С оговоркой потому что typescript не умеет в нормальную валидацию в рантайме и получается что это не идеально тоже самое
Получается что типами мы пытаемся описать контракты, а тестами проверяем само поведение

1 ответов

5 просмотров

Да, в принципе верно - типы и тесты это контракты

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
How to create an OS in C? what to study?
Linus
18
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
9
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Карта сайта