ДействиеСценарий / Говнокод #2557 Ссылка на оригинал

0

  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 wvxvw, (Updated )

Комментарии (5, +5)

ДействиеСценарий / Говнокод #2394 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 dimas_art, (Updated )

Комментарии (8, +8)

ДействиеСценарий / Говнокод #2386 Ссылка на оригинал

0

  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 wvxvw, (Updated )

Комментарии (5, +5)

ДействиеСценарий / Говнокод #2130 Ссылка на оригинал

0

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

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

sudden_def sudden_def, (Updated )

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

ДействиеСценарий / Говнокод #2052 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
if (currentPage == "3") {
	//trace("CUUUUUUURRRRRRREEEENNNNNTTTT PPPAAAAGGGGGGGGGEEEEEE", currentPage,currentQuestionVideo);
	ns.play(currentQuestionVideo);
}else {
	//trace("ПИЗДАБЛЯТЬ!")
	var str:String = ""+subSectionsXML.DOCUMENT[currentSubPage].FILE_1;
	ns.play(str);
}

Мне дали AS3-сайт для его локализации и сказали, что код документирован.
Комментарии оказались только в виде trace'ов :)

mustafin mustafin, (Updated )

Комментарии (17, +17)

ДействиеСценарий / Говнокод #2047 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
this.thumbHolder._x = suma;
		
suma = suma + parseInt(this.picHolder.attributes.w);
if ((i==11)|| (i==12)|| (i==13)|| (i==14)|| (i==17)|| (i==18)|| (i==19)|| (i==20)|| (i==22)|| (i==23)|| (i==24)|| (i==25)|| (i==26)|| (i==28))
{
    suma = suma + 10;
}
		
/*
 if (i==2)suma=suma+99;
 if (i==5)suma=suma+121;
 if (i==8)suma=suma+155;
 if (i==13)suma=suma+200;
*/

Коллега бьется головой в монитор - обнаружил в исходниках чужой флешки.

Стопицот, стопицот, это много или мало...

stan stan, (Updated )

Комментарии (8, +8)

ДействиеСценарий / Говнокод #1861 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
function getActiveRoot():int
{
	for(var c:int=0;c<i;c++) if(r_arr[c].isActive) return c;
	return -1;
}





public function addEntry():void
{
	if(getActiveRoot()<0)
	{
		r_arr.push(new Roots(i,in_txt.text,""));
		r_arr[i].addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
		r_arr[i].addEventListener(MouseEvent.MOUSE_UP, upHandler);
				
		addChild(r_arr[i++]);
	}
	else
	{
	        r_arr[getActiveRoot()].w_arr.push(new Words(getActiveRoot(),r_arr[getActiveRoot()].wi,in_txt.text,""));
		r_arr[getActiveRoot()].w_arr[r_arr[getActiveRoot()].wi].addEventListener(MouseEvent.MOUSE_DOWN, WdownHandler);
		r_arr[getActiveRoot()].w_arr[r_arr[getActiveRoot()].wi].addEventListener(MouseEvent.MOUSE_UP, WupHandler);
				
		var ls:Shape=new Shape();
		ls.graphics.lineStyle(1, 0xFF0000,0.2);
		ls.graphics.moveTo(r_arr[getActiveRoot()].x,r_arr[getActiveRoot()].y);
	        ls.graphics.lineTo(r_arr[getActiveRoot()].w_arr[r_arr[getActiveRoot()].wi].x,r_arr[getActiveRoot()].w_arr[r_arr[getActiveRoot()].wi].y);
		addChildAt(ls,++wd);
		addChildAt(r_arr[getActiveRoot()].w_arr[r_arr[getActiveRoot()].wi++],++wd);
	}
}

Ой. А давайте проц погоняем! Чтоб не скучал. Отовсюду будем запускать getActiveRoot() чтобы узнать индекс! Ха-ха-ха..

t8apb t8apb, (Updated )

Комментарии (6, +6)

ДействиеСценарий / Говнокод #1860 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
function upHandler(event:MouseEvent):void 
{
        //r_arr[event.currentTarget.index].stopDrag();
				
	event.currentTarget.stopDrag();
				
        //r_arr[event.currentTarget.index].removeChildAt(2);

	if((r_arr[event.currentTarget.index].x>550)||(r_arr[event.currentTarget.index].x<160)||(r_arr[event.currentTarget.index].y>400)||(r_arr[event.currentTarget.index].y<0))
	{
	        r_arr[event.currentTarget.index].x=546;
		r_arr[event.currentTarget.index].y=(r_arr[event.currentTarget.index].index+1)*30;
	}
}

Сама семантика малопримечательна. Вся соль в способе адресации к объекту массива r_arr при совершении события мыши прямо над этим же объектом. Методы и свойства объекта достаются через ***у по индексу из-за пазухи: r_arr[event.currentTarget.index].removeChildAt(2)
вместо достаточного: event.currentTarget.removeChildAt(2)

t8apb t8apb, (Updated )

Комментарии (1, +1)

ДействиеСценарий / Говнокод #1720 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
//-------------------РИСОВАНИЕ и МАТЕМАТИКА--------------------------------
//Рендерить сцену
_root.onEnterFrame = render;

//Функция отрисовки текущего положения
function render()
{
	if (enable_anim)		//Рисовать только ЕСЛИ разрешена анимация, т.е. файл загружен
	{
		empty.clear();		//Очистка области для рисования
		for (obj in arr_m)	//Пройтись по всем элементам кинематической схемы
		{
			switch(arr_m[obj].type){
				case "crank":  /*type="0" l="50" angle="0" s0="2" s1="1"*/
					//Кривошип
					//trace(arr_m[obj].type);
					//trace(arr_m[obj].num + " " + arr_m[obj].angle);
					empty["arr_o"+arr_m[obj].s1]._x = empty["arr_o"+arr_m[obj].s0]._x +arr_m[obj].l*Math.cos(arr_m[obj].angle*k);
					empty["arr_o"+arr_m[obj].s1]._y = empty["arr_o"+arr_m[obj].s0]._y +arr_m[obj].l*Math.sin(arr_m[obj].angle*k);
					
					if (enable_dv) //------------------------Движение звена разрешено-------
					{
						arr_m[obj].angle += 0.3; 
						if (arr_m[obj].angle >= 360)
						{ 
							arr_m[obj].angle = 0;
						}
					}
						
					//Невидимка
					if(arr_m[obj].hidden) continue;					
					empty.lineStyle(2,0x404040);					empty.moveTo(empty["arr_o"+arr_m[obj].s0]._x,empty["arr_o"+arr_m[obj].s0]._y);
					empty.lineTo(empty["arr_o"+arr_m[obj].s1]._x,empty["arr_o"+arr_m[obj].s1]._y);
				break;
				case "1":  /*type="1" l1="100" l2="100" s0="2" s1="3" s2="4"*/
					//шатун + коромысло
					//trace(arr_m[obj].type);
					
					var x0 = empty["arr_o"+arr_m[obj].s0]._x;
					var y0 = empty["arr_o"+arr_m[obj].s0]._y;
					var x1 = empty["arr_o"+arr_m[obj].s1]._x;
					var y1 = empty["arr_o"+arr_m[obj].s1]._y;
					
					var r = distance(x0, y0, x1, y1);
					var a0 = Math.acos((Math.pow(arr_m[obj].l1,2) + Math.pow(r,2) - Math.pow(arr_m[obj].l2,2))/(2*arr_m[obj].l1*r));
					var a1 = get_angle(x0, y0, x1, y1); 
					
					var x2 = x0 + arr_m[obj].l1 * Math.cos(a1 - a0);
					var y2 = y0 + arr_m[obj].l1 * Math.sin(a1 - a0);
					//trace(a1/k);
					
					empty["arr_o"+arr_m[obj].s2]._x = x2;
					empty["arr_o"+arr_m[obj].s2]._y = y2;
					
					//Невидимка
					if(arr_m[obj].hidden) continue;
					
					empty.lineStyle(2,0x404040);
					empty.moveTo(x0,y0);
					empty.lineTo(x2,y2);
					empty.lineTo(x1,y1);					
				break;
//... Тут еще очень много таких кейсов
		}
	}
}

Давненько писал на симулятор механический, это функция апдейта всех элементов.
Что в остальном коде, догадаться несложно.

Werdn Werdn, (Updated )

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

ДействиеСценарий / Говнокод #1569 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
public function showNotAvailableAlert(str:String):void
{
	var defString:String = str = "Connection with server is lost. Unfortunately you can not continue now. Please try later.";
	if(str)
	{
		Alert.show(str, "Not connected to server");
	}
	else
	{
		Alert.show(defString, "Not connected to server");
	}
}

Kuros Kuros, (Updated )

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