Size: a a a

2019 January 31

IC

Ilya Chernov in Канада IT
Dmitrii Kartashev
Ну, например пишу я клиент REST API. Вот этого конкретно: https://api.youneedabudget.com/v1

И в ответе у меня всегда верхний "Слой" - это обертка, где есть одно поле - data
Соответственно со строгой типизацией мне надо иметь под каждый ответ класс AnswerWrapper где поле data имеет тип соответствующего Answer.

С динамической у меня был бы один класс Wrapper, а в data лежали бы данные любого типа.

Профит - на 15 классов меньше.
Ну, точнее в итоге wrapper у меня сделан через AnswerWrapper<T> (generic), но прописывать чему равно T каждый раз же все равно приходится. При динамическом и так нормально было бы
Конечно, типизация – это оверхед. Но сравнивать его надо не с нулем, а с оверхедом отсутствия типизации, который менее очевидный, зато более "дорогой" (исключительно субъективное мнение, нет метрики)
источник

DK

Dmitrii Kartashev in Канада IT
Ilya Chernov
Конечно, типизация – это оверхед. Но сравнивать его надо не с нулем, а с оверхедом отсутствия типизации, который менее очевидный, зато более "дорогой" (исключительно субъективное мнение, нет метрики)
Не, я сам за строгую типизацию. Но вопрос стоял как "В чем преимущество", и вот такие примеры есть :)
источник

D

Denys in Канада IT
надо бы доосилить этот цикл статей
https://bartoszmilewski.com/2015/02/03/functoriality/
источник

DK

Dmitrii Kartashev in Канада IT
Denys
а чем интерфейс не годится?
Ну, не просто интерфейс же, generic :)
И "Если бы" это конечно не жизненные примеры, но вот было бы у меня два поля в ответ - data и data2 другого типа. Конечно интерфейс который так делает хреновый, но работать надо с чем придется, и тут уже пришлось бы что-то сложнее городить
источник

IC

Ilya Chernov in Канада IT
Dmitrii Kartashev
Не, я сам за строгую типизацию. Но вопрос стоял как "В чем преимущество", и вот такие примеры есть :)
Преимущество в том, что правильно описанные типы автоматически выполняют часть работы за вас и без ошибок. Один раз пишем с оверхедом, зато потом, когда в одном из десятков файлов что-то меняем, сразу ясно, если ошиблись. А если изменений несколько, преимущества накапливаются.

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

A

Art in Канада IT
Dmitrii Kartashev
Ну, например пишу я клиент REST API. Вот этого конкретно: https://api.youneedabudget.com/v1

И в ответе у меня всегда верхний "Слой" - это обертка, где есть одно поле - data
Соответственно со строгой типизацией мне надо иметь под каждый ответ класс AnswerWrapper где поле data имеет тип соответствующего Answer.

С динамической у меня был бы один класс Wrapper, а в data лежали бы данные любого типа.

Профит - на 15 классов меньше.
Ну, точнее в итоге wrapper у меня сделан через AnswerWrapper<T> (generic), но прописывать чему равно T каждый раз же все равно приходится. При динамическом и так нормально было бы
Я бы интерфейс использовал. А что функция будет делать, если в нее строку передадут? И как вообще тогда понять, что в нее можно передавать а что нет?
источник

A

Art in Канада IT
Dmitrii Kartashev
Ну, например пишу я клиент REST API. Вот этого конкретно: https://api.youneedabudget.com/v1

И в ответе у меня всегда верхний "Слой" - это обертка, где есть одно поле - data
Соответственно со строгой типизацией мне надо иметь под каждый ответ класс AnswerWrapper где поле data имеет тип соответствующего Answer.

С динамической у меня был бы один класс Wrapper, а в data лежали бы данные любого типа.

Профит - на 15 классов меньше.
Ну, точнее в итоге wrapper у меня сделан через AnswerWrapper<T> (generic), но прописывать чему равно T каждый раз же все равно приходится. При динамическом и так нормально было бы
Такие обертки обычно автоматически генерируют, не пишут руками. Тогда тебе без разницы сколько там лишних классов
источник

V

Vsevolod in Канада IT
Не, серьёзно - EAFP и try/except большая сила в нетипизированных языках. Это повсеместно используется, если у объекта есть нужный метод или аттрибут (даже если это не 100% задуманный класс) он отработает. Нет - бросили эксепшн, отловили, отработали.
источник

DK

Dmitrii Kartashev in Канада IT
Повторюсь, я за строгую типизацию :) Просто отвечаю на вопрос "В чем преимущество" :) Был вот такой момент когда я заскучал по динамической, но у меня мозг пока под строгую недостаточно заточен. 1С который моя "Альма матер" динамический, и последний рабочий день был только сегодня, чтобы переучиться понадобится время :)
источник

A

Art in Канада IT
Vsevolod
Не, серьёзно - EAFP и try/except большая сила в нетипизированных языках. Это повсеместно используется, если у объекта есть нужный метод или аттрибут (даже если это не 100% задуманный класс) он отработает. Нет - бросили эксепшн, отловили, отработали.
Как-то так себе звучит....
источник

V

Vsevolod in Канада IT
Art
Как-то так себе звучит....
Ну я понимаю что звучит диковато, но это используется во вполне серьёзных и больших проектах и считается хорошей pythonic практикой.
источник

A

Art in Канада IT
Меня в том же js очень бесит, что он продолжает работать там, где лучше бы упал. Часто неверный результат хуже, чем exception.
источник

D

Denys in Канада IT
Dmitrii Kartashev
Ну, например пишу я клиент REST API. Вот этого конкретно: https://api.youneedabudget.com/v1

И в ответе у меня всегда верхний "Слой" - это обертка, где есть одно поле - data
Соответственно со строгой типизацией мне надо иметь под каждый ответ класс AnswerWrapper где поле data имеет тип соответствующего Answer.

С динамической у меня был бы один класс Wrapper, а в data лежали бы данные любого типа.

Профит - на 15 классов меньше.
Ну, точнее в итоге wrapper у меня сделан через AnswerWrapper<T> (generic), но прописывать чему равно T каждый раз же все равно приходится. При динамическом и так нормально было бы
я глянул и не могу понять - а нафига там всё в data обёрнуто то?
Ну допустим даже если надо, то субъективно не так там много работы - написать N классов сверху с одним полем.
В условном фшарпе было бы +2 строки кода, в сишарпе конечно чуть больше.
С другой стороны -  в методе известно что именно принимается, в случае если захотелось переименовать budget в budgets (или ещё как, не суть), просто переименовываешь поле и оно работает, а не ищешь 100500 вхождений по 10 файлам
источник

D

Denys in Канада IT
Vsevolod
Не, серьёзно - EAFP и try/except большая сила в нетипизированных языках. Это повсеместно используется, если у объекта есть нужный метод или аттрибут (даже если это не 100% задуманный класс) он отработает. Нет - бросили эксепшн, отловили, отработали.
в рантайме же, блин. Не на этапе написания кода, а в лучшем случае при запуске тестов (а то и вообще на продакшене ;) )
источник

V

Vsevolod in Канада IT
Art
Меня в том же js очень бесит, что он продолжает работать там, где лучше бы упал. Часто неверный результат хуже, чем exception.
Для сервака лучше как раз не ложится от каждого чиха, а отработать и пойти дальше.
источник

VK

Vasily Khoruzhick in Канада IT
Vsevolod
Для сервака лучше как раз не ложится от каждого чиха, а отработать и пойти дальше.
ну таки "отработать правильно" и "проглотить ошибку и накосячить дальше" - это два разных случая
источник

D

Denys in Канада IT
Art
Меня в том же js очень бесит, что он продолжает работать там, где лучше бы упал. Часто неверный результат хуже, чем exception.
а когда он не хуже вообще?
источник

V

Vsevolod in Канада IT
Denys
в рантайме же, блин. Не на этапе написания кода, а в лучшем случае при запуске тестов (а то и вообще на продакшене ;) )
Что в рантайме? Не понял мысль.
источник

D

Denys in Канада IT
Vsevolod
Для сервака лучше как раз не ложится от каждого чиха, а отработать и пойти дальше.
ну так вроде сервак просто наверху где-то ловит говноэкспешен и чего-то с ним делает (по уму - логирует), а не ложится наглухо.
источник

AA

A A in Канада IT
Vsevolod
Не, серьёзно - EAFP и try/except большая сила в нетипизированных языках. Это повсеместно используется, если у объекта есть нужный метод или аттрибут (даже если это не 100% задуманный класс) он отработает. Нет - бросили эксепшн, отловили, отработали.
Да и упасть можно, чего уж там, а дальше рестарт полиси сработает и опа, мы опять в строю.
источник