1. PHP / Говнокод #19069

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    public function calculateSum($products) {
            $sum = 0.0;
            array_map(function($product) use (&$sum)
            {
                    $sum += $product->hasSale() ? $product->getPriceWithSale() : $product->getPrice();
            }, $products);
            return $sum;
    }

    Человек начитался, что функциональщина это модно, но вот про её основу, immutable states, он не слышал. В общем, человек открыл для себя ещё foreach.

    Запостил: Strannik1941, 23 Ноября 2015

    Комментарии (33) RSS

    • А мне кажется, надо брать лучшее из всех подходов.

      Локальная переменная-счётчик или переменная аккумулятор - проста и естественна, чистые функции красивы, полезны и легко тестируются. Срать во все переменные - плохо, протаскивать контекст через аргументы, города и страны - непосильный труд. Выбрав и скомбинировав разумные, полезные и достаточно производительные принципы, мы доберёмся до вершин!
      Ответить
      • В общем-то даже в чистом и непорочном хаскеле как раз для этого замутили монаду State, в которой можно юзать тот самый локальный счётчик вдоль цепочки вычислений...
        Ответить
        • State весь из себя иммутабельный, он просто делает явное таскание контекста не таким явным
          даже IO могла бы быть иммутабельной, если бы хватало памяти на хранение всего мира
          кстати, были эзотерические языки, где RealWorld не был запрятан под монадический интерфейс, но поскольку память всё-таки не бесконечна, там придумываются другие ограничения
          Ответить
          • Я понимаю, что он иммутабельный. Но вот код, который завёрнут в State, выглядит прям как императивщина, которая читает и пишет в состояние.
            Ответить
      • Полностью согласен. Мне потому, например, и нравится Python. Ведь он позволяет без особого труда сочетать различные стили и парадигмы программирования. И главное, что сочитаются они очень гармонично.
        Ответить
        • Сишарп их вроде бы позволят сочетать еще раньше.
          Ответить
          • Там это реализовано не так удобно. Всё же СШарп имеет больший уклон в ООП. Да и статическая типизация, как основная (есть и вывод типов, и даже возможность использовать динамическую, я знаю) не даёт особо разгулятся.
            P.S. Python старше чем C#
            Ответить
            • Питон может и старше (он даже старше явы), а вот популярным / допиленным он стал позже.
              А что не так с типиацией в плане ФП?
              Ответить
              • Не знаю, это, конечно, лично мои ощущения, но меня всегда немного напрягала необходимость явного указания типа в столь высокоуровневых конструкциях. Я лично считаю это аттавизмом оставшимся от си (который я кстати люблю), хотя и здесь есть свои преимущества. Языковые конструкции получались слишком грузными. Если посмотреть на популярные функциональные языки, то там в большинстве случаев исползуется автовыведение типов, или вообще динамическая типизация, что снимает с программиста лишнии заботы о ручном контроле типа. честно, не знаю, как сейчас в C#, ибо уже давно на нём не писал (последней раз пользовался версией, как она только вышла 4.0) и за обновления не особо слежу.
                Ответить
                • var?

                  >не знаю, как сейчас в C#, ибо уже давно на нём не писал (последней раз пользовался версией, как она только вышла 4.0)
                  >Начиная с версии Visual C# 3.0 локальные переменные могут иметь неявный тип var.
                  Ответить
                  • Автовывод типа для локальных переменных это не так полезно, как автовывод типа аргументов.
                    Вот небольшой пример на ocaml
                    let rec sum xs =
                    match xs with
                    | [] -> 0
                    | x :: xs' -> x + sum xs';;
                    val sum : int list -> int = <fun>
                    Т.е интерпретатор сам определил, что аргумент - список, а результат целое число.
                    Ответить
                    • Добро пожаловать на F#
                      Ответить
                      • Который Ocaml чуть больше чем полностью
                        Ответить
                        • > Ocaml чуть больше чем полностью

                          Нифига, там функторов нет. Окамловые модули и функторы - это одна из основных фич языка, очень крутая штука, которая в теории мощнее TypeClasses (без расширений), но на практике чуть менее удобная в использовании.

                          С другой стороны, F# умеет в перегрузку операторов, многопоточность и (пока ещё) непереносимый виндовый гуй.
                          Ответить
                    • > ocaml
                      > локальных переменных это не так полезно, как автовывод типа аргументов

                      Давно на Ocaml пишешь? Мануал по монадам вчера прочитал?

                      В любой программе объёмнее школьной поделки будут модули, где модули - там .mli -файлы с интерфейсами, в которых типы всех публичных функций извольте выписать руками. Haskell-компилятор по дефолту имеет ворнинг на top-level биндинги без явного указания типа.

                      Как раз для локальных переменных и функций вывод типов полезнее, т.к. для top-level функций модуля типы всё равно всегда лучше явно писать.
                      Ответить
              • >> Питон может и старше (он даже старше явы), а вот популярным / допиленным он стал позже.

                Ты что, глорихантер от программирования?
                Ответить
                • > глорихантер
                  Это как?
                  Ответить
                  • В футболе это тот, кто более за тех, кто выигрывает

                    А пидар видимо фапает только на те языки, что нынче популярны
                    Ответить
                    • Как что-то плохое.
                      Ответить
                      • Ну когда чувак бегает бегает и кричит *название команды* в ее цветах только потому что у них сезон начался лучше чем у той команды, которая победила в прошлом сезоне, с чьих цветах он гонял раньше, а еще искренне не понимает почему его хотят уебать тру фанаты обеих команд - это диагноз
                        Ответить
                        • Школьник-хуесос, ЯП - это не команда, это рабочий инструмент. Молоток, понимаешь? Дыбил блядь. С командами - это налинукс.
                          Ответить
                          • забыл свою коронное "У меня не бомбит"
                            Ответить
                          • Давай, отвечай Васе! А потом пососите друг у друга хуи.
                            Ответить
                      • Плохое, очень плохое. Часто мы слышим "Язык A не нужен, потому что у него нет библиотек и пользователей. У языка A нет библиотек и пользователей потому, что язык A не нужен". В итоге язык A всплывает и становится нужным только благодаря тем, кто доверился ему и начал его использовать и развивать.
                        Ответить
                        • в итоге язык А всплывает, потому что его находят нитакиекаквсе хипстеры, и начинают неистово кричать о своей уникальности в реддите, швабре и подобных помойках
                          Ответить
                          • А потом хипстеры взрослеют (или их становится слишком много) и язык забывается.
                            (разумеется, в случае, когда язык используют не потому, что он всплыл, а потому, что нравится)
                            Ответить
                    • тогда он должен дрочить на похапе. и обмазываться go
                      Ответить
          • 3_14dar, иди напитон!
            Ответить
            • Ты умен и оригинален, иди-ка ты не напитон, а просто нахуй.
              Ответить
        • > И главное, что сочитаются они очень гармонично.

          как главный местный питонопохабник осмелюсь оспорить
          Ответить
      • К сожалению, не тот случай.
        Ответить
    • http://php.net/manual/ru/function.array-reduce.php
      Ответить

    Добавить комментарий