Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Быдлокод? (http://www.flasher.ru/forum/showthread.php?t=146816)

orcpochta 18.11.2010 17:22

Быдлокод?
 
Полный пример:

Код AS3:

var xml:XML = <LOCATIONS>
        <LOCATION ID = "1" STATUS = "OPEN" />
        <LOCATION ID = "2" STATUS = "CLOSE" />
        <LOCATION ID = "3" STATUS = "OPEN" />
        <LOCATION ID = "4" STATUS = "CLOSE" />
        <LOCATION ID = "5" STATUS = "OPEN" />
</LOCATIONS>;
 
var openLocationsID:Vector.<uint> = new Vector.<uint>();
 
xml.*.(@STATUS == "OPEN" && openLocationsID.push(@ID));
 
trace(openLocationsID);
 
//#################################
 
//Output: 1,3,5

Вот эта строчка добавляет в вектор id открытых локаций:

Код AS3:

xml.*.(@STATUS == "OPEN" && openLocationsID.push(@ID));

- быдлокод?)))

i.o. 18.11.2010 18:24

- нет.

orcpochta 18.11.2010 18:38

Цитата:

Сообщение от i.o. (Сообщение 950683)
- нет.

обоснуйте свою точку зрения, пожалуйста))

С одной стороны выборка и занесение в вектор происходит за один проход без дальнейшей пробежки по XMLList-у с целью закладки результатов фильтрации в вектор, что благоприятно влияет на производительность, но с другой стороны код тяжелочитаем и на первый взгляд не очевиден, да и вообще как-то через костыли получилось)))

i.o. 18.11.2010 19:14

e4x фильтр это называется, а не костыли)

Котяра 18.11.2010 22:11

Я вообще считаю e4x очень быдлокодным в принципе, но он сокращает запись и в чём-то удобен - остаётся только привыкнуть).
Минус его в абсолютной неООПности, т.к. выражения очень зависят от структуры конкретного XML.
А RegExp вообще брэйнфак, но бывает очень нужен.

orcpochta 18.11.2010 23:19

Цитата:

Сообщение от i.o. (Сообщение 950695)
e4x фильтр это называется, а не костыли)

Костыли в том смысле, что у нас есть выражение @STATUS == "OPEN", по которому производится фильтрация в фильтрующем операторе "()".
К этому выражению добавляется вызов ф-ии, которая никоим боком не относится к фильтрации и возвращаемый ею результат тоже не имеет отношения к фильтрации. Более того, добавляется этот вызов с помощью "логического И", что должно под собой подразумевать фильтрационную осмысленность происходящего, а вот нет...
Т.е. с точки зрения здравого смысла и логики - это полнейший маразм и совершеннейший быдлокод, но зато в один проход и одну строчку)))

Добавлено через 6 минут
Цитата:

Сообщение от Котяра (Сообщение 950763)
Минус его в абсолютной неООПности, т.к. выражения очень зависят от структуры конкретного XML.

Мне кажется он гораздо менее привязан к структуре, чем DOM-овский вариант из AS2, и как-то более абстрактен, что ли...)))

Добавлено через 10 минут
Хотя вы наверно имеете в виду его привязку к именам, а не к структурному скелету, про которую я подумал)))

iNils 20.11.2010 11:14

Если с проверками, то так
Код AS3:

var xml:XML = <LOCATIONS>
        <LOCATION ID = "1" STATUS = "OPEN" />
        <LOCATION ID = "2" STATUS = "CLOSE" />
        <LOCATION STATUS = "OPEN" />
        <LOCATION ID = "4" STATUS = "CLOSE" />
        <LOCATION ID = "5" STATUS = "OPEN" />
        <LOCATION ID = "6"  />
</LOCATIONS>;
 
var openLocationsID:Vector.<uint> = new Vector.<uint>();
xml.*.(hasOwnProperty ("@ID") && hasOwnProperty ("@STATUS") && @STATUS == "OPEN" && openLocationsID.push(@ID));
 
trace (openLocationsID);


f.g.programmer 20.11.2010 13:55

А если нужно будет брать из LOCATION ещё какую-то информацию?
Этот код не читаем (антисоциальный, бескультурный) и крайне не гибкий (грубый, неотёсанный). Его вполне можно назвать быдлокодом.

iNils 20.11.2010 14:05

Цитата:

А если нужно будет брать из LOCATION ещё какую-то информацию?
А если не нужно? Что вы придумываете? Код пишется исходя из задачи. Код вполне читаемый. Гибкий? Гибкость кода определяется не одной строчкой, а набором решаемых задач блоком кода.

f.g.programmer 20.11.2010 17:42

Цитата:

А если не нужно? Что вы придумываете? Код пишется исходя из задачи. Код вполне читаемый. Гибкий? Гибкость кода определяется не одной строчкой, а набором решаемых задач блоком кода.
Пожалуй верно, по одной строчке нельзя судить о коде в целом. Под читаемостью кода вроде как понимается лёгкость его восприятия, а не то, что мы знаем символы из которых он состоит.
Кроме того такая запись
Код:

<LOCATION ID = "5" STATUS = "OPEN" />
подразумевает, что статусов может быть больше двух, а значит в коде может быть существует такая строчка
Код AS3:

xml.*.(@STATUS == "CLOSE" && closeLocationsID.push(@ID));

и, соответственно, подобные для каждого статуса.
Может быть я конечно переборщил с телепатией, но в целом это кажется признаком не очень хорошего стиля.


Часовой пояс GMT +4, время: 07:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.