metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2008-11-30 04:31 pm

Какого функционального программирования нам не хватает?

Как минимум, такого:
Пишем функцию с двумя(или одним) параметрами. Первый параметр - объект, второй - его метод. Если параметр один - то это кортеж содеращий в себе объект и метод.
Вызываем с произвольным объектом и его методом. Функция выполняет метод, и возвращает его результат в виде строки, а если валится исключение, то возвращает строку, описывающую исключение.
И все это для того, чтобы было проще писать логи в логи всякие характеристики объектов, в том числе и тогда, когда объект==null :)

Можно было бы еще возвращать из функции что-то вроде Either, где Left - это результат метода, а Right - описание исключения.

Но нам, энтерпрайзным быдлокодерам функциональное программирование не положено, поэтому "пишите на чем есть, мойша иванович, и не выпендривайтесь".

[identity profile] raydac.livejournal.com 2008-11-30 02:57 pm (UTC)(link)
не хватает задач в которых выигрышь от использования ФЯ был бы очевиден перед использованием ИЯ.. вот в чем заковыка то

[identity profile] veter-r-r.livejournal.com 2008-11-30 05:05 pm (UTC)(link)
Шоб вы всю жизнь отлаживали программы, в которых методы вызываются подобным образом! :)

[identity profile] x-a-e-p.livejournal.com 2008-11-30 08:47 pm (UTC)(link)
хехе, только ФП тут ни при чём совсем. Собственно, делали такое же с помощью boost::any на плюсах и в исключительно императивном стиле.

[identity profile] molnij.livejournal.com 2008-12-01 03:48 am (UTC)(link)
эм, а в чем проблема написать это на нефункциональном языке?
ну кроме того, что при неизвестном прототипе, неясно, с какими параметрами вызывать метод(хотя как это решается в функциональном - тоже слабо представляю)

[identity profile] migmit.vox.com (from livejournal.com) 2008-12-01 06:29 am (UTC)(link)
В OOHaskell, по-моему, можно такое сделать.

[identity profile] zmila.livejournal.com 2008-12-01 08:57 am (UTC)(link)
в javascript есть call/apply (с переменным числом параметров или с одним массивом параметров)
то что нужно?

[identity profile] zamotivator.livejournal.com 2009-01-09 09:12 pm (UTC)(link)
template< typename F >
void log( F f, std::string file, std::size_t line )
{
std::ostringstream description;
try
{
description << f();
}
catch( std::exception& e )
{
description << "Exception: " << e.what();
}
logFile << file << " : " << line << description.str();
} 
#define LOG( f ) log( f, __FILE__, __LINE __ )

LOG(boost::bind( &Multiply, left, right ));