@oop_ru

Страница 738 из 785
Aleh
04.09.2018
07:57:21
Обычно про утиную говорят в контексте отсутствия compile time проверок

Но вроде да, похоже

Артур Евгеньевич
04.09.2018
07:58:37
На инкапсуляцию болт не забивается
Как незабивается? Я говорю про структурную. Т.е нам чтобы заюзать объект в функции изначально нужно иметь к нему доступ, т.е он должен иметь публичные поля, доступные как минимум на чтение

Aleh
04.09.2018
07:58:56
Причем тут поля

Google
Aleh
04.09.2018
07:59:02
Он может иметь публичные методы

Ты описываешь интерфейс с полями и методами, как обычный интерфейс и дальше он проверяется не по явной иерархии наследования, а по сравнению типов

Реализации все также могут иметь свои приватные вещи

Артур Евгеньевич
04.09.2018
08:02:19
тогда не понял в чем отличие утиная vs структурная

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

имею ввиду многозначныые слова, например - ключ, побег, коса

ну и с глаголами такое тоже есть

Артур Евгеньевич
04.09.2018
08:10:12
а как его соблюдать, если я явно не могу указать что вот тип А является подтипом для Б? Или под "соблюдать" ты имеешь ввиду что в клиенском коде не передавать не подходящие объекты в функцию? так в чем вообще тогда смысл такой типизации, если я должен думать еще что туда передать?

Nikita?️‍?
04.09.2018
09:59:46
У истории с lerna все-таки happy end: https://github.com/lerna/lerna/pull/1633
“наконец я доделал программу 3D-Brush. Но в последний момент возникло сомнение – ведь ее можно использовать как угодно, в том числе и для недобрых целей. Тогда решили написать ограничение в разделе загрузки и в лицензионном соглашении, сославшись на ответственность перед Богом за использование программы в плохих целях. Выпустить программу без такого ограничения было бы против совести, и мы сами мучились бы видя как используется наша программа. А ощущение мира со своей совестью и с Богом намного дороже любых денег. ”

https://dis.tinychan.org/read/prog/1536054813

Google
Aleh
04.09.2018
10:34:26
Ох уж это гипертрофированное чувство справедливости )

Sergey
04.09.2018
10:39:37
Ёбнутые

Uiiuviiw
04.09.2018
10:46:43
так там же тоже самое как он описал структурную? если есть метод кря. значит это уточка
структурная берет в расчет ключ и значение, утиная только ключ

Aleh
04.09.2018
10:48:29
структурная берет в расчет ключ и значение, утиная только ключ
Нет, если по ключу у вас число, а нужна функция, то это точно также фейлит duck typing

Потому что оно уже не ведет себя, как утка

Uiiuviiw
04.09.2018
10:49:43
Aleh
04.09.2018
10:50:06
Что в контексте функций?

Uiiuviiw
04.09.2018
10:50:41
{a: number} === {a: string}

это одно и тоже в контексте утиной

Aleh
04.09.2018
10:51:02
Нет

Uiiuviiw
04.09.2018
10:51:12
в контексте структурной - нет

Aleh
04.09.2018
10:51:21
Разница между утиной и структурной только в runtime vs compile time

И больше никакой

{a: number} === {a: string}
В пайтоне если вы будете добавлять строку к числу, то словите эксепшн

Uiiuviiw
04.09.2018
10:53:46
а причем сложение? Это сильная или слабая типизация...

Высравниваете разные вещи

Sergey
04.09.2018
10:55:47
структурная берет в расчет ключ и значение, утиная только ключ
можешь скинуть источники на основе которых ты делаешь такие выводы? Ибо @mkusher прав - разница между утиной и структурной типизацией в том, где идет проверка. в компайлтайме (структурная) или в рантайме (утиная)

ибо я вполне могу проверить и типы аргументов, а не только ключ

если у языка есть возможность делать интроспекцию кода - вообще никаких особо ограничений в том плане что именно я проверяю

важен факт что я вообще проверяю че там че умеет

Google
Uiiuviiw
04.09.2018
10:58:52
можешь скинуть источники на основе которых ты делаешь такие выводы? Ибо @mkusher прав - разница между утиной и структурной типизацией в том, где идет проверка. в компайлтайме (структурная) или в рантайме (утиная)
да я фиг его знает,где существуют ресурсы с такой ерундой. просто подумайте. если есть метод, который принимает тип Курица с методом кукареку():void, то туда пройдет метод кукареку(): boolean

в структурной не пройдет

Sergey
04.09.2018
10:59:21
даже в ruby я могу это дело разрулить не только по ключу если аннотации с типами присутствуют

Uiiuviiw
04.09.2018
11:00:01
ну с дури можно дофига чего... еслитак, то типизации вообще не существует

Sergey
04.09.2018
11:00:49
ну с дури можно дофига чего... еслитак, то типизации вообще не существует
нет, еще раз. Ты утверждаешь что утиная типизация - это только по ключу. Я утверждаю - что можно не только по ключу и главный критерий - проверка в рантайме. Другой вопрос что обычно в языках где популярна утиная типизация у тебя нет возможности вообще типы описывать (в той же руби)

но опять же в случае той же руби у тебя и структурная типизация только по ключу будет чекать

Uiiuviiw
04.09.2018
11:01:23
ну в рантайме разные типы в структурной не пройдут

Sergey
04.09.2018
11:01:28
следовательно единственная существенная разница - рантайм vs компайлтайм

Uiiuviiw
04.09.2018
11:01:57
в утиной пожалуйста, а в структурной нет. это правило. если есть языки нарушающие это, это это их проблема, значит они не чисто структурные

Sergey
04.09.2018
11:03:38
"не чисто структурные" - что за определения такие и откуда ты их родил

правила - дай формулировку правила

нихера не понятно

и главный вопрос - что именно дает тебе твоя версия различий?

ибо наша с Олегом - вполне себе понятно объясняет что есть что и плюсы и минусы. А твоя - ничего не проясняет вообще и только усложняет

Uiiuviiw
04.09.2018
11:06:24
я же дал, что в структурной типы учитываются, а в утиной нет. Неучитываются в утиной типы параметров, и возвращаемые типы. а в структурной, различиетипов, в рантайме должно ошибку вызвать. Если не вызывает, то значит реализация языка.Даже рантайм должен значения сверять

как модно говорить, она не ваша? чего она усложняет-то? Она отличает структурную от утиной.

Sergey
04.09.2018
11:08:06
я же дал, что в структурной типы учитываются, а в утиной нет. Неучитываются в утиной типы параметров, и возвращаемые типы. а в структурной, различиетипов, в рантайме должно ошибку вызвать. Если не вызывает, то значит реализация языка.Даже рантайм должен значения сверять
а если в утиной я еще и типы учитываю - она перестает быть утиной? А если в структурной я не могу типы учитывать потому что у меня язык не позволяет типы описывать) - она перестает быть структурной?

Google
Sergey
04.09.2018
11:08:25
могу ли я делать структурный тайпинг в рантайме? могу ли я делать дак тайпинг в компайлтайме?

Uiiuviiw
04.09.2018
11:09:24
второй - частично. вывод типов, но без описания кастомных типов, он не осилит полностью. вариантов слишком много

сруктурный в рантайме - обязаны.

Sergey
04.09.2018
11:10:36
сруктурный в рантайме - обязаны.
как работает структурный тайпинг в рантайме? приведи пример языка где есть структурный тайпинг в рантайме?

Uiiuviiw
04.09.2018
11:10:45
структурный не отличается от номинативной.

Sergey
04.09.2018
11:10:52
ловите наркомана

Uiiuviiw
04.09.2018
11:11:06
только сопастовляется другими способами.

F01134H
04.09.2018
11:11:21
?

Uiiuviiw
04.09.2018
11:12:01
ну если до вас туго доходит то, чего нет на вики, в чем моя проблема?

Olexandr
04.09.2018
11:12:04
что можно по архитектуре почитать?

Uiiuviiw
04.09.2018
11:12:18
как работает номинативныйтайпинг в рантайме?

Sergey
04.09.2018
11:12:21
что можно по архитектуре почитать?
Крэйг Ларман - Applying UML and patterns -

Uiiuviiw
04.09.2018
11:12:38
точно также и структурный, только в струкурном стиле.

вы пока только mvc задолбили в подкорку, типизация пока тяжело?

F01134H
04.09.2018
11:13:28
еще рестфул

Uiiuviiw
04.09.2018
11:13:40
без упреков, я просто давно завами наблюдаю и канал постоянно читаю.

Вы столько языков озвучиваете, а Вы на них реально пишите? или просто книги читаете для общего представления?

F01134H
04.09.2018
11:15:47
а зачем прогать, если можно просто читать книги

Google
Uiiuviiw
04.09.2018
11:16:38
Вы просто мозги включите и подумайте, что когдавы собирете данные о типе в рантайме утиной типизации, то правила к ним будут применяться утиные. по ним f():void будет равной f():boolean. а в структурной такое недопустимо!

в структурной правила как в номинативной, только без иерархии.

нет, это просто обычные умозаключения, окоторых пока книги не пишут. просто нужно знать как компиляторы работают.

Дмитрий
04.09.2018
11:19:23
О, трип репорты в реалтайме пошли

F01134H
04.09.2018
11:21:22
структурный не отличается от номинативной.
а ничего, что структурный тайпинг является противоположностью номинативного

Uiiuviiw
04.09.2018
11:22:32
и говоря о типизации, мы не говорим только о приведениитипов, туда входят множество других факторов. и поэтому нельзя рассматривать только приведение.

да, с параметрическим полиморфизмом, чтоб весело было

а ничего, что структурный тайпинг является противоположностью номинативного
это прям почти первая выдержка из гугла.Я спорю с гуглом?

F01134H
04.09.2018
11:24:02
И из этого следует, что я не прав?)

пардонъ, иногда слова из гугла совпадают со словами, которые я произношу

так уж вышло, что у нас одна словарная база

Uiiuviiw
04.09.2018
11:30:28
ну я могу казаться странным, но после того, как я уидел на что способны настоящие боты, явсех чуваков, которые контекст разговора не понимают, сразу к ботам причисляю. тем более в чатах программистов. ведь дляпрогера это верхкрутости сделать бота, которого другие прогеры не вычислят.

Артур Евгеньевич
04.09.2018
11:34:31
@invariance можешь поздравить создателя с достижением верха крутости, я за два года не разгадал в тебе бота

Страница 738 из 785