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

    −86

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    for (i = 0; i < 3; i++) {
        if (smth) {
         blnCardValue = true;
         i = 4;
        }
       }

    клевый способ выйти из цикла

    dimas_art, 29 Апреля 2010

    Комментарии (105)
  2. ActionScript / Говнокод #3063

    −88

    1. 1
    2. 2
    frmt = ("ISSUE" == "ISSUE") ? "@m-@yy" : "@dd-@m";
    frmt = ("ISSUE" == "ISSUE") ? "@m-@yy" : "@dd-@m";

    И не дают мне уснуть эти 2 строки. Наверное 2, чтобы наверняка, но вот условие я даже не знаю как интерпретировать Х_х

    dimas_art, 21 Апреля 2010

    Комментарии (3)
  3. ActionScript / Говнокод #3051

    −180.6

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    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]);
                }
            }
        }
    }

    Lavir_the_Whiolet, 19 Апреля 2010

    Комментарии (50)
  4. ActionScript / Говнокод #3012

    −189.8

    1. 1
    public static var FontSize14 : uint = 14;

    Вот так люди во Flex определяют размер шрифта :) CSS нам не по чем....

    dimas_art, 15 Апреля 2010

    Комментарии (16)
  5. ActionScript / Говнокод #2839

    −88

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    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 {
    			}
    		}

    Хотел посмотреть, как реализована логика в старом коде и нашел вот это...

    -=Deus=-, 22 Марта 2010

    Комментарии (2)
  6. ActionScript / Говнокод #2689

    −186.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    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)

    Но булевые переменные, они ж такие коварные :)

    wvxvw, 27 Февраля 2010

    Комментарии (8)
  7. ActionScript / Говнокод #2557

    −184.5

    1. 1
    2. 2
    3. 3
    4. 4
    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();

    wvxvw, 05 Февраля 2010

    Комментарии (5)
  8. ActionScript / Говнокод #2394

    −433.5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    [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;

    Делаю код ревью и рефакторинг в одном старом коде, вот на что нарвался и выпал в даун )

    dimas_art, 11 Января 2010

    Комментарии (8)
  9. ActionScript / Говнокод #2386

    −190.8

    1. 1
    2. 2
    3. 3
    4. 4
    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, и компилятор не умеет делать оптимизации для таких случаев.

    wvxvw, 08 Января 2010

    Комментарии (5)
  10. ActionScript / Говнокод #2130

    −90.1

    1. 1
    var data_xml: XML = <data>{ new XML('<!' + '[CDATA[' + remote_data + ']]' + '>') }</data>

    Примерно вот так в MXML предлагается запихивать данные внутрь CDATA. Новый объект XML чтобы обойти баг во флексе, а XSS подобное разбиение строк, чтобы Flex Builder не подумал, что ]]> закрывает CDATA вокруг Script

    sudden_def, 11 Ноября 2009

    Комментарии (7)