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

    +73

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    int[] indexes = list.getSelectedIndices();
            if (indexes.length == 0) {
                indexes = getAllIndexes();
            }
            if (indexes.length == 0) {
                return false;
            }

    индуссы атакуют

    Запостил: Dexter, 15 Августа 2011

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

    • > int[] indexes = list.getSelectedIndices();
      так все-таки индекс или индис?
      индисский код.
      Ответить
    • тут в опечатке говнокод?
      Ответить
      • говно в том, что забыли проверить на null
        Ответить
        • а где написано, что там null может приходить? Я, например, вообще стараюсь null избегать, всегда пустой список возвращаю, где это возможно.
          Ответить
          • более того, не написано, что не может приходить.
            а это чревато.
            Ответить
            • я нигде этого в данном примере не вижу. вы додумали свой вариант, а я свой. мы оба правы. тот кто постил это на говнокод мог бы указать на то, что методы могут возвращать null, ну или хотя бы выложить их реализации.

              А может человек вообще невнимательно посмотрел на этот пример, увидел его как

              int[] indexes = list.getSelectedIndices();
              if (indexes.length == 0) {
              indexes = list.getSelectedIndices();
              }
              if (indexes.length == 0) {
              return false;
              }

              и поспешил сюда запостить.
              Ответить
        • Спорно, очень спорно. Может, по семантике никогда null не возвращается. Опечатка + просто некрасиво. Наверняка можно было лучше придумать, что-то типа:
          boolean hasSelection = list.numOfSelectedRows() > 0;
          int[] indexes = hasSelection ? list.getSelectedIndexes() : getAllIndexes();
          if (indexes.length == 0) {
              return; // nothing to process
          }
          Ответить
          • хотя, с другой стороны, втихую проглатывание нулла тоже не очень хорошо.
            тут логика не раскрыта, непонятно, что имелось ввиду.
            Ответить
            • Я лично код не с первого раза понял. Говно, конечно, но контекста не хватает.
              Ответить
    • Я имел в виду то, что код плохо читабелен. Два одинаковых условия, меня очень сильно выбивают и у меня даже дернулась рука объединить их, что бы привело к изменению логики. :)
      Ответить
    • Я имел в виду то, что код плохо читабелен. Два одинаковых условия, меня очень сильно выбивают и у меня даже дернулась рука объединить их, что бы привело к изменению логики. :)
      Ответить
    • Извините, инет залагал
      Ответить
    • Возможно так было бы лучше
      int[] indexes;
      if (list.isSelectionEmpty()) {
      	indexes = getAllIndexes();
      	if (indexes.length == 0) return false;
      } else indexes = list.getSelectedIndices();
      Ответить
    • А можно и так:
      ...
      int[] indexes = getIndexesToProcess(list);
      if (isEmpty(indexes)) return false;
      ...

      private int[] getIndexesToProcess(list) {
      int[] indexes = list.getSelectedIndices();
      return isEmpty(indexes) ? getAllIndexes() : indexes;
      }

      private boolean isEmpty(int[] array) {
      return array.length == 0;
      }
      Ответить
    • Вот, хороший пример почему не надо возвращать значения не в конце функции. По-нормальному, должно было быть:
      return list.getSelectedIndices().length > 0 || getAllIndexes().length > 0;
      Ответить
      • ваш вариант и исходный код дают разные результаты
        Ответить
        • Потому, что строчкой выше объясняется, почему разные :) Ну или двумя, если в с мобильного телефона читаете... :)
          Ответить
    • топик можно считать закрытым, только вот последний вопрос:
      почему индуссы? они что, этоссут делают особенно, по-индусски?
      Ответить

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