Интересное мнение про ООП - страница 13

 
Dmitry Fedoseev:

Исчерпывающе! Ни добавить ни прибавить ))

Сарказм понятен, но тем не менее - это базовое отличие и все прочие уже являются следствиями из него. Например, отсутствие в чистом ФП переменных, значения которых можно менять.

 
Dmitry Fedoseev:
А чем это ФП принципиально отличается от использования указателей на функции?

В ФП запрещено присваивание. Объекты можно только создать и копировать.

 
Vasiliy Sokolov:

В ФП запрещено присваивание. Объекты можно только создать и копировать.

ну хоть что то начало проясняться к 13-й странице обсуждения - смотрел несколью видеоуроков на ютуб, одна болтовня о неком высоком искусстве в виде ФП ))


ЗЫ: если б Вы статью написали, думаю это было бы полезно для "неокрепших умов", стиль подачи материала в Ваших статьях заслуживает уважения (ну или мне нравятся Ваши статьи если не выдумывать )) ), конечно нужно с админами согласовать

 
Vasiliy Sokolov:

В ФП запрещено присваивание. Объекты можно только создать и копировать.

Если нельзя, но очень хочется, то можно) Только придётся разбираться с монадами)

 
Igor Makanu:

ЗЫ: если б Вы статью написали, думаю это было бы полезно для "неокрепших умов", стиль подачи материала в Ваших статьях заслуживает уважения (ну или мне нравятся Ваши статьи если не выдумывать )) ), конечно нужно с админами согласовать

К сожалению не получится. Во-первых я не разбираюсь в ФП, так скорее азы. Во-вторых, MQL и ФП это разные вселенные. Нет обоснования маскировать ФП под практический материал посвященный MQL.

 
Vasiliy Sokolov:

 Во-вторых, MQL и ФП это разные вселенные. Нет обоснования маскировать ФП под практический материал посвященный MQL.

Написать статью по подключению haskell dll к мт. И объяснить, что фп это безопасно и то что нужно для финансов.

 
Ну еще несколько тезисов о ФП:
  • В ФП запрещено присваивание. Объекты можно только создать и копировать.
  • Чистые функции. Если f(a, b) = c. То при одинаковых a и b результат f всегда будет одинаковым. Тогда можно использовать мемоизацию: результат функции рассчитывается один раз, а затем просто достается по ключу из ее аргументов.
  • Каррирование. Если имеется функция f(a,b) то ее можно представить как f(a) -> f(b) (функция принимающая аргумент a и возвращающая другую функцию, принимающую аргумент b:
    public static Action<string> GreetingCarry(string g)
    {
        Action<string> pn = (b) => Console.WriteLine(g + " " + b);
        return pn;
    }
    
    var printGreetingAndName = GreetingCarry("Hello");
    printGreetingAndName("Ivan");
    printGreetingAndName("Sergey");
    
    >> Hello Ivan
    >> Hello Sergey
  • Операции на стеке. Если присваивание запрещено, то нет обмена ссылками. Поэтому объекты выделяются прямо на стеке, следовательно они потокобезопасны. Обмен ссылками на объекты в куче не происходит (присваивание запрещено). Следовательно доступ к объекту на куче также осуществляется монопольно из одного потока. Поэтому доступ к объектам потокобезопасный "из коробки".
 
Rorschach:

Написать статью по подключению haskell dll к мт. И объяснить, что фп это безопасно и то что нужно для финансов.

чего мелочится - сразу Lisp на MQL :-)

прикольно что в реализация диалекта лисп не так уж много кода...он маленький

только практический смысл сего действия не обозревается. Что в принципе намекает на мощь и востребованность ФП в данной области
 
Maxim Kuznetsov:

чего мелочится - сразу Lisp на MQL :-)

прикольно что в реализация диалекта лисп не так уж много кода...он маленький

только практический смысл сего действия не обозревается. Что в принципе намекает на мощь и востребованность ФП в данной области

тогда уж Clojure

Стал искать языки по выразительности, чтоб меньше клаву топтать. Этот оказался даже короче питона. У него есть версия, основанная на .net, а нетовские библы подключаются в 1 движение к мт.
 
По теме странных стилей написания. Наткнулся на свой код с таким выкрутасом.
// Определение Offset-параметра в ЛК.
int GetOffset()
{
  const double Price = NormalizeDouble(Ask / 2, _Digits);
  const double Lots = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
  
  const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUYLIMIT, Lots, Price, 0, 0, 0, "RannForex LimitOffset Detected");
  
  return((Ticket > 0) && OrderSelect(Ticket, SELECT_BY_TICKET) ?
         (int)((OrderOpenPrice() - Price) / _Point + OrderDelete(OrderTicket()) * 0.1) : 0);
}