Alexander
нет конечно
Alexander
и как может быть ФП против ООП
Alexander
это вообще ортогональные вещи
Валерий
Задачи решают функции, а не объекты
sleeping
OOP was good back in the days, and it still has its uses today, but now everyone is realising modifying states is equivalent to kicking babies, so now everyone is moving to immutable objects and functional programming
доня.
вот как раз в другой чят писал
я бы фп определил как парадигму, ориентированную на создание чистых (не эксплуатирующих сайд-эффекты) абстракций, на которых хорошо работает композиция, как-то так наверное
доня.
тому що всё фп оно о какой-нибудь композиции
функций, трансдьюсеров, монад, функторов и т.д.
Alexander
альтернатива для ФП это императивное программирование
Alexander
их можно сравнивать
Alexander
ООП это о представлении данных и связанных с ними функциях
доня.
тогда уж правильнее будет декларативное vs императивное, не?
Alexander
ООП сочетается как с ФП, так и с иммутабельностью
sleeping
Alexander
@KolesnichenkoDS согласен
Валерий
См. скала?))0)
sleeping
вы же знаете про featherweight java?
sleeping
эта милота у Пирса в книжке есть
sleeping
начинается с лямбда-инсчисления
Alexander
классическое mainstream определение это про то, что система работы с данными где данные образуют иерархию со свойствами инкампуляция, наследование, subtype полиморфизм 😏
sleeping
и на каком-то моменте реализуется маленькая джава
Alexander
впрочем последние 2 можно объединить в 1 =)
Alexander
это про Алана Кея, альтернативный вариант
Alexander
это как доказывать что синглетоны это такая штука у которой есть взаимнооднозначное соотвествие между значением и типом
Alexander
это определение ещё из 60х =)
Alexander
ООП по Клею это про pi
Alexander
ООП в меинстриме ничего про calculus нижележащий не говорит
Vasiliy
так называемые три кита мейнстрима - инкапсуляция, наследование, полиморфизм - настолько, мне кажется, абстрактны, что адепты понимают их как хотят
Vasiliy
из самого близлежащего - геттеры-сеттеры по мнению одних нарушают инкапсуляцию, по мнению других настолько важны, что для них делают хоткеи в IDE
Aragaer
"А расскажите своими словами, что такое полиморфизм" - "Я конечно могу рассказать, но честно говоря за те пять лет, что я работаю программистом, я еще ни разу не сталкивался с необходимостью пользоваться полиморфизмом." - ".... наверно на этом нам стоит прекратить собеседование. До свидания."
Aragaer
хотя сейчас, еще через 6 лет, я могу сказать, что таки да, кое-где мне полиморфизм тогда все-таки попадался, просто я его не узнал
Alexander
полиморфизм это когда один метод может работать с данными разного типа
Alexander
т.е. написал один раз и потом применяешь к разному не меняя код
Alexander
хм.. не совсем точно, но ладно
Aleksei (astynax)
Точнее, когда разные данные подходят для одного метода
Alexander
и его полиморфизма много видов
Aleksei (astynax)
Если просто с разными типами работает метод, то это перегрузка
Alexander
параметрический - когда в одну функцию можно пихать разные данные
Alexander
ад-хок - когда функция с одним именем по разному работает с разными данными (не точное определение, но мне лень думать или доставать пирса)
Alexander
subtype - когда метод может работать со вмести подтипами (наследниками) данного типа
Alexander
dynamic - то что в динамических языках, и там несколько подклассов
Alexander
можно открыть книжку пирса и посмотреть, там доступно
Alexander
parametric это то что в меинстриме называют Generic
Aleksei (astynax)
Вон в смолтолке нет перегрузки по типам. Просто те объекты, которые принимают некое сообщение - "утки"
Aragaer
так вот да, я к тому моменту сталкивался с полиморфизмом в том же ядре линукса - когда драйвер это структура с 5 указателями на функции
Aragaer
но это наверно единственный пример, который я к тому моменту видел в реальной жизни
Aleksei (astynax)
Где тут полиморфизм?
Aragaer
что не важно, что за драйвер, у него есть open, read, write, close и ioctl
Aleksei (astynax)
Полиморфизм, это возможность взять некий признак (поведение), присущий разным объектам и сгруппировать эти разные объекты по данному принзаку: "плавают и лодки и рыбы - плавание полиморфно"
Aleksei (astynax)
Aleksei (astynax)
Aleksei (astynax)
Но как подход, а не конкретику типа "состояние+поведение и классы в придачу"
Aragaer
соответственно все character device drivers с точки зрения операционки выглядят одинаково
Зигохистоморфный
вопросик если койонеда дает бесплатный функтор, то что делает йонеда?
Andrew
Aleksei (astynax)
Не, "заднеприводных", это не в этот чятик, это к Платову
Andrey
Объекты - это замыкания для бедных. Поэтому ООП есть и в Схеме и даже у меня в языке.
Andrey
А искаропки они в Скале и Фшарпе из-за платформ реализации и интеропом с жвм и нетом
Alexander
Misha
Скала согласно одерскому- ООП язык
Misha
"С элементами"
Andrey
примерно так-же искусственно, как С++ впитал в себя чисто сишные вещи типа указателей - ради полной обратной совместимости.
Andrew
А можно ли назвать тип допустим
data Person = Person String
Person "Lisa Hacker"
, объектом типа Person?
Andrey
иммутабельный дто ака структура
Alexey
Alexey
Что в общем-то слабо напоминает чистую функциональщину с функциями, которые группируются в модули
Anonymous
Andrey
ты еще ленивость приплети. чистота, группировка функций в модули и ленивость - это про сабж. а фп - оно не обязано, вообще говоря.
Alexey
Ну я скорее к тому, что аналогия с указателями не совсем корректная
Andrey
аналогия не про указатели, а про вынужденную поддержку платформы - что нет в фшарпе, что жвм в скале, что сишные примитивы в плюсах
Andrey
хаскель родился сам по себе, ему ни с чем вынужденно совмещаться не надо
Danila Matveev
Andrey
так я не говорю что это плохо. именно поэтому скала с кложей едут на готовом наследии жвм. просто ради этого приходится впиливать поддержку концепций платформы - как получится
Andrey
кстати, именно поэтому я в свое время начав с Фшарпа все равно смотрел на сабж - потому что он в этом смысле горд и не идет на подобные компромиссы )))