Jawa / Говнокод #26297 Ссылка на оригинал

0

  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 kekar2, (Updated )

Комментарии (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.
                        Ответить
                        • Суть не в том что они анонимные или нет, а в том что для объявления используется одинаковый синтаксис, просто для анонимной функции имя не указывается.
                          А в питоне анонимные и обычные функции объявляются разными конструкциями
                          Ответить
                          • Как это одинаковый сигтаксис, если в объявлении обычной функции есть имя, а в объявлении лямбды нет? Уже получается разный.
                            Ответить
                      • Нет, это мелочи. Имена не особо нужны. С точностью до хойстинга 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-говно!
                      Ответить
                        • Некрасиво, когда у пассива трусы испачканы говном.
                          Такая утонченность, женственность - и тут такое... Плюм!
                          Ответить
        • Сможешь изобразить 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];
                }
                Бывает ещё частично повторяющийся код в ветвях, но редко, и так сходу реальный пример не вспомнить.
                Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8