- 1
- 2
- 3
- 4
- 5
- 6
for (i = 0; i < 3; i++) {
if (smth) {
blnCardValue = true;
i = 4;
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−86
for (i = 0; i < 3; i++) {
if (smth) {
blnCardValue = true;
i = 4;
}
}
клевый способ выйти из цикла
−88
frmt = ("ISSUE" == "ISSUE") ? "@m-@yy" : "@dd-@m";
frmt = ("ISSUE" == "ISSUE") ? "@m-@yy" : "@dd-@m";
И не дают мне уснуть эти 2 строки. Наверное 2, чтобы наверняка, но вот условие я даже не знаю как интерпретировать Х_х
−180.6
package org.casalib.util {
/**
Utilities for constructing and working with Classes.
@author Aaron Clinger
@version 02/13/10
*/
public class ClassUtil {
/**
Dynamically constructs a Class.
@param type: The Class to create.
@param arguments: Up to ten arguments to the constructor.
@return Returns the dynamically created instance of the Class specified by <code>type</code> parameter.
@throws Error if you pass more arguments than this method accepts (accepts ten or less).
@example
<code>
var bData:* = ClassUtil.construct(BitmapData, 200, 200);
trace(bData is BitmapData, bData.width);
</code>
*/
public static function construct(type:Class, ...arguments):* {
if (arguments.length > 10)
throw new Error('You have passed more arguments than the "construct" method accepts (accepts ten or less).');
switch (arguments.length) {
case 0 :
return new type();
case 1 :
return new type(arguments[0]);
case 2 :
return new type(arguments[0], arguments[1]);
case 3 :
return new type(arguments[0], arguments[1], arguments[2]);
case 4 :
return new type(arguments[0], arguments[1], arguments[2], arguments[3]);
case 5 :
return new type(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
case 6 :
return new type(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
case 7 :
return new type(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]);
case 8 :
return new type(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]);
case 9 :
return new type(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]);
case 10 :
return new type(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9]);
}
}
}
}
−189.8
public static var FontSize14 : uint = 14;
Вот так люди во Flex определяют размер шрифта :) CSS нам не по чем....
−88
if (_root["currKeyState"] == 3 and _root["currKeyStateCaps"] == "off") {
_root["currKeyState"] = 1;
if ("titleNewRec" == _root["currentInput"] or "msgText" == _root["currentInput"] or "prvSearchStr" == _root["currentInput"] or "mdengiId" == _root["currentInput"] or "fio" == _root["currentInput"] or "alfabplace" == _root["currentInput"] or "commut" == _root["currentInput"]) {
} else {
}
} else if (_root["currKeyState"] == 4 and _root["currKeyStateCaps"] == "off") {
_root["currKeyState"] = 2;
if ("titleNewRec" == _root["currentInput"] or "msgText" == _root["currentInput"] or "prvSearchStr" == _root["currentInput"] or "mdengiId" == _root["currentInput"] or "fio" == _root["currentInput"] or "alfabplace" == _root["currentInput"] or "commut" == _root["currentInput"]) {
} else {
}
}
Хотел посмотреть, как реализована логика в старом коде и нашел вот это...
−186.1
var topItem:Object;
var rowNum:int;
var rowCount:int;
...
else if (!topItem && !rowNum == rowCount)
...
Чтобы не утомлять вас догадками, во что же это превратится и в каком порядке произойдут операции: это условие выполниться только когда:
topItem == null
rowNum != 0
rowCount == 0
Как следует из названий переменных, человек, написавший это ожидал, что количество строк может быть меньше, чем порядковый номер одной из строк...
Взято, опять же из Flex Framework mx.controls::Tree.
Скорее всего автор имел в виду следующее:
else if (!topItem && rowNum !== rowCount)
−184.5
override public function toString():String
{
return Object(container).toString() + "." + super.toString();
}
Еще одно украшение Флексового фреймворка: mx.core::Repeater.
Для тех, кто не в курсе: toString() вызываетйса автоматически когда мы пытаемся вывести информацию об объекте в консоль. (Т.е. жизненно необходим для тестирования). Свойство container у репитера радко, но может буть null, но изза того, что флексовые разработчики не категорически никогда не кастуют ничего, то это должно было бы выкинуть исключение, но, конвертация используемая в примере (вместо каста) в силу особенностей языка вместо того чтобы просто умереть с исключением создаст новый динамический объект, врезультате получим что-то типа:
"[Object object].имяКомпонента".
т.е. на самом деле код должен был выглядеть примерно так:
return (this.container ? this.container.toString() + "." : "") + super.toString();
−433.5
[1:02:57] Dmitriy Artemyev: if (s == rb.getString('pricesForm.oneAdult'))
((((p.getChildAt(0) as HBox).getChildAt(0) as Form).getChildAt(0) as FormItem).getChildAt(0) as NumericTextInput).value = newS;
if (s == rb.getString('pricesForm.twoAdults'))
((((p.getChildAt(0) as HBox).getChildAt(0) as Form).getChildAt(1) as FormItem).getChildAt(0) as NumericTextInput).value = newS;
if (s == rb.getString('pricesForm.extraAdultMarkup'))
((((p.getChildAt(0) as HBox).getChildAt(0) as Form).getChildAt(2) as FormItem).getChildAt(0) as NumericTextInput).value = newS;
if (s == rb.getString('pricesForm.children') + model.hotelsModule.hotelTotalInfo.iChildAge1)
((((p.getChildAt(0) as HBox).getChildAt(1) as Form).getChildAt(0) as FormItem).getChildAt(0) as NumericTextInput).value = newS;
if (s == rb.getString('pricesForm.children') + model.hotelsModule.hotelTotalInfo.iChildAge2)
((((p.getChildAt(0) as HBox).getChildAt(1) as Form).getChildAt(1) as FormItem).getChildAt(0) as NumericTextInput).value = newS;
if (s == rb.getString('pricesForm.children') + model.hotelsModule.hotelTotalInfo.iChildAge3)
((((p.getChildAt(0) as HBox).getChildAt(1) as Form).getChildAt(2) as FormItem).getChildAt(0) as NumericTextInput).value = newS;
Делаю код ревью и рефакторинг в одном старом коде, вот на что нарвался и выпал в даун )
−190.8
if (flash.net.getClassByAlias("foo.bar.VO") == null){
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO);}
} catch (e:Error) {
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO); }
Так во флексовом фреймворке регистрируются алиасы для RPC классов... Нелогичность ситуации не сразу очевидна, поэтому опишу:
При загрузке модулей может возникнуть ситуация, когда алиас уже зарегистрирован для другого класса, поэтому нужно проверить, а не был ли алиас зарегистрирован раньше. Иначе, его нужно зарегистрировать. Исторически, этой проверки сначала не было, данный код - это фикс вышеописаной проблемы. Пытаясь разобраться, что же все-таки случилось - скорее всего "писатель" не подозревал, что getClassByAlias() не может вернуть null - а выяснил он это, когда код вывалился с ошибкой, вот он не долго думая завернул это все в try-catch...
Из мелких деталей: в рамках AS3 сравнение сложных типов с null - бессмысленная, и более того вредная операция, т.как выражение в условии всегда кастуется к Boolean, и компилятор не умеет делать оптимизации для таких случаев.
−90.1
var data_xml: XML = <data>{ new XML('<!' + '[CDATA[' + remote_data + ']]' + '>') }</data>
Примерно вот так в MXML предлагается запихивать данные внутрь CDATA. Новый объект XML чтобы обойти баг во флексе, а XSS подобное разбиение строк, чтобы Flex Builder не подумал, что ]]> закрывает CDATA вокруг Script