В мире программирования серебряной пули нет, поэтому за неимением ее приходится использовать более или менее удовлетворяющие заменители. Там где получается об этом громко говорят и стараются "продвинуть идею в массы", после чего идея начинает жить сама, часто в довольно извращенной форме.
Читать дальше
В процесе перехода на гибридные ЯП (с С# на F#, а с Java на соответственно Scala), я тоже пришёл к выводу, что, как правило, любой ОО-код можно успешно ресоурсить на функциональный, используя замыкания, размеченные объединения и технику сопоставления с образцом. При этом читаемость кода всегда улучшается. Тут единственная проблема видится мне в привычке программистов думать в терминах ложных представлений об ООП, навязанных C++ и Java в первую очередь.
Объектно-ориентированное программирование объединяет данные вместе с кодом, который их обрабатывает и это продается как преимущество.
Нет. Цимес ООП в динамическом (мульти)полиморфизме, а не в статическом связыании (структурировании) кода и данных. Последнее выдаётся как премущество Java и С++ ("паблик статик файнл Борщ Борщ борщ нью Борщ", ага ), хотя изначально в Simula и Smalltalk заложена принципиально иная парадигма. Которая, как известно, успешно реализована в CLOS. Собственно, вот и пример правильного ООП подхода, без утраты функциональной декларативности. Другой более или менее годный пример - Javascript с его протоипной природой, это уже ближе к общепринятой практике, чем Lisp.
Reply
Reply
Прототипное ООП лучше даже одним лишь отсутствием классов, плюс возможность динамической структуризации. javascript, видимо, не самый удачный пример такого ЯП ввиду наличия множества граблей. Но он всё же достаточно удобен, поскольку граблей таки меньше, чем к примеру в С++, их можно обойти малой кровью. Автор формата json назвал его "Lisp в шкуре C"
Reply
Есть отличный краткий курс (просмотреть и даже попробовать можно за день, а то и меньше)
https://github.com/filonenko-mikhail/ub-lisp
После него можно сразу легко и свободно рассуждать об устрицах :)
Reply
Leave a comment