@haskellru

Страница 381 из 1551
Vasiliy
01.09.2017
17:12:27
вот а можно об этом поподробнее? а то я уже столько разных определений ООП встречал, совершенно разных интересно ещё одно мнение выслушать
> OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en

Alexander
01.09.2017
17:20:31
это про Алана Кея, альтернативный вариант

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

это определение ещё из 60х =)

Google
Евгений
01.09.2017
17:33:52
ООП сочетается как с ФП, так и с иммутабельностью
ООП это про пи калькулюс, а ФП про лямбду. Конечно ща лямбда стала опять непопулярной и даже текущая семантика хаскеля про пи-калькулюс, но разницы это не отменяет

Alexander
01.09.2017
17:44:05
ООП по Клею это про pi

ООП в меинстриме ничего про calculus нижележащий не говорит

Vasiliy
01.09.2017
17:49:53
так называемые три кита мейнстрима - инкапсуляция, наследование, полиморфизм - настолько, мне кажется, абстрактны, что адепты понимают их как хотят

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

Aragaer
01.09.2017
17:52:04
"А расскажите своими словами, что такое полиморфизм" - "Я конечно могу рассказать, но честно говоря за те пять лет, что я работаю программистом, я еще ни разу не сталкивался с необходимостью пользоваться полиморфизмом." - ".... наверно на этом нам стоит прекратить собеседование. До свидания."

хотя сейчас, еще через 6 лет, я могу сказать, что таки да, кое-где мне полиморфизм тогда все-таки попадался, просто я его не узнал

Alexander
01.09.2017
17:56:52
полиморфизм это когда один метод может работать с данными разного типа

т.е. написал один раз и потом применяешь к разному не меняя код

хм.. не совсем точно, но ладно

Aleksey
01.09.2017
17:57:20
Точнее, когда разные данные подходят для одного метода

Alexander
01.09.2017
17:57:24
и его полиморфизма много видов

Aleksey
01.09.2017
17:57:40
Если просто с разными типами работает метод, то это перегрузка

Google
Alexander
01.09.2017
17:57:40
параметрический - когда в одну функцию можно пихать разные данные

ад-хок - когда функция с одним именем по разному работает с разными данными (не точное определение, но мне лень думать или доставать пирса)

subtype - когда метод может работать со вмести подтипами (наследниками) данного типа

dynamic - то что в динамических языках, и там несколько подклассов

можно открыть книжку пирса и посмотреть, там доступно

parametric это то что в меинстриме называют Generic

Aleksey
01.09.2017
18:03:22
Вон в смолтолке нет перегрузки по типам. Просто те объекты, которые принимают некое сообщение - "утки"

Denis
01.09.2017
18:04:56
это вообще ортогональные вещи
а скала как то объединила в себе все это) (но скорее всего это уже обсудили)

Aragaer
01.09.2017
18:05:17
так вот да, я к тому моменту сталкивался с полиморфизмом в том же ядре линукса - когда драйвер это структура с 5 указателями на функции

но это наверно единственный пример, который я к тому моменту видел в реальной жизни

Aleksey
01.09.2017
18:05:41
Где тут полиморфизм?

Aragaer
01.09.2017
18:06:19
что не важно, что за драйвер, у него есть open, read, write, close и ioctl

Aleksey
01.09.2017
18:07:13
Полиморфизм, это возможность взять некий признак (поведение), присущий разным объектам и сгруппировать эти разные объекты по данному принзаку: "плавают и лодки и рыбы - плавание полиморфно"

kana
01.09.2017
18:07:18
а скала как то объединила в себе все это) (но скорее всего это уже обсудили)
если я правильно понял, ортогонально в том плане, что не противоречат друг другу и нет причин не использовать ооп в фп

Aleksey
01.09.2017
18:07:32
Но как подход, а не конкретику типа "состояние+поведение и классы в придачу"

Aragaer
01.09.2017
18:08:30
соответственно все character device drivers с точки зрения операционки выглядят одинаково

Denis
01.09.2017
18:08:41
вопросик если койонеда дает бесплатный функтор, то что делает йонеда?

Aleksey
01.09.2017
18:09:46
соответственно все character device drivers с точки зрения операционки выглядят одинаково
значит произошло абстрагирование от конкретной реализации, т.е. именно то, для чего ООП и нужно

Google
Andrew
01.09.2017
18:10:06
чморить объектно-ориентированных
Звучит как заднеприводных

Aleksey
01.09.2017
18:10:45
Не, "заднеприводных", это не в этот чятик, это к Платову

Андрей
01.09.2017
18:16:29
Объекты - это замыкания для бедных. Поэтому ООП есть и в Схеме и даже у меня в языке.

А искаропки они в Скале и Фшарпе из-за платформ реализации и интеропом с жвм и нетом

Misha
01.09.2017
18:19:29
Скала согласно одерскому- ООП язык

"С элементами"

Андрей
01.09.2017
18:19:52
примерно так-же искусственно, как С++ впитал в себя чисто сишные вещи типа указателей - ради полной обратной совместимости.

Andrew
01.09.2017
18:23:40
А можно ли назвать тип допустим data Person = Person String Person "Lisa Hacker" , объектом типа Person?

Андрей
01.09.2017
18:26:26
иммутабельный дто ака структура

Alexsey
01.09.2017
18:29:24
примерно так-же искусственно, как С++ впитал в себя чисто сишные вещи типа указателей - ради полной обратной совместимости.
мож я чего не понимаю, но в скала-мире дофига объектов с конструктором, состоянием и методами

Что в общем-то слабо напоминает чистую функциональщину с функциями, которые группируются в модули

illiatshurotshka❄️
01.09.2017
18:31:43
мож я чего не понимаю, но в скала-мире дофига объектов с конструктором, состоянием и методами
если такие возможности есть то довольно логично их использовать во многих ситуациях, нет?

Андрей
01.09.2017
18:32:21
ты еще ленивость приплети. чистота, группировка функций в модули и ленивость - это про сабж. а фп - оно не обязано, вообще говоря.

Alexsey
01.09.2017
18:32:24
Ну я скорее к тому, что аналогия с указателями не совсем корректная

Андрей
01.09.2017
18:33:43
аналогия не про указатели, а про вынужденную поддержку платформы - что нет в фшарпе, что жвм в скале, что сишные примитивы в плюсах

хаскель родился сам по себе, ему ни с чем вынужденно совмещаться не надо

Daniel
01.09.2017
18:37:04
аналогия не про указатели, а про вынужденную поддержку платформы - что нет в фшарпе, что жвм в скале, что сишные примитивы в плюсах
подцепить готовую инфраструктуру - это практическая целесообразность, чтобы язык не пропал в тоннах других языков

Андрей
01.09.2017
18:39:21
так я не говорю что это плохо. именно поэтому скала с кложей едут на готовом наследии жвм. просто ради этого приходится впиливать поддержку концепций платформы - как получится

кстати, именно поэтому я в свое время начав с Фшарпа все равно смотрел на сабж - потому что он в этом смысле горд и не идет на подобные компромиссы )))

Google
Валерий
01.09.2017
19:22:27
мож я чего не понимаю, но в скала-мире дофига объектов с конструктором, состоянием и методами
Чистый — без сайд эффектов Императивщина не может быть чистой Функциональщина может себе позволить, но строго говоря не обязана

Alexander
01.09.2017
19:27:22
можно для дураков, почему императивный не может быть чистым?

я не вижу ни одной причины для справедливости этого утверждения..

Евгений
01.09.2017
19:30:12
можно для дураков, почему императивный не может быть чистым?
Ну если под "императивным" понимается программа как последовательность шагов, то состояния ты никак не передашь между шагами

Alexander
01.09.2017
19:53:18
не понял

Валерий
01.09.2017
19:55:13
Смотри

Допустим, ты можешь объявлять переменные

var a = 4 print a var a = 5 print a Вот собственно значение а (и других переменных, а так же состояния вывода) и есть твой стейт, и у там сайд эффекты

Более простой пример print 10 print 11 Собственно тут уже куча сайд эффектов в терминал

illiatshurotshka❄️
01.09.2017
20:00:24
main = main

Валерий
01.09.2017
20:01:34
Нельзя просто взять и мемоизировать значение print

Каждый раз print нужно исполнить, потому что сайд эффекты

Alexander
01.09.2017
20:03:01
@faerytea а могу не делать print

вроде меня никто делать его не обязывает

Мерлин
01.09.2017
20:03:44
ничто не мешает в императивном языке использовать чистые функции (кроме как для io, очевидно) и использовать изменяемое состояние по минимуму Собственно это уже считается нормой

Alexander
01.09.2017
20:03:45
так же как императивность не обозначает, что я могу изменить значение a

illiatshurotshka❄️
01.09.2017
20:03:55
вообще-то ни императивный ни функциональный язык в практике не может быть чистым

Alexander
01.09.2017
20:04:09
императивность обозначает что я пишу последовательность инструкций, которые компилятор исполнит

illiatshurotshka❄️
01.09.2017
20:04:21
хаскель только в хаскель репорте чистый

Google
Alexander
01.09.2017
20:04:35
в отличии от функционального, где я строю граф, который *как-то* будет редуцироваться

Евгений
01.09.2017
20:04:46
@faerytea а могу не делать print
У тебя есть программа, это тупо список A1, A2, A3 примитивных команд. Если ты не изменяешь значения, то не можешь даже условный цикл сделать. Разве непонятно?

Попробуй написать факториал на своём недоязыке

Alexander
01.09.2017
20:05:12
вот у меня программа на си, компилируется в SSA форму

у меня там есть циклы и нету изменений переменных

учитывая существование этой формы мне непонятно почему я не могу написать условный цикл

так же мне непонятно почему в императивной форме я не могу написать настолько же чистую функцию, как я могу написать на haskell

и почему у и меня не может быть ссылочной прозрачности

Евгений
01.09.2017
20:06:50
Ок, напиши сумму чисел от нуля до n

Alexander
01.09.2017
20:08:01
и?

Alexander
01.09.2017
20:08:45
что мне мешает иметь функцию в императивном языке (специально сейчас не пишу лямбда чтобы не вдаваться в дальшейшие споры)?

Евгений
01.09.2017
20:08:47
Лямбда даёт возможность создать эффект

Daniel
01.09.2017
20:09:04
do + State монада это разве не императивно?

illiatshurotshka❄️
01.09.2017
20:09:09
Потому что в хаскеле есть лямбда!
а в си есть поинтер на функцию

Евгений
01.09.2017
20:09:14
Потому что это уже примесь фп. Императивщина эьо тьюринг-машин

Daniel
01.09.2017
20:09:59
фп убивает императивность?

Alexander
01.09.2017
20:10:05
учитывая что lambda calculus и MT выражаются друг через друга я не понимаю этот агрумент

если у тебя есть MT, то есть LC; если есть LC то есть MT

Страница 381 из 1551