1. ActionScript / Говнокод #12780

    −92

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    public function removeActionsOf(controller:InputController):void
    {
    	var i:String;
    	for (i in _actions)
    		if (_actions[i].controller == controller)
    			_actions.splice(uint(i), 1);
    }

    CitrusEngine citrus.input.Input.as 245 строка
    зы
    на самом деле там дохуя такого, это просто первое попалось на глаза

    Запостил: slavara, 21 Марта 2013

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

    • Ну обычный for(;;) был бы лучше, или Array.filter - но тут не совсем понятно, сколько раз может выполнятся условие, хотя, судя по множественному числу в названии функции - наверное больше одного раза. splice может быть оправдан, если этот массив куда-то по ссылке отдавали, и принципиально сохранить ссылку... тоже не факт, конечно, возможно, что скопировать все оставшиеся элементы в новый массив, а потом их всех разом вставить в предварительно очищеный исходный массив было бы лучше, но скорее всего выгода не была бы ощутимой, даже если...
      Т.е. ну ничего смертельного вроде...
      Ответить
      • да ну смертельного то ничего, _actions, это вектор, локальная переменная, все "обходы" _actions в этом классе, сделаны через for in..
        Ответить
        • Хотя, если подумать, то если filer нормально реализована - то должна быть лучше многократного splice. А даже если нет, то самому можно было бы лучше сделать, типа, например:

          for (var i:int, j:int = _actions.length - 1, temp:Object; i <= j;) {
              temp = actions[i];
              if (temp.controller == controller) {
                  actions[i] = _actions[j];
                  actions[j] = temp;
                  j--;
              } else {
                  i++;
              }
              _actions.length = i;
          Ответить

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