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

    −124

    1. 1
    var allInteractiveItems : Array = ItemSearchHelper.join(ItemSearchHelper.join(ItemSearchHelper.sortById(_worldInfo.itemsInteractive), ItemSearchHelper.sortById(GameInfo.instance.items)), ItemSearchHelper.sortById(GameInfo.instance.itemsInteractive)).concat(ItemSearchHelper.sortById(_worldInfo.items));

    Оптимизнула к концу рабочего дня...

    Запостил: kyzi007, 19 Апреля 2012

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

    • последствия автоматического рефакторинга\инлайна? )
      Ответить
      • Да нет, руками...
        Дело еще в том что так спрятался офигенно хитрый фортель со слиянием инфы.
        Ответить
        • > Да нет, руками...
          шаловливые ручки... за такое их линейкой надо

          я, конечно, люблю инлайн без промежуточных результатов, но тут пока проскроллишь до конца, запутаешься в скобочках, с кем у них джойн, кого конкатят, перед этим отсортировав по ИДу...
          Ответить
          • >люблю инлайн без промежуточных результатов, но тут пока проскроллишь до конца
            Так код нормально надо форматировать.
            И я не знаю какие есть импорты в AS.
            Но тут уж точно слишком много ItemSearchHelper и какой-нить import static совсем не будет лишним.

            var allInteractiveItems : Array = ItemSearchHelper.join(ItemSearchHelper.join(
            	ItemSearchHelper.sortById(_worldInfo.itemsInteractive),
                    ItemSearchHelper.sortById(GameInfo.instance.items)),
             	ItemSearchHelper.sortById(GameInfo.instance.itemsInteractive)
            ).concat(
            	ItemSearchHelper.sortById(_worldInfo.items)
            );

            Поэтому ограничение терминалов в 80 строк очень верное.
            Ответить
            • а вот так действительно понятнее, спасибо

              > Поэтому ограничение терминалов в 80 строк очень верное.
              это чтобы на рулоне умещалось в эпоху 16:9 число может быть и 120
              Ответить
            • Статических импортов нет, но можно было сделать так:
              var sortBy:Function = ItemSearchHelper.sortById;
              var allInteractiveItems : Array = ItemSearchHelper.join(ItemSearchHelper.join(
              	sortById(_worldInfo.itemsInteractive),
                      sortById(GameInfo.instance.items)),
               	sortById(GameInfo.instance.itemsInteractive)
              ).concat(
              	sortById(_worldInfo.items)
              );

              Или, если хотелось еще короче и без потери типизации:

              var allInteractiveItems:Array;
              with (ItemSearchHelper)
              {
                  with (GameInfo.instance)
                  {
                      allInteractiveItems =
              	    join(join(sortById(_worldInfo.itemsInteractive),
              	    sortById(items),
              	    sortById(itemsInteractive).concat(_worldInfo.items));
                  }
              }

              Но это чревато неразберихой с областями видимости.

              Но, что-то мне подсказывает, что:

              var allInteractiveItems:Array =
                  [_worldInfo.itemsInteractive,
                  GameInfo.instance.items,
                  GameInfo.instance.itemsInteractive,
                  _worldInfo.items];
              for each (var array:Array in allInteractiveItems)
                  ItemSearchHelper.sortById(array);

              Делало бы то же самое. Потому, что есть подозрение, что join и concat делают одно и то же, а от повторного вызова join скорее всего ничего не меняется :)
              Ответить
              • >var sortBy:Function = ItemSearchHelper.sortById;
                Так это гораздо лучше чем импорты.

                >Но, что-то мне подсказывает, что:
                Тоже так подумалось, когда форматнул его. Но не забывай - они любят одной строкой.
                for each (var array:Array in [
                	_worldInfo.itemsInteractive,
                	GameInfo.instance.items,
                	GameInfo.instance.itemsInteractive,
                	_worldInfo.items
                ]) ItemSearchHelper.sortById(array);
                Ответить
              • Нет, в тех массивах автогенеренные из протокола валидаторы json и при слиянии из второго массива подтягиваются такие же элементы и сливаются.
                Это все сцуко серверная оптимизация - одни и те же данные приходят в трех фазах - статический файл который не генерится, кешируется и динамически гонится рантайм по сокету.
                Поэтому я и говорю что там хитрый фортель.
                Ответить
                • Написала и сама себя не поняла )
                  1 пак инфы - статика.
                  2 - кеш.
                  3 - динамика.
                  Собственно формируется информация для отрисовки сцены (игра, да).
                  Ответить
    • А можно перед постингом сюда разбить код на строки?
      Ответить
    • показать все, что скрытокстати гет, ас3 №200

      передай в фриланс чат что [email protected] ищет разрабов флеш игр
      Ответить

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