Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Так как четко определенна, гарантии и работает в рантайме
использовать несколько подходов одновременно
код на Си по сути — одна здоровенная монада IOС точки зрения функционального подхода вы совершенно правы. К сожалению, это не имеет никакого отношения к реальному миру, с реальными последовательными коммандами процессору и тем, как происходит работа с IO.
what have been seen cannot be unseen
.Постоянно выходят статьи с названием в стиле “Монадный подход к решению такой-то-уже-решенной-задачи”.Помните статьи на тему: «Как организовать цикл на XSLT»? Из той же серии. Правда, монады — это, может быть — попытка построить теорию. А вот какой смысл в трудночитаемых декларативных циклах на принципе рекурсии? На идею чистой декларативности накладывается весьма «шумная» XML-обвязка.
А ваш пример «сначала сделали, а потом осознали, что его нужно будет хранить» — из области «сначала делаем, потом думаем».К сожалению, это практически стандартный пример из реальной жизни. Обычно из области «заказчику вдруг захотелось»…
предоставление объектом прямого доступа к данным для реализации хранения тоже будет являться нарушением инкапсуляции
Будучи чистыми, ФП-языки игнорируют возможности и ограничения, которые предоставляет физическая платформа…
И только наблюдая за реальностью мы можем избавиться от тех религиозных заблуждений, которые в действительности ограничивают нас.
Я глубоко уверен что можно построить софтвеерную систему так, чтобы все её составляющие имели отражение в реальном мире. Мало того, я долго занимался этим вопросом и, если интересно, могу сказать как это возможно.
но она не позволяет делать то, о чем я говорил — подмену «служебных комнат» в реальном времен
Как бы вам понравилось самому выбирать какую оконную систему использовать, без необходимости менять ОС?
class A:
def __init__(self):
self.x=0
self.y=0
def print(self):
print(self.x,self.y)
def a_set_one(self):
self.x=1
self.y=1
def a_set_two(self):
self.x=2
self.y=2
text=input("Enter 1 or 2")
if int(text==1):
A.set=a_set_one
else:
A.set=a_set_two
a=A()
a.set()
print(a)
Это значит что вся программа хранится не в текстовом виде, а в структурном.
int f(int x) {
const int y = 2 * x;
const int z = y + 1;
return z / 3;
}
почти никогда не возникало нужды пользовался его императивными возможностями
что всё тело программы утыкано монадами, и не видно, как он них избавиться, значит, действительно, был выбран неправильный инструмент для решения задачи.
bind
:bind :: (a -> m b) -> m a -> m b
a -> m b
, монадное значение m a
и возвращает результат m b
Дело в том, что функции являются фундаментальным понятием, в то время как объекты лишь содержат их.
#(1 2 3 4 5 6 7) select: [:each | each odd]
[object1 doSomeLongHardJob] fork.
[object2 doOtherLongHardJob] fork.
По существу, статические анализаторы кода основаны целиком на монадах, и тем самым они отбирают у программистов бремя по написанию монадического кода, вместо того, чтобы перекладывать его на них
Дело в том, что функции являются фундаментальным понятием, в то время как объекты лишь содержат их.
Python и Scala просто похитили все функции, заключили их в тюрьму “объектов”
Что не так с ООП и ФП