"PHP" / Говнокод #7205 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
private function _moveIndexes($filters,$int){
		$count = count($filters);
		for($i=2;$i<$count;$i++ ){
			$filters[$i]["filter"]["index"] += $int;
		}
		return $filters;
	}

	private function _removeDefaultFilters(){
		$this->data["Data"]["filters"] = $this->_moveIndexes($this->data["Data"]["filters"],-2);

		$count = count($this->data["Data"]["filters"]);
		for($i=0;$i<$count-2;$i++){
			$this->data["Data"]["filters"][$i] = $this->data["Data"]["filters"][$i+2];
		}
		array_pop($this->data["Data"]["filters"]);
		array_pop($this->data["Data"]["filters"]);
	}

Такой вот код... Ни строчки пояснений к нему не прилагается.
Метод "_removeDefaultFilters()", а в коде сплошная магия.

Почему в for() $count-2??? А внутри цикла [$i+2]...
В другом же for() $i=2???
В вызове _moveIndexes() второй параметр -2 (минус 2) и это значение внутри фнкции плюсуется!
Вдовершение всего двойной вызов array_pop()...
И всё это покрыто тайной мрака.

Запостил: zabuhailo zabuhailo, (Updated )

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

  • Да, так говнокод и пишется. Ой, с count-1 ошибка вылезает! Поставим count-2. Хм, теперь в другом месте не сходится - поставим $i+2. Хм, теперь в конце не то остается, поставим array_pop. Нет, лучше два.
    Ответить
  • $this->data["Data"]["filters"] — список фильтров. Первые 2 — фильтры «по умолчанию». В _removeDefaultFilters они удаляются. Для этого массив сдвигается на -2, два последних элемента удаляются. $this->data["Data"]["filters"][$i]["filter"]["index"] — индекс фильтра в этом массиве, должен быть равен $i, это корректируется в _moveIndexes.

    Всё очевидно и ясно. Не так ли?
    Ответить
    • ага, очевидно. Очевидно будет весело, если несколько раз вызвать
      Ответить
          • Э-э-э, нет, комментарии нарушат первозданную чистоту кода.

            На самом деле приватность метода даёт шанс надеяться, что эта гарантия обеспечивается по месту вызова и извне не всё так страшно. Но небольшой.
            Ответить
    • Оно конечно... но это ведь и есть говнокод. Это говнокод проектного уровня.
      >> Первые 2 — фильтры «по умолчанию».
      Это вот оно и есть. Сегодня их два, завтра один - залезай поколено в код и правь руками...
      Опять же, на чём основано соглашение о "первых"... тоже сильно пахнет.
      Ещё. Конкретное значение индексов не должно никого волновать, важно их отношение между собой.
      Код не очевиден. К тому же избыточен (и тратит машинный ресурс за зря)

      Ах, да... модификатор private это я дописал, собственно код опирался на соглашение что имена методов начинающиеся с '_' указывают на приватность метода. Тем не менее в проекте часто такие имена вызываются извне.

      За такой код нужно увольнять с требованием вернуть все зарплатные выплаты. (Это я ещё и под эффектом от остального кода проекта) 🙂
      Ответить
      • Вопрос был саркастический.

        Код-то как бы может и работающий (в определённых условиях), и логика какая-то есть, но писан марсианами. Вызывает улыбку, пока не приходится с ним работать. Нам смешно, а вам сочувствую.
        Ответить
        • Спасибо за сочувствие. 🙂
          Полагаю и вы тут не случайно оказались... )
          Ответить

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

Из-за тебя ушел bormand, guest!

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


    8