LINUX.ORG.RU

Как верифицировать данные в ЯП с динамической типизацией?

 , ,


0

1

Статическая типизация, конечно, не решает всех проблем, но даёт хоть какие-то гарантии. Если объявлено, что работать будешь со структурой типа List<List<Dictionary<string, List<string>>>>, то компилятор (а точнее даже IDE) даст сразу по рукам, если где-то окажется, что создаётся не список списков словарей списков. Хотя, конечно, можно туда напихать неверных данных - но это уже другая проблема. В языках с динамической типизацией же даже таких гарантий себе прописать нельзя, а проблема выявится только на этапе исполнения, когда будешь этот список списков... итерировать, ну или в юнит-тестах, если вдруг кто-то выделит бюджет на то, чтобы обмазать ими весь проект. В питон, как я понимаю, не просто так завезли тайпхинты. А вот в пыхе, насколько я понимаю, не завезли. Вобщем, подскажите, как с этим жить?


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

beaver ()

Как верифицировать данные

<пост вообще не про это>

Неправильно ты, дядя Федор, скор фармишь. Если будешь часто писать, скорее в минус уйдешь.

t184256 ★★★★★ ()

А вот в пыхе, насколько я понимаю, не завезли. Вобщем, подскажите, как с этим жить?

Фэйсбук ыж избрёл пых со статической типизацией.

А вообще никак, обмазываться тестами и страдать. И, по-возможности, писать на чём-то более статическом.

oldstable ()
Ответ на: комментарий от oldstable

Hack. Не могу сказать насколько сильно отличается от PHP, не тыкал.

Выглядит замечательно. Прямо то, что нужно. И даже совсем недавно выпущена свежая версия. Но почему-то в русскоязычном сегменте (в т.ч. википедии) ничего про неё нет, а про поддержку этого ЯП в перспективе со стороны, например, PhpStorm писали в 2015 году и... как я понял, всё заглохло, и текущая версия не знает что за расширение *.hack такое.

beaver ()

А вот в пыхе, насколько я понимаю, не завезли

Т.е. ты вообще не в курсе положения дел. Нафига тогда припёрся со своими «ценными» рассуждениями?

no-such-file ★★★★★ ()

А вот в пыхе

Как вообще на этом можно без слёз программировать в 2019?
Это даже хуже пистона.

Ну а вообще, в динамических языках проверку типов нужно делать во время выполнения. В PHP есть gettype и её дочки.

Для проверки сложных типов, делай свои функции вида:

    function checkMyStruct($var)
    {
        $res = 0;
        if (is_array($var)) {
          if (is_string($var)) $res = 1
          else $res = -2;
        } else $res = -1;
        return $res;
    }

Novator ★★★★ ()

В динамическом языке не принято проверять тип на каждый чих. Если тебе надо, чтобы было итерируемо — проверяй итерируемость. Какой именно класс, в целом, тебе должно быть всё равно.

anonymous ()

Нет глазок нет мультиков. Тесты нужны даже в статике. Выделит бюджет, не выделит... Проблема заказчика. Хочет надежно - получит с тестами... Я сейчас просто так тесты пишу... Чтоб самому удостоверится что все пашет (хоть и пишу через 1 место)

dem ()
Ответ на: комментарий от dem

Я сейчас просто так тесты пишу... Чтоб самому удостоверится что все пашет (хоть и пишу через 1 место)

TDD или постфактум? На чём пишешь, насколько % (примерно) покрытие? Как тесты гоняются? Насколько это помогает?

Я помню, лет десять назад, в одной конторе работал, там очень хорошо было в плане тестов всё организовано. Каждый писал для своего кода тесты (NUnit). Затем можно было их локально прогнать. После коммита в репу (svn), гонялись они ещё и на сервере. Кроме быстрых тестов, были ещё медленные, которые чисто физически невозможно было часто гонять - они гонялись по расписанию. Если закоммитил что-то, не потестив, и билд не собрался или собрался, но валится в тестах - сразу видно, кто виноват, и кому по шапке надавать (хотя, реально по шапке никто не получал, потому что на удивление адекватные люди собрались в конторе, и просто виноватый (или тимлид) откатывал коммит). Ну а если валились долгие тесты, то там уже шёл разбор полётов, на чьём поприще ошибки появились. Было круто.

beaver ()
Ответ на: комментарий от beaver

Да от балды гоняю. Тесто обычно пишу как я буду юзать код. А потом пишу код. срезать углы всегда хочется и в итоге юзать его будет неудобно. А тут вроде как тест есть - пиши.

А с долгими тестами да... Я aiohttp так нашел баг. 2 месяца пробивал его потому, что на обычном тесте его не поймать...

dem ()