1. Java / Говнокод #26297

    −5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    // определяем приоритет операций
         private int getPriority(char currentCharacter){
         if (Character.isLetter(currentCharacter))            return 4;
    else if (currentCharacter =='*'|| currentCharacter=='/')  return 3;
    else if (currentCharacter == '+'|| currentCharacter=='-') return 2;
    else if (currentCharacter == '(')                         return 1;
    else if (currentCharacter ==')')                          return -1;
    else                                                      return 0;
    }

    Калькулятор стажера

    Запостил: kekar2, 31 Декабря 2019

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

    • стажор и его мапа
      Ответить
    • Нахуя вы заставляете стажера писать калькулятор?
      Ответить
    • Стажер не из крестов вышел случаем ?
      Ответить
      • уёбок, тебе тут никто не ответит
        Ответить
      • Из пистона. В пистоне нет свища.
        Ответить
        • Потому что свитч не нужен нигде.
          Ответить
        • Это одна из сорока семи причин сосания питоном буя
          Ответить
        • Я за «Python».
          >>> def get_priority(current_character):
          ...     if current_character.isalnum(): return 4
          ...     return {
          ...             '*': 3,
          ...             '/': 3,
          ...             '+': 2,
          ...             '-': 2,
          ...             '(': 1,
          ...             ')': -1,
          ...     }.get(current_character, 0)
          ...
          >>> get_priority('a'), [get_priority(c) for c in '*/+-()'], get_priority('&')
          (4, [3, 3, 2, 2, 1, -1], 0)
          Круче только в языках с нормальным паттерн-матчингом.


          Кстати, Гвидо где-нибудь обосновывал, почему свитч-кейс нинужен? Или он просто не осилил его в 2D-синтаксис впихнуть?
          Ответить
          • Гнидо скорее всего пытался уменьшить количетво сущностей
            По этой же причине нету тренарника там

            Искуственное выпиливание полезного функционала ради призрачных упращений как по мне
            Ответить
            • Тернарник-то есть, кстати, с несколько странным порядком.
              >>> print('coc' if 1 == 1 else 'kok')
              coc
              >>> print('coc' if 1 == 2 else 'kok')
              kok
              Ответить
              • я про гетеросексуальный тренарник с ? и :

                Это какой-то монстр, так можно сказать что он и в котлине есть

                if (foo) bar else baz
                Ответить
                • Ну дык это он и есть, просто «?» и «:» в «if» — «else» переведены, плюс условие с then-блоком местами изменено. Ебануто, но де-факто это именно тернарный оператор.
                  Ответить
              • Тренарник тоже можно было бы выпилить, он легко заменяется на ((lambda: "false"), (lambda: "true"))[condition]()

                Зачем было плодить лишние сущности я не понимаю...
                Ответить
                • lambda можно было легко выпилить заменив на def, зачем плодить лишние сушности я не пнимаю

                  функции можно было легки выпилить заменив на гоуту
                  Ответить
                  • Был язык с GOSUB и RETURN вместо функций. Классический «Бейсик» назывался. Но в «Микрософте» посчитали, что сущностей слишком мало, и решили добавить...
                    Ответить
                  • Поддерживаю. А то вышло, что одни из них могут быть анонимными, а другие - полноценными. В противоположность с JS, где один и тот же сиснтаксис позволяет создавать как анонимные, так и полноценные функции.
                    Ответить
                    • Если честно, я не понял в чем разница.

                      бидон
                      def real_fu():pass
                      def anon = lambda spam: spam + 42


                      джопас
                      function real(){};
                      const anon = (1) =>{q+1};
                      Ответить
                      • Он имеет в виду, что в js ты можешь во время создания функции на лету дать ей имя. Это полезно, если нужно получить референс функции не привязывая ее к переменной
                        subscribe(function subscription(){
                          /* ... */
                          unsubscribe(subscription)
                        })

                        В питоне же нельзя "обратиться" к лямбде из ее же тела на создавая переменную?
                        Ответить
                        • В питоне нет переменных
                          Ответить
                        • да

                          гнидо вообще не любил лямбд, говорил нужно явно делать функции
                          Ответить
                        • Конечно нельзя, на то она и анонимная функция. Она нужна просто для передачи маленького кусочка кода без лишних объявлений. То что ты написал на жс, то не лямбда, а просто объявление функции.

                          Кстати, например в J чтобы сослаться на себя в тацитном определении без имени нужно использовать $:

                          А в форте вообще по имени на себя не ссылаются, потому что имя в словаре становится видимым только после завершения компиляции слова, и в именованных и в безымянных определениях для рекурсии используют слово RECURSE.
                          Ответить
                          • Суть не в том что они анонимные или нет, а в том что для объявления используется одинаковый синтаксис, просто для анонимной функции имя не указывается.
                            А в питоне анонимные и обычные функции объявляются разными конструкциями
                            Ответить
                            • Как это одинаковый сигтаксис, если в объявлении обычной функции есть имя, а в объявлении лямбды нет? Уже получается разный.
                              Ответить
                              • В js различается создание функции на лету и ее объявление. Первое - function expression, второе - function declaration.
                                В Писании для function expression, в отличии от function declaration, имя помечается как optional в рамках одного формализованного выражения (https://www.ecma-international.org/ecma-262/10.0/index.html#prod-FunctionExpression), значит синтаксис одинаковый и ниибет
                                Ответить
                        • Нет, это мелочи. Имена не особо нужны. С точностью до хойстинга var f = function... тоже подойдёт.
                          Ответить
                      • Можно и без стрелочных. В ES5, а то и раньше уже было всё, что нужно, чтобы написать код и дать питону пососать свой хвост.
                        function real(){};
                        const anon = function(q){ return q+1};


                        Разница в том, что в JS можно написать вот так:
                        var ys = xs.map(function (x) {
                          do {
                            var a = as[x];
                            if (!a) return 0;
                            if (a < 1) return a + x / 2;
                          } while (a < 10);
                          return 3;
                        });


                        В питоне для этого придётся запиливать отдельную функцию где-то выше. Ну либо выражать лямбду на PythonFuck (или как эта фигня называется) и городить нечитаемый код.

                        Даже в C++ появились нормальные лямбды, а не это python-говно!
                        Ответить
                        • Это некрасиво.
                          Ответить
                          • Некрасиво, когда у пассива трусы испачканы говном.
                            Такая утонченность, женственность - и тут такое... Плюм!
                            Ответить
          • https://www.python.org/dev/peps/pep-3103/
            Ответить
          • Сможешь изобразить fall through или одну и ту же ветвь для нескольких вариантов?
            Ответить
            • фол сру нужно чуть реже, чем никогда
              его всегда все брекают
              Ответить
              • Единственное реальное применение фалсру без бряка - одна ветка для нескольких вариантов.

                И то костыль, на самом деле. Лучше бы добавили что-нибудь в духе case 1..3, 5:
                Ответить
                • Именно поэтому я за «Паскаль».
                  Ответить
                • Я за «паттерн матчинг».
                  Ответить
                  • Кейс вполне себе может быть маттерн патчингом.

                    Скажем, в "руби" принято матчиться по
                    * регуляркам
                    * ренджам
                    * флип-флопам (стейтфул оператор из перла)

                    В котлине тоже можно матчиться по ренджам, но есть там и классический матчинг, по типу.
                    Причем там во-первых смарт-каст, а во-вторых если класс оморскокоченный (sealed) то коко проверяет, что свитч твой экзостед


                    Ах ды, чуть не забыл1 Груви всех уделал
                    switch (val) {
                            case ~/^Switch.*Groovy$/:
                                result = 'Pattern match'
                                break
                            case BigInteger:
                                result = 'Class isInstance'
                                break
                            case 60..90:
                                result = 'Range contains'
                                break
                            case [21, 'test', 9.12]:
                                result = 'List contains'
                                break
                            case 42.056:
                                result = 'Object equals'
                                break
                            case { it instanceof Integer && it < 50 }:
                                result = 'Closure boolean'
                                break
                            default:
                                result = 'Default'
                                break
                        }
                    Ответить
                    • > всех уделал
                      В итоге это работает как последовательная цепочка if'ов?
                      Ответить
                      • А ты хотел, чтобы как в сишке через таблицу переходов?
                        Ответить
                      • Да, а как ещё? Для таблички тут слишком много разной питушни: паттерн матчинг, проверка типов, списки. Этот свищ даже плавучего петуха матчит с погрешностью.

                        > case { it instanceof Integer && it < 50 }:
                        А это уж точно аналог if с говносинтаксисом.
                        Ответить
                • Например анролл:
                  switch (n) {
                  case 3: dst[3] = src[3];
                  case 2: dst[2] = src[2];
                  case 1: dst[1] = src[1];
                  case 0: dst[0] = src[0];
                  }
                  Бывает ещё частично повторяющийся код в ветвях, но редко, и так сходу реальный пример не вспомнить.
                  Ответить
              • Нахуй ты уёбку отвечаешь?
                Ответить
              • https://www.php.net/manual/en/function.ini-get.php
                Ответить
    • Ровненько отформатировал.
      Ответить
    • https://habr.com/ru/company/mailru/blog/478604/
      ахахахахах
      Ответить
    • Я тоже хочу угоститься. Можно?
      Ответить

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