Комментарии 37
для меня тема оказалась сложной. Можете помимо технических деталей описать где это использовать, в чем плюсы использования данного метода перед стандартными?
Присоединяюсь к просьбе, еще хотелось бы примеров кода, как оно используется на практике в реальных задачах.
Это осколки функционального программирования и ленивого выполнения кода. Из того что я читал, можно посмотреть в сторону learnyouahaskell.com/: интересный учебник по хаскелу.
Например learnyouahaskell.com/higher-order-functions#curried-functions. Но лучше прочтите книжку с самого начала.
Например learnyouahaskell.com/higher-order-functions#curried-functions. Но лучше прочтите книжку с самого начала.
Как по мне — переведенные примеры в ридми с гитхаба — недостаточно для статьи
В начале статьи надо было указать, что для ее усвоения требуется знание базовых принципов функционального программирования.
По крайней мере, если бы я не прочитал Programming Erlang, то думаю вообще закрыл бы эту статью, даже не читая.
По крайней мере, если бы я не прочитал Programming Erlang, то думаю вообще закрыл бы эту статью, даже не читая.
return "foo<$a, $b, $c>\n";
Думаю, это неудачный пример кода. Мне сначала показалось, что эта строка имеет какую-то роль в определении частичной функции (какая-то магия с eval'ом, например).
На самом же деле это просто код, чтобы продемонстрировать, что с поданными аргументами что-то происходит.
Такое можно проделать и без библиотек, не так гибко, но большая часть функционала останется, а учитывая что такие вещи не так часто нужны, использования того класса не очень то и оправдывает себя.
class Boo
{
public function woo($a, $b, $c)
{
return "Boo::woo<$a, $b, $c>\n";
}
}
$f = array('Boo', 'woo');
$params = array(1, 2);
$params[] = 3;
echo call_user_func($f, $params);
На тему смешивания парадигм есть забавная статья lukeplant.me.uk/blog/posts/why-learning-haskell-python-makes-you-a-worse-programmer/
Это прикольно конечно, но лично мне не хотелось бы подобную магию увидеть в коде с которым я работаю
Это прикольно конечно, но лично мне не хотелось бы подобную магию увидеть в коде с которым я работаю
А почему вы сделали что карринг нельзя вызвать через __invoke?
Идейно же результатом карринга является функция.
Идейно же результатом карринга является функция.
Круть. Мысли правильные.
Теперь ждем реализацию монад в PHP! =)
Теперь ждем реализацию монад в PHP! =)
Товарищи, уже второй день думаю куда это присобачить. Придумать не получается. Может кто-нибудь предложит конкретный пример? А лучше три.
считаю, что раз найти применение не получается, то не пришло еще время (и опыт), либо оно просто не нужно Вам. У вас свои парадигмы/стили/подходы программирования
Это понятно, что умный и опытный человек сам до всего додумается со временем. А хочется видеть пример, который позволит не слишком умным и не слишком опытным людям понять как это использовать.
я к тому, что если это еще не используешь, значит это еще тебе не нужно. имхо.
Интересный подход. Надо развить эту мысль.
Берём постулат:
1. Если что-то не используешь, значит тебе это ещё не нужно.
Берём программиста, который ещё ничего не использует. Из постулата значит, что ему ничего не надо. Значит он ничего не напишет. Но как видно, программисты что-то пишут. Значит одного этого постулата мало. Дополним.
2. Некоторые вещи, которые использует программист получаются случайно.
Из этих двух постулатов следует вывод: всё, что использует программист, когда-то начал использовать случайно.
Берём постулат:
1. Если что-то не используешь, значит тебе это ещё не нужно.
Берём программиста, который ещё ничего не использует. Из постулата значит, что ему ничего не надо. Значит он ничего не напишет. Но как видно, программисты что-то пишут. Значит одного этого постулата мало. Дополним.
2. Некоторые вещи, которые использует программист получаются случайно.
Из этих двух постулатов следует вывод: всё, что использует программист, когда-то начал использовать случайно.
Такие инструменты используют из-за удобства, а не из-за того, что это клево.
Если можно обойтись более простым решением — совсем необязательно прибегать к карри/партиал. Можно писать без всего этого в веб.
PHP нужен для сайтов/админок/форумов/блогов/итд, а не различных телекомуникационных систем, для которых существуют «всякие» эрланги.
Если можно обойтись более простым решением — совсем необязательно прибегать к карри/партиал. Можно писать без всего этого в веб.
PHP нужен для сайтов/админок/форумов/блогов/итд, а не различных телекомуникационных систем, для которых существуют «всякие» эрланги.
Понятно, что это делается для удобства. Но понять в чём именно удобство не всегда можно понять только по описанию и применению.
Взять хотя бы портянки.
А из этого описания и способа применения нифига непонятно какие у неё есть достоинства.
Поэтому хотелось бы посмотреть на примеры и именно для этого языка.
Взять хотя бы портянки.
Портянка — кусок ткани для обматывания ноги, нижнее бельё для ног, прямоугольный кусок тёплой и прочной ткани, который использовался в старину вместо носка.
Чтобы портянка не разматывалась при ходьбе и беге, её нужно особым образом (плотно) наматывать на ногу. Делать это следует от носка ноги и непременно «наружу», а не «внутрь», чтобы при ходьбе она не сбивалась и не натирала ногу.
А из этого описания и способа применения нифига непонятно какие у неё есть достоинства.
Поэтому хотелось бы посмотреть на примеры и именно для этого языка.
Можно использовать как замену ООП, когда у нас класс с конструктором с параметрами и кучей вызовов одного метода. Например, логеры, мэйлеры и т. п.
Возможно, как раз будет полезно в свете этой статьи «Перестаньте писать классы».
А ещё такой подход мог бы добавить некоторого изящества в код:
Примерно вот так:
А ещё такой подход мог бы добавить некоторого изящества в код:
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
// grab URL and pass it to the browser
curl_exec($ch);
// close cURL resource, and free up system resources
curl_close($ch);
Примерно вот так:
$ch = curl_init();
$setUrl = Partial::apply('curl_setopt', $ch, CURLOPT_URL);
$setOutputHeader = Partial::apply('curl_setopt', $ch, CURLOPT_HEADER);
$exec = Partial::apply('curl_exec', $ch);
$close = Partial::apply('curl_close', $ch);
// set URL and other appropriate options
$setUrl("http://www.example.com/");
$setOutputHeader(0);
// grab URL and pass it to the browser
$exec();
// close cURL resource, and free up system resources
$close();
НЛО прилетело и опубликовало эту надпись здесь
Польза есть — узнать, хотя бы, что такая штука вообще существует.
НЛО прилетело и опубликовало эту надпись здесь
Я предлагаю производить меньше негатива :)
Вот для меня польза была — я узнал о такой штуке, о чем собственно честно и написал.
Да может для кого-то пользы от статьи и немного, и тема может быть не совсем раскрыта, но говорить категорично, что пользы НОЛЬ не совсем верно, по-моему.
Вот для меня польза была — я узнал о такой штуке, о чем собственно честно и написал.
Да может для кого-то пользы от статьи и немного, и тема может быть не совсем раскрыта, но говорить категорично, что пользы НОЛЬ не совсем верно, по-моему.
НЛО прилетело и опубликовало эту надпись здесь
Повторюсь, я не спорю что статья отличная хорошая или какая-то еще, я лишь написал в ответ на «Пользы от публикации хабрапользователям — НОЛЬ!», что лично мне она принесла пользу. К тому же, как часто бывает на хабре, — возможно в комментарии придут люди, знающие по теме и напишут что-то полезное.
Вот вы, на сколько я понимаю, в этой теме разбираетесь? Ну так может быть лучше вместо гневных комментариев написать что-то полезное по этой теме?
Вот вы, на сколько я понимаю, в этой теме разбираетесь? Ну так может быть лучше вместо гневных комментариев написать что-то полезное по этой теме?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Карринг и Частичное применение функции в PHP