На RSDN появился совершенно загадочный пост Почему монады лучше lvalue (глобальных переменных) (написанное в нем я не понимаю до сих пор, буду признателен, если кто-нибудь его расшифрует). Для того, чтобы понять, о чем же там идет речь, пришлось обратился к первоисточнику: Programming Paradigms for Dummies: What Every Programmer Should Know.
Сегодня с утра я его таки дочитал. И кажется мне, что потраченное на его прочтение время было потрачено зря.
“Научный снобизм”, наверное, не совсем корректная характеристика. Но по ходу чтения я не мог отделаться от мысли, что автор говорит о программировании лишь с точки зрения академического ученого. Отсюда убежденность в непогрешимости функционального подхода. Ну и еще некоторые обобщения. Например, утверждение о том, что записи (record) являются одной из основополагающих концепций и через записи могут быть выведены остальные типы структур, такие как массивы, списки, строки, деревья, hash-таблицы. Или вот это:
Instantiation and genericity, normally associated with object-oriented programming, can be done easily by writing functions that return other functions. In object-oriented programming the first function is called “class” and the second is called an “object”.
Наверное, с точки зрения “высокой научной мысли”, так оно и есть. На практике, однако, удобнее пользоваться массивами и строками, как отдельными понятиями. И не считать, что класс – это функция, которая порождает функции-объекты. Лично мне это напоминает такой апофеоз обобщений, как “очередь с емкостью единица и выталкиванием старого значения при помещении в очередь нового значения” – вот так можно обозвать обычную переменную.
Но больше всего разочаровал пример с демонстрацией того, что наличие named state (т.е. переменных) улучшает модульность. Типа есть модуль, в котором есть функция F. Этим модулем пользуются программисты U1 и U2. Программисту U2 захотелось, чтобы модуль вел подсчет количества обращений к F. Что легко достигается посредством введения в модуль переменной-счетчика. Такое изменение не затрагивает программиста U1, поскольку интерфейс функции F не меняется.
Не знаю как кому, а лично меня такой пример совершенно не убеждает. Кстати, отличная демонстрация того, насколько сложно подбирать реалистичные и минималистичные примеры при написании статей о программировании.
Сухой остаток: статья не понравилась, понимания упомянутого выше поста thesz-а не прибавилось. Времени жалко.
Комментариев нет:
Отправить комментарий