@oop_ru

Страница 106 из 785
Aleh
14.02.2017
10:25:27
Ну тут легко решается adhoc полиморфизмом, но функции будут не в объекте.

Paul
14.02.2017
10:25:44
Это всё adhoc полиморфизм и так

И проблема, как видишь, не решается

В крестах можно первую проблему ещё как-то решить, но через жопу (определять методы в зависимости от того, если метод у типа или нет), но вторая всё равно не решается.

Google
Aleh
14.02.2017
10:26:53
function clone<T: Cloneable> (i: Iterator<T>): Iterator...

Решает вполне

Paul
14.02.2017
10:29:01
Так можно решить только для свойств самого типа, но не итератора. Скажем, если есть свойство ExactSize для итераторов, которые могут сказать, сколько элементов осталось, то какие-то производные итераторы (скажем Map) это свойство сохраняют, а какие-то (Filter) — нет.

Т.е. придётся эти все функции вот так выносить.

(где тут ООП, кстати, лол?)

Aleh
14.02.2017
10:31:23
Хз, задача к ооп как-то боком вообще)

Paul
14.02.2017
10:31:36
Эм. Т..е как это каким боком?

Aleh
14.02.2017
10:31:47
Ну это ж про систему типов

Paul
14.02.2017
10:31:52
Пример того, что даже базовые концепцие как итераторы в ООП ведут к диким костылям

К дублированию иерархий (уродливые CopyableEqOrdMap)

Ну и нифига не расширяемый подход, ибо чтобы своё свойство притащить, придётся продублировать все итераторы.

Ну это ж про систему типов
Я не знаю, что ты подразумеваешь под "ООП", но факт прост: в классовом ООП эта задача решается негибкими костылями и дублированием всего и вся.

В прототипном тоже

Google
Paul
14.02.2017
10:36:36
Ну и, соб-но, потом, получив итератор, сделать it.uniq() и получить итератор по уникальным значениям, который в зависимости от итератора будет либо dedup делать, либо дорогой полноценный uniq. (диспетчеризация, разумеется, в компайлтайме)

Aleh
14.02.2017
10:40:32
А, так ты сам привел ооп пример

Тогда в чем вопрос?)

Ну вот в расте это сделали, клево)

Paul
14.02.2017
10:41:10
А, так ты сам привел ооп пример
Типажи как бы не классовое ооп.

Aleh
14.02.2017
10:41:24
Ооп про взаимодействие объектов

Paul
14.02.2017
10:41:28
А сичтать его ооп или нет — похрену, ибо под "ооп" и так всё что угодно понимают

Ооп про взаимодействие объектов
Может дашь определение ооп?

Aleh
14.02.2017
10:41:41
А не классы там или преобразования

Paul
14.02.2017
10:42:01
Ну вот в расте это сделали, клево)
И в хаскеле. И в скале (но в скале дерьмово итераторы спроектированы, так что там не заработает так)

Aleh
14.02.2017
10:42:39
1. EverythingIsAnObject. 2. Objects communicate by sending and receiving messages (in terms of objects). 3. Objects have their own memory (in terms of objects). 4. Every object is an instance of a class (which must be an object). 5. The class holds the shared behavior for its instances (in the form of objects in a program list) 6. To eval a program list, control is passed to the first object and the remainder is treated as its message

Тут в идеале бы s/class/type

Paul
14.02.2017
10:45:04
1. EverythingIsAnObject. 2. Objects communicate by sending and receiving messages (in terms of objects). 3. Objects have their own memory (in terms of objects). 4. Every object is an instance of a class (which must be an object). 5. The class holds the shared behavior for its instances (in the form of objects in a program list) 6. To eval a program list, control is passed to the first object and the remainder is treated as its message
1. Т.е. всякие js и даже кресты пролетают? 2, 6. Тут вообще ни один мейнсктрим (кресты, джава) не пройдут, ибо это явно про акторную модель, соб-но классчиеское ООП. 3. Лол. И стурктуры имеют. И что? 4. Всё прототипное ООП в топку. Типажи тоже, ибо классов нет.

Paul
14.02.2017
10:45:58
Google
Сергей
14.02.2017
10:46:28
int объект?
не int а number

Aleh
14.02.2017
10:46:33
Вполне

Paul
14.02.2017
10:46:44
не int а number
именно int. Крестовый/сишный int

Вполне
С чего вдруг примитив стал объектом?

Он не может иметь методы/принимать сообщения

Aleh
14.02.2017
10:47:06
Paul
14.02.2017
10:47:20
Потому что все - объект
Ты библию прочитал что ли?

1. всё объект 2. но это не объект 3. это объект, потому что (1)

Paul
14.02.2017
10:48:05
2.+(3)
nope. Оператор в крестах это не функция, как бы ты этого не хотел

Передать его нельзя, сигнатуру не описать. + сам компилятор о нём знает

Aleh
14.02.2017
10:49:09
Это уже детали реализации

Paul
14.02.2017
10:49:22
Ну, мы же и говорим про конкретный язык

т.е. с++ не ООП язык, так?

Aleh
14.02.2017
10:49:37
Нет

Ну, мы же и говорим про конкретный язык
Так и чем + не будет механизмом отправки сообщения объекту числа?

Никто ж не сказал, что я через точку вызывать их должен

Или даже наследовать мочь

Этот объект мало может? Ну да, он такой вот маленький пока что, но мы можем обернуть и сделать объекты сложнее и умнее

Google
Paul
14.02.2017
10:54:48
Ну мы же не на кофейной гуще гадаем, есть стандарт, в котором чёрным по белому написано, что есть примитивы и есть объекты.

Aleh
14.02.2017
10:54:51
Что?
Что классы должны или не должны наследоваться

Paul
14.02.2017
10:55:16
Aleh
14.02.2017
10:55:46
Paul
14.02.2017
10:55:51
Новый тип

Унаследуй от int

Aleh
14.02.2017
10:56:08
Зачем? Оо

Admin
ERROR: S client not available

Paul
14.02.2017
10:56:40
Ладно, слушай. Алана Кея все читали

И Алан Кей не имеет никакого отношения к современному ООП

Эти принципы — это принципы акторной модели

Aleh
14.02.2017
10:57:13
В flowtype можно что-то вроде такого алиаса: type NewInt = int & {}

Paul
14.02.2017
10:57:42
Aleh
14.02.2017
10:57:53
Кто менял?)

Google
Aleh
14.02.2017
10:58:13
откуда int возмётся в flow, не понял?
Точно, number имел ввиду (

Paul
14.02.2017
10:58:15
Кто менял?)
Мейнстримовые языки?

Не важно как называть вещи. Если все называют бублик уткой, значит теперь это утка.

Aleh
14.02.2017
10:58:39
Мейнстримовые языки?
Они просто процедурщину максимально хайпят

Paul
14.02.2017
10:58:46
Точно, number имел ввиду (
Я чёт расстроился в последнее время в flow

undefined включить в maybe тип, буэ

+ нормально не описать эвентэмиттер

ну ладно, это не по теме

Paul
14.02.2017
11:02:28
? О.о
Ну, нужно чтобы описание было что-то вроде: class EventEmitter { on('error', (Error) => void): void; ... } class A extends EventEmitter { on('data', (number) => void): void; }

Aleh
14.02.2017
11:02:37
нет
Если ты про int, то я number имел ввиду

Paul
14.02.2017
11:03:20
Даже в TS подобное сделать можно (правда придётся таки описать on(ev: string, fn: Function), но специализация заработает.

Aleh
14.02.2017
11:03:54
Разве флоу не умеет понимать строковые литералы как тип?

Или не в том проблема?

В A будет аля class A extends EventEmitter { on (ev: 'data'|'error') }

Sergey
14.02.2017
11:06:01
@mkusher а ты на котлине не пишешь?)

Sergey
14.02.2017
11:06:20
а че? не нравится?

Aleh
14.02.2017
11:06:41
Ну, задач нет, я же сейчас в гуще фронтенда

Paul
14.02.2017
11:07:30
В A будет аля class A extends EventEmitter { on (ev: 'data'|'error') }
Во-первых, не получится специфицировать кэллбек, а всё ради этого. А, во-вторых, ещё нельзя сделать declare для существующих и доопределить события эти. В итоге все EE нетипизированые

Aleh
14.02.2017
11:08:06
Не важно как называть вещи. Если все называют бублик уткой, значит теперь это утка.
Просто под mvc тогда можно подразумевать все, что на хабре пишут, а Flux тогда действительно проблему решает)

И прям новое слово в интерфейсах

Paul
14.02.2017
11:09:04
Просто под mvc тогда можно подразумевать все, что на хабре пишут, а Flux тогда действительно проблему решает)
когда критическая масса людей начнёт включать MVVM и MVP в MVC, то это тоже станет MVC, хоть название и потеряет смысл

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