Flex/AIR/AS3/Etc2010.12.29 16:31
CMD 모드에서 가끔 AIR 패키지 파일을 만든다거나 할때 오류 내용이 한글로 나와서 깨진 문자 처럼 표시되는 경우가 있습니다. 이럴경우 CMD창에서 chcp command를 사용하여 한글 모드로 바꿔 주셔야 합니다.

chcp 949

(한글모드)

chcp 437

(United States)
저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2010.05.14 11:07
Spark Label에서 MX Label에서 사용했던 letterSpacing style 이 사라졌습니다.
글자 간격을 조정하기 위해서는 letterSpacing이 필요한데 이 스타일 속성이 사라져서 글자 간격을 어떻게 설정해야하나 고민하다가 구글링을 하여 예제를 찾아 보았습니다.

http://blog.flexexamples.com/2010/04/05/changing-the-letter-spacing-on-a-spark-button-control-in-flex-4/

역시나 Flex Examples에 예제가 나와 있더군요.
의외로 간격설정하는게 간단합니다. 예제에서는 Button을 예로 들었는데 어차피 Button의 스킨안에 Label이 들어가는 구조라 동일하게 생각하셔도 될것 같습니다.

letterSpacing 대신에 trackingLeft, trackingRight 속성을 사용해서 글자 간격을 조절 하실 수 있습니다.
trackingLeft 는 각 글자의 왼쪽 간격이고 trackingRight 는 각 글자의 오른쪽 간격이라고 생각하시면 됩니다.
솔직히 letterSpacing이 더 편하던데;; 음... 뭐 개인차일 수 있겠죠 ㅋ
저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2010.04.28 00:17

Flex4에서 변경된 부분 중 하나인 Declarations 데크레이션? 디크레이션? 음;; 하여간 이놈이 처음 나왔을때 과연 이놈이 뭐하는 놈인가 무지하게 궁금했습니다;; 물론, 설명이 있긴했지만

<!-- Place non-visual elements (e.g., services, value objects) here -->

위 설명으로 보면 서비스들이랑 vo 같은 non-visual elements를 코딩하는 곳이라는 건 알겠는데 실제 프로젝트에서 서비스랑 vo를 보통 클래스로 빼서 쓰기 때문에 크게 사용할 일이 없지 않을까 하는 생각이 들었습니다. 뭐 effect나 그런것만 정의하면 되지 않을까하는 생각이었는데 오늘 Cairngorm 프레임워크를 사용하다가 재미있는 사실을 알았습니다. 물론, 이미 알고 계신분들도 많겠지만 전 나름대로 신선한 느낌이었습니다;; 저만 그럴지도;;

오늘 사용해 보고 사용자 콤포넌트를 만들때 속성을 바로 이곳에서 컨트롤할 수 있다는걸 깨달았습니다. 음... 쉽게 설명하기 위해 일단 예제를 하나 만들어 보겠습니다.

우선 간단한 버튼이 3개있는 콤포넌트를 만들어 보았습니다.

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
   xmlns:s="library://ns.adobe.com/flex/spark"
   xmlns:mx="library://ns.adobe.com/flex/mx" width="248" height="64">
 <fx:Declarations>
  <!-- Place non-visual elements (e.g., services, value objects) here -->
  <fx:Boolean id="button1Visible">true</fx:Boolean>
  <fx:Boolean id="button2Visible">true</fx:Boolean>
  <fx:Boolean id="button3Visible">true</fx:Boolean>
  <fx:uint id="button1Color">#000000</fx:uint>
  <fx:uint id="button2Color">#000000</fx:uint>
  <fx:uint id="button3Color">#000000</fx:uint>
 </fx:Declarations>
 <s:Label x="10" y="10" text="Custom Component" fontWeight="bold"/>
 <s:Button x="10" y="30" label="버튼1" visible="{button1Visible}" color="{button1Color}"/>
 <s:Button x="88" y="30" label="버튼2" visible="{button2Visible}" color="{button2Color}"/>
 <s:Button x="166" y="30" label="버튼3" visible="{button3Visible}" color="{button3Color}"/>
</s:Group>




음... 참 간단한 콤포넌트입니다 ㅋ;;
위 콤포넌트 처럼 Declarations에 Boolean, uint 등의 변수를 Flex 태그로 만들 수가 있습니다.

위 예제만 보더라도 어느 정도 이해하실 분들도 있겠지만 이제 저걸 어떻게 사용할지 보도록하겠습니다.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx"
      xmlns:component="*" width="270" height="85">
 <fx:Declarations>
  <!-- Place non-visual elements (e.g., services, value objects) here -->
 </fx:Declarations>
 <component:testComponent x="10" y="10"
        button1Color="#586421"
        button3Color="#A49F21"
        button2Visible="false">
 </component:testComponent>
</s:Application>




위 그림처럼 콤포넌트에서 만든 속성을 바로 사용할 수 있습니다.

이렇게 만들면 액션스크립트 없이도 간단한 속성은 바로 만들 수 있습니다. 나름 편리한것 같기도 ^^;


저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2010.04.13 22:38


플렉스 컴포넌트에서 열이아빠님이 올려놓으신 "플렉스 4 한글화 프로젝트" 글을 보고 공부도할겸 Flex4 문서 한글화 프로젝트에 참여하게 되었습니다 ^^; 영어나 일어를 잘하는편이 아니라서 제대로 번역이 될런지 걱정스럽긴 하지만 최대한 직역이 아닌 의역을 할려고 노력중입니다. ㅎㅎ

아직, 프로젝트에 참여 인원을 계속 모집하고 계신다니 관심 있으신분들은 얼렁얼렁 참여하세요~

현재 한 1/12 정도 작성이 되었다고 하지만 프로젝트 참여하시는 분들이 점점 늘어나는걸 보니 조만간 완성되지 않을까 싶네요 ^^;;

Flex4의 한글화 문서에 관한 정보를 원하시는 분들은 하단 링크를 참조하여주세요~


저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2010.01.14 20:38

Flex4 Spark Library 에서 Flash Parameter 값을 사용할때 Flex3에서 사용하던 방식과 약간의 차이가 있어 다소 혼란스러웠습니다.
Flex4에서는 Flex3에서와 같이 Application.application.parameters 로 Parameter 값을 받아 오는 것이 아니라 그냥 parameters로 받아 올 수 있습니다. 방식은 더 간편해 졌지만 Flex3에 익숙해져 있으시다면 다소 헷깔릴 수 있습니다.

Flex3
=>

private function getParameter():void
{
  var _parameters:Object = Application.application.parameters;

  if (_parameters.Parameter명)
  {
    trace(_parameters.Parameter명);
  }
}


Flex4 (Spark Library)
=>

private function getParameter():void
{
  var _parameters:Object = parameters;

  if (_parameters.Parameter명)
  {
    trace(_parameters.Parameter명);
  }
}


저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2009.12.07 21:03

Key ASCII Mozilla keycodes IE keycodes Opera keycodes pseudo ASCII codes exceptions
Alphabetic keys
A to Z
97/65 to 122/90 ASCII code of uppercase version of the letter
65 to 90
Space 32 32 32 32 32
Enter 13 13 13 13 13
Tab 9 9 9 9 9
Esc 27 27 27 27 27
Backspace 8 8 8 8 8
Modifier Keys
Key ASCII Mozilla keycodes IE keycodes Opera keycodes pseudo ASCII codes exceptions
Shift - 16 16 16 16 Linux Opera < 9.0: 0
Control - 17 17 17 17 Linux Opera < 9.0: 0
Mac Opera: 0
Alt - 18 18 18 18 Linux Opera < 9.0: 0
Caps Lock - 20 20 20 20 Linux Opera: 0
Num Lock - 144 144 144 144 Linux Opera < 9.50: 0
Win Opera < 9.00: 0
Keyboard Number Keys
Key ASCII Mozilla keycodes IE keycodes Opera keycodes pseudo ASCII codes exceptions
1 ! 49/33 49 49 49 49/33 Mac Gecko < 1.8: 49/0
2 @ 50/64 50 50 50 50/64 Mac Gecko < 1.9: 50/0
3 # 51/35 51 51 51 51/35 Mac Gecko < 1.9: 51/0
4 $ 52/36 52 52 52 52/36 Mac Gecko < 1.9: 52/0
5 % 53/37 53 53 53 53/37 Mac Gecko < 1.9: 53/0
6 ^ 54/94 54 54 54 54/94 Mac Gecko < 1.9: 54/0
7 & 55/38 55 55 55 55/38 Mac Gecko < 1.9: 55/0
8 * 56/42 56 56 56 56/42 Mac Gecko < 1.9: 56/0
9 ( 57/40 57 57 57 57/40 Mac Gecko < 1.9: 57/0
0 ) 48/41 48 48 48 48/41 Mac Gecko < 1.9: 48/0
Symbol Keys
Key ASCII Mozilla keycodes IE keycodes Opera keycodes pseudo ASCII codes exceptions
; : 59/58 59 186 59 59/58 Mac Gecko: 186/0
= + 61/43 61 187 61 61/43 Mac Gecko 1.9: 187/107
Mac Gecko < 1.9: 187/0
, < 44/60 188 188 44 44/60 Mac Gecko: 188/0
- _ 45/95 109 189 45 45/95 Mac Gecko 1.9: 109/0
Mac Gecko < 1.9: 0
. > 46/62 190 190 46 46/62 Mac Gecko: 190/0
/ ? 47/63 191 191 47 47/63 Mac Gecko: 191/0
` ~ 96/126 192 192 96 96/126 Mac Gecko: 126/0
[ { 91/123 219 219 91 91/123
\ | 92/124 220 220 92 92/124 Mac Gecko: 92/0
] } 93/125 221 221 93 93/125
' " 39/34 222 222 39 39/34
Arrow Keys
Key ASCII Mozilla keycodes IE keycodes Opera keycodes pseudo ASCII codes exceptions
left-arrow - 37 37 37 37
up-arrow - 38 38 38 38
right-arrow - 39 39 39 39
down-arrow - 40 40 40 40
Special Keys
Key ASCII Mozilla keycodes IE keycodes Opera keycodes pseudo ASCII codes exceptions
Insert - 45 45 45 45 Konqueror: 0
Opera < 9.0: 0
Delete - 46 46 46 46 Konqueror: 127
Opera < 9.0: 0
Home - 36 36 36 36 Opera < 9.0: 0
End - 35 35 35 35 Opera < 9.0: 0
Page Up - 33 33 33 33
Page Down - 34 34 34 34
Function Keys
F1 to F12
- 112 to 123 112 to 123 112 to 123 112 to 123
Keypad Keys
If Num Lock is on, unshifted/shifted values are returned as shown below. If Num Lock is off, Linux browsers reverse the shifted/unshifted values, while Windows browsers always return the shifted value. None of my Macintoshs have a keypad, so I don't know what they do.
Key ASCII Mozilla keycodes IE keycodes Opera keycodes pseudo ASCII codes exceptions
. Del 46/- 110/46 110/46 78/46 78/46 Opera < 9.0: 78/0
0 Ins 48/- 96/45 96/45 48/45 48/45 Opera < 9.0: 48/0
1 End 49/- 97/35 97/35 49/35 49/35 Opera < 9.0: 49/0
2 down-arrow 50/- 98/40 98/40 50/40 50/40
3 Pg Dn 51/- 99/34 99/34 51/34 51/34
4 left-arrow 52/- 100/37 100/37 52/37 52/37
5 53/- 101/12 101/12 53/12 53/12 Linux Opera: 53/0
6 right-arrow 54/- 102/39 102/39 54/39 54/39
7 Home 55/- 103/36 103/36 55/36 55/36 Opera < 9.0: 55/0
8 up-arrow 56/- 104/38 104/38 56/38 56/38
9 Pg Up 57/- 105/33 105/33 57/33 57/33
+ 43 107 107 43 43
- 45 109 109 45 45
* 42 106 106 42 42
/ 47 111 111 47 47
Keypad Enter 13 13 13 13 13
Branded Keys
Key ASCII Mozilla keycodes IE keycodes Opera keycodes pseudo ASCII codes exceptions
Left Apple Command - 224 ? 17 ? Safari ≥ 3.1: 91
Right Apple Command - 224 ? 17 ? Safari ≥ 3.1: 93
Left Windows Start - 91 91 219 0 Linux Gecko: 0
Right Windows Start - 92 92 220 0 Linux Gecko: 0
Windows Menu - 93 93 0 0

[출처] http://unixpapa.com/js/key.html
저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2009.11.27 07:33

1. 데이터 타입의 종류

- 프리미티브 유형 (원시 데이터)
  • Boolean : true / false
  • int : 32비트의 정수, -2,147,483,648 ~ 2,147,483,647 까지의 정수 범위를 갖습니다.
  • uint : 부호없는 32비트의 정수, 0 ~ 4,294,967,295 까지의 정수 범위를 갖습니다. (음이 아닌 정수를 사용할때에는 uint 데이터 타입을 사용하는 것이 좋습니다.
  • Number : 정수, 부호없는 정수, 부동 소수점 숫자 등을 나타낼 수 있습니다. (모든 숫자유형의 데이터)
  • String : 16비티의 문자열, 문자열은 내부적으로 UTF-16 포맷을 사용하여 유니코드 문자로 저장됩니다.
  • Null : Null은 null 값만 포함되며 복합 유형의 모든 클래스와 String 데이터 타입의 기본값입니다.
  • void :  undefined값만 포함되며 데이터 타입이 지정되지 않은 변수에만 지정할 수 있습니다.

 

- 복합 유형
  • Object, Array, Date, Error, Function, RegExp, XML 및 XMLList 등등

 

보다 자세한 데이터 유형에 대한 설명

더보기


2. 데이터 타입의 초기값

데이터 타입 기본값
Boolean false
int 0
uint 0
Number NaN (Not a Number)
String null
void (선언되지 않은 데이터 타입) undefined
기타 복합유형 및 사용자 정의 클래스 null


3. 데이터 타입 확인

- typeof 연산자
 typeof 연산자는 변수의 데이터 타입을 지정하는 문자열을 반환합니다. 결과는 boolean, function, number, object, string, xml 이렇게 6개의 문자열 값으로 제한됩니다.

- describeType() 함수
 xml 형식으로 객체에 대한 정보를 반환합니다.

- is 연산자
 변수 또는 표현식이 지정된 데이터 유형의 멤버인지 여부를 테스트할 수 있습니다. is 연산자는 정확한 상속 계층 구조를 검사하며 객체가 특정 클래스의 인스턴스인지 뿐만 아니라 객체가 특정 인터페이스를 구현하는 클래스의 인스턴스인지 여부를 확인하는 데 사용됩니다. (맞으면 true 틀리면 false)

var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject);// true
trace(mySprite is IEventDispatcher); // true

4. 데이터 타입 변환

- 문자타입 변환
  • String() 함수 이용 : String(변수 또는 값);
  • 빈 문자열과 결합하여 변환 : str = "" + 12;
  • toString() 메서드 이용 : 변수 또는 값.toString();

 

- 숫자타입 변환
  • Number() / int() / uint() 함수 이용 : Number(변수 또는 값);
  • ParseInt() 및 ParseFloat() 전역 함수 이용 (변환할 수 없는 경우 NaN 반환)

 

- 클래스타입 변환
  • 클래스명() : MovieClip(object) ...
  • as 연산자 이용 : target as MovieClip ...
저작자 표시 비영리
신고
Posted by 코멧'★
TAG 기초, 타입
Flex/AIR/AS3/Etc2009.11.17 02:20

요즘 블로그 하기가 힘든 관계로 간단한 포스팅 하나 하고 갑니다~ ㅎㅎ

Math.Random()은 0과 1사이의 더블형 난수를 발생시키는 함수입니다.

0 <= Math.Random() < 1

위에서 보시는바와 같이 0은 포함되지만 1은 포함되지 안습니다.

그럼 이걸 응용해서 어찌 랜덤색상을 구하게 만드는지 살펴 보겠습니다.

flex에서 사용되는 색상코드는 16진수 형태의 24비트 칼라 이기때문에 색상의 표현은

0xFFFFFF 을 10진수로 바꿔보면 16777215가 됩니다.

0xFFFFFF도 흰색이므로 색상에 포함시킨다고 하면 Math.Random() 함수에 16777216만 곱해주면 0과 16777216 사이의 랜덤 난수를 발생시킬 수 있습니다. 하지만 여기서 주의해야할 점은 Math.Random() 함수는 double형이기때문에 발생되는 난수를 정수형으로 바꿔줘야만 색상값으로 지정 할 수 있습니다. 이걸 actionscript 코드로 표현하면 아래와 같이 표현할 수 있습니다.

int(Math.Random() * 16777216)

위와 같은 형태로 랜덤한 색상을 생성할 수 있습니다.

그럼 응용 예제를 한번 만들어 보겠습니다.

package
{
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
	
	import mx.events.*;
	
	public class randomTest extends Sprite
	{
		public function randomTest()
		{
			var timer:Timer = new Timer(100,0);
			timer.addEventListener(TimerEvent.TIMER, timerHandler);
			timer.start();
		}
		
		private function timerHandler(event:TimerEvent):void
		{
			createParticle();
		}
		
		public function createParticle():void
		{
			var color:uint;
			
			color = int(Math.random() * 16777215);
			var ball:Sprite = new Ball( Math.random()*6, color);
			ball.x = int(Math.random()*500);
			ball.y = int(Math.random()*500);
			addChild(ball);
		}
	}
}

import flash.display.*;
internal class Ball extends Sprite
{
	public function Ball( r:Number=4, c:uint =0x000000 )
	{
		graphics.beginFill( c);
		graphics.drawCircle( 0, 0, r );
		graphics.endFill();
	}
}

위와 같이 코드를 작성하고 실행하여 보겠습니다.


보시면 랜덤한 색상의 원이 0.1초 단위로 생성되는걸 확인하실 수 있습니다.

요즘 너무 바빠서 뭐라도 써야할꺼 같아서 구색맞추기용 글이었습니다 ㅋ ^^;;
저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2009.10.15 22:27
이글은 널곰님의 블로그에 올라와 있는걸 제가 코딩할때 참고하기 위해 제 나름데로 정리한 내용입니다.
원본글을 보시려면 널곰님 블로그에 방문해 주세요.

[출처] - http://blog.naver.com/surfwon/30066624470
[영문 원본] - http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

3. 파일 구성 (File Organization)

저작권 표기


프레임워크의 모든 .as 파일의 상단에 저작권 표기를 포함합니다. 아래의 예는 2008년 오픈 소스 저작권 정보의 서식을 나타냅니다.

////////////////////////////////////////////////////////////////////////////////
//
//  ADOBE SYSTEMS INCORPORATED
//  Copyright 2008 Adobe Systems Incorporated
//  All Rights Reserved.
//
//  NOTICE: Adobe permits you to use, modify, and distribute this file
//  in accordance with the terms of the license agreement accompanying it.
//
////////////////////////////////////////////////////////////////////////////////


폭이 80 문자인 점에 주의해 주세요.


package문


후일 발표 예정


import문

 
후일 발표 예정


use namespace문

 
후일 발표 예정


클래스 메타데이타 (Class metadata)

 
클래스의 메타데이타는 섹션으로 분류하며, Events, Styles, Effects, Excluded APIs, Other Metadata의 순서로 기술합니다.

각 섹션의 전에는 2차 섹션 헤더를 배치합니다. 2차 섹션 헤더의 폭은 40문자. 그리고, "//"라고 섹션명의 사이에는 스페이스가 2개 들어가 있는 것에 주의해 주세요.

각 섹션내에서는 메타데이타의 name="..."의 부분을 기준에 알파벳순서에 늘어놓습니다. Other Metadata(그 외의 메타데이타)섹션에서는 메타데이타의 태그 이름을 기준에 알파벳 순서에 늘어놓습니다.

//--------------------------------------
//  Events
//--------------------------------------
/
**
*  ASDoc comment.
*/
[Event

/**
*  ASDoc comment.
*/
[Event

//--------------------------------------
//  Styles
//--------------------------------------

/**
*  ASDoc comment.
*/
[Style

/**
*  ASDoc comment.
*/
[Style]

//--------------------------------------
//  Effects
//--------------------------------------

/**
*  ASDoc comment.
*/
[Effect

/**
*  ASDoc comment.
*/
[Effect]

//--------------------------------------
//  Excluded APIs
//--------------------------------------

[Exclude(name=&quot;horizontalAlign&quot;, kind=&quot;style&quot;)]
[Exclude(name=&quot;verticalAlign&quot;, kind=&quot;style&quot;)]

//--------------------------------------
//  Other metadata
//--------------------------------------

[DefaultBindingProperty(source=&quot;text&quot;, destination=&quot;text&quot;)]
[IconFile(&quot;Text.png&quot;)]


클래스 선언

 
후일 발표 예정


Version.as 대한 include문

 
클래스에는 상대 패스를 사용하고, core/Version.as를 인클루드 하도록 합니다. 이 파일에는 static const VERSION:String의 선언이 포함되어 있습니다.

include "../core/Version.as";


Implementation notes

 
후일 발표 예정


클래스 초기화 (Class intialization)

 
후일 발표 예정


클래스 상수 (Class constant)

 
정적 상수(static const) 선언을 여기에 배치합니다.

ActionScript 3 는 Array형 또는 Object형의 상수를 허가하지 않습니다. 이런한 케이스에서는 static const는 아니고 static var를 상수처럼 선언합니다. 다만 이 경우 개념상은 상수이기 위하여 이 섹션에 기술하도록 합니다.


클래스 믹스 인 (Class mix-ins)

 
메소드로서 선언되는 것이 아니라 믹스-인 되는 함수(Function) 형태의 정적 변수(static variable)는 모두 선언하도록 합니다.


클래스 자원 (Class resources)

 
후일 발표 예정


클래스 프라퍼티 (Class properties)

 
static getter 및 static setter는 여기서 선언하도록 합니다. 이러한 선언은 프라퍼티명을 기준을 알파벳순서로 늘어놓습니다. 각 프라퍼티간에는 프라퍼티명이 들어간 이차적인 separator를 배치합니다. getter를 기술하고 나서 setter를 기술하도록 합니다.


클래스 메소드

 
static function 선언을 여기에 배치합니다.



생성자 (Constructor)

 
후일 발표 예정


오버라이드 (overridden Propertirs)

 
non-static getter 및 setter의 오버라이드(override)를 여기에 배치합니다. 이러한 선언은 프라퍼티명 기준을 알파벳 순서데로 늘어놓습니다. 각 프라퍼티간에는 파라퍼티명이 들어간 이차적인 separator를 배치합니다. getter를 기술하고 나서 setter를 기술하도록 합니다.


프라퍼티 (Properties)

  
새로운 비 static의 getter 및 setter를 여기에 배치합니다. 이러한 선언은 프라퍼티명을 기준으로 알파벳순서로 늘어놓습니다. 각 프라퍼티간에는 파라퍼티명이 들어간 이차적인 separator를 배치합니다. getter를 기술하고 나서 setter를 기술하도록 합니다.


오버라이드 (override) 된 메소드(Overridden Methods)

  
비 static 함수의 오버라이드(override)를 여기에 배치합니다.



메소드 (Methods)

  
새로운 비 static 함수를 여기에 배치합니다.


 오버라이드 (override) 된 이벤트 핸들러 (Overridden event handlers)

 
이벤트 핸들러의 오버라이드(override)를 여기에 배치합니다.


이벤트 핸들러 (Event handlers)


새로운 이벤트 핸들러를 여기에 배치합니다.


패키지 외의 헬퍼 클래스 (Out-of-package helper classes)

  
후일 발표 예정


종합

저작권 표기
package문
import문
use namespace문
클래스 메타데이타 (Class metadata)
클래스 선언
Version.as 대한 include 문
Implementation notes
클래스 초기화 (Class initialization)
클래스 상수 (Class constant)
클래스 믹스 인 (Class mix-ins)
클래스 자원 (Class resources)
클래스 변수 (Class variables)
클래스 프라퍼티 (Class properties)
클래스 메소드
생성자 (Constructor)
변수(Variables)
오버라이드 (override)된 프라퍼티 (Overridden Properties)
프라퍼티 (Properties)
오버라이드 (override)된 메소드 (Overridden Methods)
메소드 (Methods)
오버라이드 (override)된 이벤트 핸들러 (Overridden event handlers)
이벤트 핸들러 (Event handlers)
패키지 외의 헬퍼 클래스 (Out-of-package helper classes)


4. 기술 서식 (Formatting)


행 너비 (Line width)


코드는 한 라인에 문자는 80 글자로 합니다. 이렇게 했을때 아래와 같은 이득이 따릅니다.
  • 개발자가 작은 화면을 사용하고 있는 경우, 긴 행을 읽을 때에 수평 스크롤 할 필요가 없습니다.
  • 비교 유틸리티를 사용할 때, 파일의 두 개 버전을 옆으로 늘여 놓아 나타낼 수 있습니다.
  • 프로젝터를 사용해 그룹에 프리젠테이션 할 때, 스크롤 아닌 font size를 크게 하는 것으로 대응할 수 있습니다.
  • 인쇄시 짤리거나 쓸데 없는 개행 없이 원시 코드를 인쇄할 수 있습니다.

들여쓰기 (Indentation)

 
스페이스 4문자의 들여쓰기로 사용합니다. 텍스트 문자 폅집기의 설정을 조정하여 탭은 아이고 스페이스가 삽입되도록 합니다. 이 규칙을 지키는 것으로, 다른 인덴트 설정이 이용된 프로그램(8 문자 들여쓰기인 메모장등)에서도 코드의 자체를 어지럽히는 일 없이 표시할 수 있게 됩니다.



섹션 구분자 (Section separators, 단락 구분)

 
클래스내의 주요 섹션 구분자는 다음과 같이 합니다.

    //--------------------------------------------------------------------------
    //
    //  Overridden methods
    //
    //--------------------------------------------------------------------------

구분자 자체를 4 컬럼부터 80컬럼까지 늘리고, 텍스트는 8문자까지 들여쓰기 합니다.

클래스내의 2차 섹션 구분자(프라퍼티간 등)는 다음의 체재로 합니다.

    //----------------------------------
    //  visible
    //----------------------------------


구분자 자체를 4문자로부터 40문자까지 늘려 텍스트를 8문자까지 들여쓰기 합니다.

구분자의 앞뒤 공백 행은 각각 1행씩 배치합니다.


선언의 분리

 
상수, 변수 및 함수 선언 사이에는 세로 방향의 구분자로서 공백행을 1행씩 배치합니다.

/**
*  @private
*  Holds something.
*/
var a:Number;

/**
*  @private
*/
var b:Number


메타데이타 (MetaData)

 
후일 발표 예정

올바른 예

Inspectable[a="1", b="2"]

나쁜 예

Inspectable[a=1 b=2]


배열 인덱스 (Array indexing)

 
좌측의 [ 묶음의 직후 및 우측의 ] 의 직전에는 스페이스가 들어갈 수 없습니다.

올바른 예

a[0]

나쁜 예

a[ 0 ]


, 콤마 (Commas)

 
콤마의 뒤에는 스페이스를 한 개 기입합니다. 이 규칙은 일련의 파라메터, Array 리터럴 및 Object 리터럴에 적용됩니다.


Array 리터럴 (Array literals)

 
좌측의 [ 묶음의 직후에 스페이스를 1개, 우측의 ] 묶음의 직전에도 스페이스를 1개, 그리고 각 콤마의 직후(직전이 아닙니다)에 스페이스 1개를 각각 배치합니다.

올바른 예

[ 1, 2, 3 ]

나쁜 예

[1, 2, 3]
 
[1,2,3]

공 배열 (empty array)는 특수한 케이스입니다.

올바른 예

[]

나쁜 예

[ ]

복수의 행이 필요한 긴 배열의 초기화시에는 정렬된 [] 묶음을 사용합니다.

static var numberNames:Array /* of String */ =
[
    "zero",
    "one",
    "two",
    "three",
    "four",
    "five",
    "six",
    "seven",
    "eight",
    "nine"
];


Object 리터럴(Object literals)

 
좌측의 { 괄호의 직후에 스페이스를 1개, 우측의 { 괄호의 직전에도 스페이스를 1개, 그리고 프라퍼티명과 그 값을 나누는 : 콜론의 직후에 스페이스를 1개 배치하도록 합니다.

올바른 예

{ a: 1, b: 2, c: 3 }

나쁜 예

{a: 1, b: 2, c: 3}

{a:1, b:2, c:3}

{a:1,b:2,c:3}

빈 오브젝트(empty object)는 예외입니다.

올바른 예

{}

나쁜 예

{ }

복수의 행이 필요한 긴 오브젝트의 초기화시에는 정렬된 {} 괄호를 사용합니다.

private static var TextStyleMap:Object =
{
    color: true,
    fontFamily: true,
    fontSize: true,
    fontStyle: true,
    fontWeight: true,
    leading: true,
    marginLeft: true,
    marginRight: true,
    textAlign: true,
    textDecoration: true,
    textIndent: true
};


함수 리터럴 (Function literals)

 
후일 발표 예정

var f:Function;

f = function():void
{
    doSomething();
};


형태 선언

 
변수, 인수 또는 함수와 이러한 형태의 사이에 있는 콜론의 직전 밑 직후에는 스페이스를 들어갈 수 있습니다.

올바른 예

var n:Number;

나쁜 예

var n : Number;

var n: Number;

다른 올바른 예

function f(n:Number):void

나쁜 예

function f(n : Number) : void

function f(n: Number): void


연산자와 대입

 
대입 연산자의 전후에는 스페이스를 1개 넣습니다.

올바른 예

a = 1;

나쁜 예

a=1;

Infix 연산자의 전후에는  스페이스를 1개 넣습니다.

올바른 예

a + b * c

나쁜 예

a+b*c

비교 연산자의 전후에는 스페이스를 1개 넣습니다.

올바른 예

a == b

나쁜 예

a==b

Prefix연산자와 그 작용 대상의 사이에는 스페이스가 들어갈 수 없습니다.

올바른 예

!o

나쁜 예

! o

Postfix 연산자와 그 작용 대상의 사이에는 스페이스가 들어갈 수 없습니다.

올바른 예

i++

나쁜 예

i ++


스테이트먼트(Statement)

 
모든 스테이트먼트에 breakpoint를 설치할 수 있도록, 각 스테이트먼트를 새로운 행으로 개시하도록(듯이) 합니다.

올바른 예

a = 1;
b = 2;
c = 3;

나쁜 예

a = 1; b = 2; c = 3;

스테이트먼트 블록의 괄호를 정렬하도록 합니다.

올바른 예

function f():void
{
    var n:int = numChildren;
    for (var i:int = 0; i < n; i++)
    {
        if ()
        {
            x = horizontalGap * i;
            y = verticalGap * i;
        }
    }
}

나쁜 예

function f():void {
    var n:int = numChildren;
    for (var i:int = 0; i < n; i++) {
        if () {
            x = horizontalGap * i;
            y = verticalGap * i;
        }
    }
}


정수 및 변수의 선언

 
후일 발표 예정


함수의 선언


후일 발표 예정

올바른 예

f(a, b)

나쁜 예

f(a,b)

f( a, b )

파라메터를 열거할 때에 행의 즉시가 발생하는 경우, 좌측의 괄호와 정렬하듯이 즉시 후의 행을 들여쓰기 합니다. 스페이스에 여유가 있는 경우는 복수의 파라메터를 1행에 기술하고 그 외의 경우에는 1행에 대해 1개의 파라메터를 기술합니다. 1개의 파라메터마저 기술하는 스페이스가 없는 경우는, 2행째에 최초의 파라메터를 배치하여 다음 행의 인덴트를 함수명보다 전의 위치까지 이동합니다.

public function foo(parameter1:Number, parameter2:String,
                    parameter3:Boolean):void

public function foo(parameter1:Number,
  parameter2:String,
                    parameter3:Boolean):void

public function aVeryLongFunctionName(
    parameter1:Number, parameter2:String,
    parameter3:Boolean):void


함수의 호출 (Function Calls)


후일 발표 예정

올바른 예

f(a, b)

나쁜 예

f(a,b)

f( a, b )


if 문


if키워드와 좌측의 괄호의 사이에는 스페이스를 1개 넣습니다. 좌측의 괄호의 직후, 및 우측의 괄호의 직전에는 스페이스가 들어갈 수 없습니다.

올바른 예

if (a < b)

나쁜 예

if(a < b)

if( a < b )

if ( a < b )


for 문


for 키워드와 좌측의 괄호의 사이에는 스페이스를 1개 넣습니다. 좌측의 괄호의 직후 및 우측의 괄호의 직전에는 스페이스가 들어갈 수 없습니다.

올바른 예

for (var i:int = 0; i < n; i++)

나쁜 예

for(var i:int = 0; i < n; i++)

for( var i:int = 0; i < n; i++ )

for ( var i:int = 0; i < n; i++ )

 for 구로 다음 행으로 내려 써야 할 경우가 발생할 때에는, 좌측의 괄호와 정렬하듯이 다음 행을 들여쓰기 합니다.

for (var aLongLoopVariableName:int = aLongInitialExpression;
     aLongLoopVariableName < aLongUpperLimit;
     aLongLoopVariableName++)


switch문


switch 키워드와 좌측의 괄호의 사이에는 스페이스를 1개 넣습니다. 좌측의 괄호의 직후, 및 우측의 괄호의 직전에는 스페이스가 들어갈 수 없습니다.

올바른 예

switch (n)

나쁜 예

switch(n)

switch( n )

switch ( n )

Follow the switch keyword with a single space before the left parenthesis. Don't put any spaces after the left parenthesis or before the right parenthesis.

올바른 예

switch (n)
{
    case 1:
    {
        a = foo();
        break;
    }

    case 2:
    {   a = bar();
        break;
    }

    default:
    {
        a = blech();
        break;
    }
}

나쁜 예

switch(n)

switch( n )

switch ( n )


class 선언 및 interface 선언


괄호를 항상 대응 시키도록 합니다.

단독의 행의 주위에 괄호는 불필요합니다.

1행에 대해 1개의 스테이트먼트를 기술합니다.



5. ASDoc


프라퍼티에 대한 코멘트를 붙여라


프라퍼티에 있는 한벌의 get/set 함수 가운데, 최초의 것에만 코멘트를 붙이도록 합니다. 프라퍼티의 정의 방법 밑 코멘트 기술 체재는 이하와 같습니다.

/**
*  @private
*  The backing variable for the property.
*/
private var _someProp:Foo;

/**
*  Place all comments for the property with the getter which is defined first.
*  Comments should cover both get and set behavior as appropriate.
*/
public function get someProp():Foo
{
  ...
}

/**
*  @private
*/
public function set someProp(value:Foo):void
{
  ...
}

ASDoc의 코멘트는 메타데이타 태그 뿐만이 아니라, 클래스내의 다른 생성자에도 적용됩니다. 코멘트가 대상이 되는 모두에 있어서 적절하도록 주의해 주세요. 프라퍼티를 Bindable로서 태그화하는 경우는, 프라퍼티 코멘트를 get 함수보다 전 한편 Bindable 메타데이타 태그보다 뒤의 위치에 배치합니다.

올바른 예

[Bindable("somePropChanged")]

/**
*  Comments for someProp
*/
public function get someProp():Foo

나쁜 예

/**
* Comments for someProp
*/
[Bindable("somePropChanged")]

public function get someProp():Foo

저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2009.10.15 03:21

이글은 널곰님의 블로그에 올라와 있는걸 제가 코딩할때 참고하기 위해 제 나름데로 정리한 내용입니다.
원본글을 보시려면 널곰님 블로그에 방문해 주세요.

[출처] - http://blog.naver.com/surfwon/30049410362
[영문 원본] - http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

2. 언어사용법 (Language Uasge)

컴파일 옵션 (Compilation options)

컴파일 옵션은 -strict와 -show-actionscript-warnings는 on으로 해둡니다.
(flex-config.xml 파일에 기본값들이 설정되어 있습니다.)


프라퍼티-기반 API (roperty-based APIs)

프라퍼티-기반API가 메소드-기반API 보다 유리합니다. (MXML 프로그래밍에서 보다 적합하기에)


타입 (데이터형) 선언 (Type declarations)

모든 상수(constrant), 변수(vqriable), 함수 파라메터(argment), 반환값(return value)에는 타입 선언 해야 합니다. 비록 "타입 없음(no Type)"일 셩우에도 *라고 선언해 둡니다.

올바른 예

var value:*;


나쁜 예

var value;

타입은 가능한 엄밀하게 지정
루프의 인덱스 번호는 Number형이 아닌 int형으로 (ex. for(var i:int=0; i < n; i++))
다른 예로서 mouseDownHandler의 인수는 event:Event 보다는 event:MiuseEvent로 선언
음의 수가 되지 않는 경우에도 integers(정수)형의 int를 사용
unit는 RGB의 색지정, 비트 마스크, 그 외 수치가 아닌 값(non-numeric)만 사용합니다.

값이 undefined 이 될 수 있는 경우에만 타입 지정 *를 사용하도록 합니다. 대부분의 경에에서는 * 보다는 Object를 사용하도록 하여 “object doesn't exist(오브젝트가 존재하지 않음)”하는 경우 null을 사용합니다.

Array선언시 배열형을 나타낸다.

올바른 예

var a:Array /* of String */ = []

나쁜 예

var a:Array = []

다른 올바른 예

function f(a:Array/* of Number */):Array /* of Object */
{
...

}

나쁜 예

function f(a:Array):Array


리터럴 (Literals)


undefined

가능한 사용은 삼가합시다.


int와 unit 리터럴

정수형(int)에는 소수점을 사용하지 않도록 합니다.

올바른 예

2

나쁜 예

2.

16진수에는 소문자 x와 대문자 A-Z를 사용합니다.

올바른 예

0xFEDCBA

나쁜 예

0Xfedcba

RGB 값은 항상 6자리의 16진수로 기술합니다.

올바른 예

private const BLACK:uint = 0x000000;

나쁜 예

private const BLACK:uint = 0;

인덱스에서 사용시 -1 값은 "no index"를 의미합니다.


Number 리터럴 (Number literals)

Number형을 사용할때는 명시적으로 소수점을 씁니다. 0의 경우에도 소수점을 지정하도록 합니다.

올바른 예

alphaFrom = 0.0;
alphaTo= 1.0;

나쁜 예

alphaFrom = 0;
alphaTo= 1;

그러나, 픽셀 좌표에서는 이를 하지 마십시오. (약간에 모순이 존재)

나쁜 예

var xOffset:Number = 3;

나쁜 예

var xOffset:Number = 3.0;

지수를 표기할 때는 E가 아닌 소문자 e로 합니다.

올바른 예

1.0e12

나쁜 예

1.0E12

Number 값이 지정되지 않음(not set)의 기본 값은 NaN입니다.


String 리터럴 (String literals)

문자열을 (') 따옴표나 (") 겹따옴표를 사용하여 묶습니다. 만약 문자열에 (")문자가 포함될 경우 문자열로 하려면 다음과 같이 합니다.

올바른 예

"What's up, \"Big Boy\"?"

나쁜 예

'What\'s up, "Big Boy"?'

Use \u, not \U, for unicode escape sequences.


Array 리터럴 (Array literals)

new Array() 보다는 Array 리터럴을 사용합니다.

올바른 예

[]

나쁜 예

new Array()

다른 올바른 예

[1, 2, 3]

나쁜 예

new Array(1, 2, 3)

Array constructor (new Array()) 는 요소수를 특정해 생성할 때에만 사용하도록 합니다.
ex) new Array(3) 이것은 [undefined, undefined, undefined] 하는 의미로, [3] 과 다른 것에 주의해 주세요.


Object 리터럴 (Object literals)
new Object() 보다는 Object 리터럴을 사용합니다.

올바른예

{}

나쁜 예

new Object()

다른 올바른 예

o = {a:1, b:2, c:3};

나쁜 예

o = new Object();
o.a = 1;
o.b = 2;
o.c = 3;

다른 올바른 예

o = {}
o.a = 1;
o.b = 2;
o.c = 3;


Function 리터럴 (Function literals)

익명의 함수(anonymous functions) 정의를 위한 function 리터럴 사용을 피해야 합니다. 대신에 클래스 메소드나 패키지 함수를 사용합니다. function 표기에는 반드시 리턴값 타입을 선언하고, function 블록 안의 문자의 마지막은 세미콜론(;)으로 끝냅시다.

올바른 예

function(i:int):void { doIt(i - 1); doIt(i + 1); }

나쁜 예

function(i:int) { doIt(i - 1); doIt(i + 1) }


RegExp 리터럴 (RegExp literals)

String을 사용하여 RegExp 인스턴스를 생성하는 것보다 리터럴 표기를 사용합니다.

올바른 예

var pattern:RegExp = /\d+/g;

나쁜 예

var pattern:RegExp = new RegExp("\\d+","g");


XML and XMLList literals

String으로 XML 인스턴스를 생성하는 것보다, 다음과 같이 리터럴 표기를 사용합니다.

올바른 예

var node:XML = <name first="jane" last="Doe"/>;

나쁜 예

vat node:XML = new XML("<name first=\"jane\" last=\"Doe\"/>");

XML의 속성(attribute)값에는 '(single-quotes) 보다는 "(double-quotes)를 사용합니다.

올바른 예

var node:XML = <name first="jane" last="Doe"/>;

나쁜 예

var node:XML = <name first='jane' last='Doe'/>;


Class 리터럴
같은 이름을 가진 클래스를 두 개를 임포트 할 경우 이를 명확히 하고자 할 경우 완전히 갖춘 클래스 리터럴을 사용합니다.

올바른 예

import mx.controls.Button;

var b:Button = new Button();

나쁜 예

import mx.controls.Button;

var b:Button = new mx.controls.Button();

예외의 경우 (같은 이름을 가진 두개의 클래스를 임포트 할 경우 완전한 클래스 리터럴을 사용)

import mx.controls.Button
import my.controls.Button

vat b:Button = new mx.controls.Button();


표현식 (Expressions)


() 소괄호(Parentheses)

+, -, *, /, &&, ||, <, <=, >, >=, ==, and != 와 같은 일반 연산자를 사용할 때에는 불필요한 소괄호를 사용하지 않도록 합니다.

올바른 예

var e:Number = a * b / (c + d);

나쁜 예

var e:Number = (a * b) / (c + d);

다른 올바른 예

var e:Boolean  = a && b || c == d;

나쁜 예

var e:Boolean = ((a && b) || (c == d));

다른 연산자에 대한 우선순위 규칙은 꼭 기억하고, 그러할 경우 괄호는 더 도움이 될 수 있습니다.


Coercion

Boolean값을 true나 false와 비교하는 불필요한 것은 하지 마십시오. 둘 중의 한 값(true 또는 false) 밖에 되지 않기 때문입니다.

올바른 예

if (flag)

나쁜 예

if (flag == true)

올바른 예

var flag:Boolean = a && b;

나쁜 예

var flag:Boolean = (a && b) != false;

int, uint, Number, String을 비교할 때는 명시적으로 Boolean을 비교하도록 합니다.

올바른 예

if (n != 0)

나쁜 예

if (n)

올바른 예

if (s != null && s != "")

나쁜 예

if (s)

오브젝트 참조의 판정은 묵시적으로 Boolean 비교하도록 합니다.

올바른 예

if (child)

나쁜 예

if (child != null)

올바른 예

if (!child)

나쁜 예

if (child == null)

Prefer the use of a cast to the use of the as operator. Use the as operator only if the coercion might fail and you want the expression to evaluate to null instead of throwing an exception.

올바른 예

IUIComponent(child).document

나쁜 예

(child as IUIComponent).document


Comparison

자연스럽게 읽을 수 있는 차례로 비교문을 씁니다.

올바른 예

if (n == 3) // "만약 n 이 3 이면"

나쁜 예

if (3 == n) // "만약 3 이 n 이면"


++와 -- 연산자

In cases where the postfix and prefix forms are equivalent, use the postfix form. Use the prefix form only when you need to use the value before it is incremented.
(접두사 형태(++i)나 접미사 형태(i++)중 아무거나 사용해도 상관없다면 접미사 형태를 사용해라. 접미사 형태는 오직 값이 먼저 증가될 필요가 있을 경우에만 사용해라.)

올바른 예

for (var i:int = 0; i < n; i++)

나쁜 예

for (var i:int = 0; i < n; ++i)


3항 연산자

단순한 if/else 기술 (특히 null 체크)시에는, 3항 연산자를 사용합니다.

올바른 예

return item ? item.label : null;

나쁜 예

if (!item)
return null;
return item.label;

그렇지만, 중첩되는 복잡한 if/else 논리때는 3항 연산자는 사용하지 않도록 합니다.

올바른 예

if (a < b)
return -1;
else if (a > b)
return 1;
return 0;

나쁜 예

return a < b ? -1 : (a > b ? 1 : 0);


new 연산자

constructor에 인수를 건네주지 않는 경우에서도 class 선언의 뒤에는 ()를 씁니다.

올바른 예

var b:Button = new Button();

나쁜 예

var b:Button = new Button();


명령문(Statements)

명령문은 세미콜론으로 끝냅니다. ActionScript 3의 세미콜론 옵션 기능(optional-semicolon)에 의지하지 않도록 합니다.

올바른 예

a = 1;
b = 2;
c = 3;

나쁜 예

a = 1
b = 2
c = 3


include 선언문

#include 는 아니고 include 라고 씁니다. 또, 다른 명령문과 같게 마지막에 세미콜론을 씁니다.

올바른 예

include "../core/ComponentVerison.as";

나쁜 예

#include "../core/ComponentVersion.as"

절대 경로가 아니고 상대 경로로 지정합니다.


import 선언문

클래스나 인터페이스나 패키지 레벨의 함수를 임포트 할 때는 *(와일드 카드 지정)가 아닌 제대로 지정하여 임포트 합니다.

올바른 예

import mx.controls.Button;
import flash.utils.getTimer;

나쁜 예

import mx.core.*;


use namespace 선언

use namespace의 사용은 피하는 대신 :: 문장구조법을 사용합니다.
Avoid them; use :: syntax instead on each reference to something in a non-open namespace.

올바른 예

import mx.core.mx_internal;

// Later, in some method...
mx_internal::doSomething();

나쁜 예

import mx.core.mx_internal;
use namespace mx_internal;

// Later, in some method...
doSomething();


if 문

if/else문 내의 명령이 한 개 밖에 없는 경우는 {} 블록으로 둘러싸지 않도록 합니다.

올바른 예

if (flag)
doThing1();

나쁜 예

if (flag)
{
doThing1();
}

다른 예

if (flag)
doThing1();
else
doThing2();

나쁜 예

if (flag)
{
doThing1();
}
else
{
doThing2();
}

다만, 명령문이 여러개 있는 요소가 있다면 모두 {}로 둘러 싸도록 합니다.

올바른 예

if (flag)
{
doThing1();
}
else
{
doThing2();
doThing3();
}

나쁜 예

if (flag)
doThing1();
else
{
doThing2();
doThing3();
}

When doing multiple error checks, use sequential if statements that test for failure and return early. The successful execution flow is then down the page, with the succesful return at the end of the method. Do not use nested tests for success, which make the execution flow drift across the page.

올바른 예

if (!condition1)
    return false;
...
if (!condition2)
    return false;
...
if (!condition2)
    return false;
...
return true;

나쁜 예

if (condition1)
{
    ...
    if (condition2)
    {
        ...
        if (condition3)
        {
            ...
            return true;
        }
    }
}
return false;


for문

for 루프내의 명령이 1개 밖에 없어도, 항상 {}로 둘러 싸도록 합니다.

올바른 예

for (var i:int = 0; i < 3; i++)
{
   doSomething(i);
}

나쁜 예

for (var i:int = 0; i < 3; i++)
    doSomething(i);

for 루프의 상한값을 로컬 변수로서 사전에 보관 유지하게 합니다. 이것에 의해서 루프가 돌 때마다 변수의 평가를 다시 하지 않게 할 수 있습니다. (물론 비교 평가는 반복 실행되지 않으면)

올바른 예

var n:int = a.length;
for (var i:int = 0; i < n; i++)
{
    ...
}

나쁜 예

for (var i:int = 0; i < a.length; i++)
{
    ...
}

그것(인덱스변수)이 다른곳에서 사용되지 않는한 for 문장의 ()안에서는 var 선언합니다.

올바른 예

for (var i:int = 0; i < 3; i++)

나쁜 예

var i:int;
for (i = 0; i < 3; i++)
{
   ...
}


while 문

while 루프는 비록 내용이 1행이었다고 해도 {}블록으로 둘러싸도록 합니다.

올바른 예

while (i < n)
{
   doSomething(i);
}

나쁜 예

while (i < n)
    doSomething(i);


do문

do 루프는 비록 내용이 1행이었다고 해도 {}블록으로 둘러 싸도록 합니다.

올바른 예

do
{
   doSomething(i);
}
while (i < n);

나쁜 예

do
    doSomething(i);
while (i < n);


switch 문

case clause (와)과 default clause (은)는 모두 블록으로 둘러 싸도록 합니다. 각 블록내에 break 혹은 return 을 기술 하도록 합니다. 리턴을 사용할 때는 return 후에 break (을)를 두지 않도록 합니다.
Make the body of each case clause, and of the default clause, be a block. Put the break or return statement within the block, not after it. If you are returning, don't put a break after the return. Treat the default clause similarly to the case clauses; break or return from it rather than falling through the bottom of the switch.

올바른 예

switch (n)
{
    case 0:
    {
        foo();
        break;
    }

    case 1:
    {
        bar();
        return;
    }

    case 2:
    {
        baz();
        return;
    }

    default:
    {
        blech();
        break;
    }
}

나쁜 예

switch (n)
{
    case 0:
        foo();
        break;

    case 1:
    {
        bar();
    }
    break;

    case 2:
        baz();
        return;
        break;

    default:
        blech();
}


return 문

return을 사용하는 경우는 불필요하게 ()괄호호 둘러싸지 않게 해주세요.

올바른 예

return n + 1;

나쁜 예

return (n + 1);

메소드의 도중에 리턴하는 것은 OK입니다.



Declarations


1행의 명령문 아에서 복수의 정수나 변수를 선언하지 않도록 합니다.

올바른 예

var a:int = 1;
var b:int = 2;

나쁜 예

var a:int = 1, b:int = 2


override 키워드

액세스 접근제한자의 앞에 쓰도록 합니다.

올바른 예

override protected method measure():void

나쁜 예

protected override method measure():void


접근 제한자 (Access specifiers)

지정할 수 있는 개소에서는 반드시 액세스 지정자를 기술하도록 합니다. 아무것도 기술하지 않았던 때에는 접근 제한자 internal 취급이 됩니다만, 이보완 기능에는 의지하지 않도록 합니다.

API를 public이나 protected로 할 때는, 정말로 그렇게 해야 하는가를 잘 생각합니다.
Before making an API public or protected, think hard about whether it is really needs to be. Public and protected APIs must be documented. They must also be supported for several releases before being formally deprecated


static 키워드

접근 제한자의 뒤에 쓰도록 합니다.

올바른 예

public static const MOVE:String = &quot;move&quot;

나쁜 예

static public const MOVE:String = &quot;move&quot;;


final 키워드

액세스 지정자의 뒤에 쓰도록 합니다.

올바른 예

public final class BoxDirection

나쁜 예

final public class BoxDirection

Declare all “enum classes” to be final.
Also declare “base” properties and methods (those starting with $) to be final.


상수 (Constants)

상수는 모두 static으로 합니다. 인스턴스화했더니 어차피 같은 값이 들어오니까.

올바른 예

public static const ALL:String = "all";

나쁜 예

public const ALL:String = "all";


변수 (Variables)

변수에 초기치를 갖게해 두고 싶을 때는, constructor 내가 아니고, 선언시에 해 두도록 하겠습니다.

올바른 예

private var counter:int = 1;

나쁜 예

private var counter:int;
...
public function MyClass()
{
    super();
    ...
    counter = 1;
}


로컬 변수 (Local Variables)

로컬 변수는 사용하기 직전에 선언하도록 합니다. 함수의 첫머리에서 정리해 선언해 두는 것은 그만둡시다.

올바른 예

private function f(i:int, j:int):int
{
    var a:int = g(i - 1) + g(i + 1);
    var b:int = g(a - 1) + g(a + 1);
    var c:int  = g(b - 1) + g(b + 1);

    return (a * b * c) / (a + b + c);
}

나쁜 예

private function f(i:int, j:int):int
{
    var a:int;
    var b:int;
    var c:int;

    a = g(i - 1) + g(i + 1);
    b = g(a - 1) + g(a + 1);
    c = g(b - 1) + g(b + 1);

    return (a * b * c) / (a + b + c);
}

동명의 로컬 변수의 선언은 한 함수내에 대해 1개입니다. 그렇다고 하는 것도 ActionScript 3 그럼 블록내의 로컬 스코프는 없기 때문입니다. (?)
Declare local variables only one per function. ActionScript 3 doesn't have block-scoped locals.

올바른 예

var a:int;
if (flag)
{
    a = 1;
    ...
}
else
{
    a = 2;
    ...
}

나쁜 예

var a:int;
if (flag)
{
    a = 1;
    ...
}
else
{
    a = 2;
    ...
}

다른 올바른 예

var i:int;
for (i = 0; i &lt; n; i++)
{
    ...
}

for (i = 0; i &lt; n; i++)
{
    ...
}

나쁜 예

for (var i:int = 0; i &lt; n; i++)
{
    ...
}

for (var i:int = 0; i &lt; n; i++)
{
    ...
}


클래스 (Classes)

Object 형태를 확장시킨 클래스의 경우는, extends Object의 기술은 생략 할 수 있습니다.

클래스 내에 "bare statements" 만이 loadResources(). 등의 정적 클래스 초기화 메소드의 호출이 되도록 합니다.


생성자 (Constructors)

클래스에 인스턴스 멤버가 있는 경우는 생성자(constructor)를 기술하고, 비록 다른 용도가 없다고 해도 명시적으로 super()를 호출하도록 합니다.
생성자 함수에 인수를 건네주어 인스턴스 변수를 설정하는 경우는, 인스턴스 변수와 같은 이름을 붙여 사용합니다.

올바른 예

public function MyClass(foo:int, bar:int)
{
    this.foo = foo;
    this.bar = bar;
}

나쁜 예

public function MyClass(fooVal:int, barVal:int)
{
    foo = fooVal;
    bar = barVal;
}

생성자 내에서 인스턴스 변수의 값을 설정하는 것이 아니라, 인스턴스 변수의 선언시에 끝마쳐 두도록 하겠습니다. 예외로서 상속된 인스턴스 변수를 리셋하고 싶을 때는 생성자(constructor) 내에서 설정해도 좋습니다.


인터페이스 (Interfaces)

TBD (To Be Determined : '차후 결정될 예정, 아직 미정'이라는 뜻입니다.)


네임스페이스 (Namespaces)

TBD


프롭퍼티 포함 (Implementing properties)

TBD


메타데이타 (Metadata)

TBD


패키지 (Packages)


패키지 문 안에 한개 public API (일반적으로 클래스, 경우에 따라서는 네임스페이스)만을 배치합니다.

Helper classes

bare statements
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2009.10.14 22:29

이글은 널곰님의 블로그에 올라와 있는걸 제가 코딩할때 참고하기 위해 제 나름데로 정리한 내용입니다.
원본글을 보시려면 널곰님 블로그에 방문해 주세요.

[출처] - http://blog.naver.com/surfwon/30049410362
[영문 원본] - http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

1. 명명규칙 (Naming)

약어 (Abbreviations)

일반적으로 약어 사용은 피합시다. ex) calcOptVal() ---> calculateOptimalValue()

관례화 되어 있는 약어
  • acc - accessibility(접근성) ex) ButtonAccImpl
  • auto - automatic(자동적) ex) autoLayout
  • eval - evaluate(계산) ex) EvalBindingResponder
  • impl - implementation(이행) ex) ButtonAccImpl
  • info - information(정보) ex) GridRowInfo
  • num - number(숫자) ex) numChildren
  • min - minimum(최소) ex) minWidth
  • max - maximum(최대) ex) maxHeight
  • nav - navigation, ex) NavBar
  • regexp - regular expression(정규식) ex) RegExpValidator
  • util - utility ex) StringUtil

두문자어 (Acronyms)

AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, XML ...
두문자어는 전부 대문자이거나 전부 소문자로만 사용
(두문자어가 소문자로 표기하는 경우 : 두문자어의 명칭 그 자체를 식별자(인스턴스명)로서 사용할 때와 식별자(Indetifier: ID명)의 선두 문자에 사용할 때에 한정)
ex) CSSStyleDeclaration, IUID, uid, IIME, and imeMode


단어간 경계 (Word boundaries) 연결

InterCaps(CamelCase)방식 - ex) LayoutManager, measuredWidth
언더스코어(밑줄)방식 - ex) object_proxy

(? 어떨때 어떤걸 쓰라는지는 안나와있다;; 계속 읽다보면 나오려나;;)

타입을 특정하기 쉬운 명명법(Type-specifying names)
타입을 쉽게 알 수 있도록 명명하되 타입의 약어를 나타내는 접미어 사용은 하지말자
ex) border_mc (X), button:Button = New Button(); (O)


패키지명 (Package names)

선두문자를 소문자로 시작하고 그 이후는 인터캡스 방식으로 명명
패키지는 비슷한 기능끼리 정리하여 그(기능의) 복수형으로 이름 붙이도록 합시다.
ex) charts, collections, controls, effects, events, formatters, managers, ,,,

패키지명에는 그 기능(concept)을 나타내는 동명사를 사용하는 것이 일반적입니다.
ex) binding, loffing, messaging, printing
혹은 "기능을 나타내는 명사"로 하도록 합니다.
ex) accessibility, core, graphics, rpc


파일명 (File names)

API을 Import를 위해, 반드시 파일명은 공개 API 클래스명과 같은 이름으로 합니다. 그러나 include일 경우는 이 규칙을 따를 필요가 없습니다.

[Style(...)] 메타 데이타에 대한 인클루드 파일의 이름은 대문자로 시작하기 바랍니다. 그 다음은 인터캡스 방식으로 하되 후미 단어는 "Styles"를 사용합니다.
ex) BorderStyles.as, ModalTransparencyStyles.as
(이미지등의) 어셋(assets) 파일명은 선두 문자는 소문자로 하고 단어와 단어의 사이는 언더스코어(_)로 연결합니다.
ex) icon_align_left.png


네이스페이스명 (Namespace names)

선두 문자는 소문자로 단어와 단어의 사이는 언더스코어(밑줄)로 연결합니다.
ex) mx_internal, object_proxy


인터페이스명 (Interface names)

선두 문자에 "I"를 나머지는 인터캡스방식으로 명명합니다.
ex) IList, IFocusManager, IUID


클래스명 (Class names)

선두 문자를 대문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex) Button, FocusManager, UIComponent

Event 클래스의 하위 클래스(subClass)는 FooBarEvent하는 식으로 명명합니다.
Error 클래스의 하위 클래스는 FppBarError 식으로 명명합니다.
EffectInstance 클래스의 하위 클래스는 effect FooBar FooBarInstance로 조합합니다.
Formatter 클래스의 하위 클래스는 FooBarFomatter식으로 명명합니다.
Validator 클래스의 하위 클래스는 FooBarValidator 식으로 명명합니다.
skinning 클래스 : FooBarBackground, FoobarBorder, FooBarSkin, FooBarIcon, FooBarIndicator, FooBarSeparator, FooBarCursor, etc.
utility 클래스 : FooBarUtil (FooBarUtils는 안됨. 패키지는 복수형, 클래스는 단수형으로)
일반 기본 클래스명 FooBarBase: ComboBase, DateBase, DataGridBase, ListBase.


이벤트명 (Event names)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex) move, creationComplete


스타일명 (Style names)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex) color, fontSize


문자열 프라퍼티에 대한 나열값 (Enumerated values for String properties)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex) "auto",  "filesOnly"


상수명 (Constant names)

모두 대문자로 사용하고 단어와 단어의 사이는 언더스코어(_)로 연결합니다.
ex) OFF, DEFAULT_WIDTH

상수(Constant)에 문자열(String 형태)를 지정할 때는 식별자명도 그 무자열에 대응시킵니다.

public static const FOO_BAR:String = "fooBar";


프라퍼티 [변수 및 getter/setter]명 (Property[variable and getter/setter] names)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.

루프 인덱스에 대해 i를 사용하고, 상한값에는 n을 사용합니다. 루프 안에 루프의 인덱스는 j, 상한값에는 m을 사용합니다.

for (var i:int = 0; i < n; i++)
{
for (var j:int = 0; j < m; j++)
{
...
}
}

for-in 루프의 변수는 p("property"의미)를 사용

for (var p:String in o)
{
...
}

getter/setter를 오버라이드하고 기본 getter/setter를 계속 사용하고 싶으면, 기본명 앞에 '$'를 붙인다. 이 getter/setter는 final로 지정되고 더 이상 supergetter/setter에 아무짓도 안하게 된다.

mx_internal final function get $numChildren():int
{
return super.numChildren;
}


스토리지 변수명 (Storage variable names)

getter/setter foo 에 대한 스토리지 변수는 _foo 로 명명 합니다.


메소드명 (Methid names)

선두 문자를 소문자로 시작한 이후는 인터캡스(카멜게이스) 방식으로 명명합니다.
ex) measure(), updateDisplayList()

메소드명은 항상 동사로 합니다.

일반적으로 파라메타가 없는 메소드는 getFooBar()나 setFooBar()의 이름을 사용하는 것이 아니라, 대신에 getter/setter로서 기술합니다. 하지만 getFooBar() 가 많은 처리를 필요로 하는 "무거운" 메소드인 경우에는 특징이 분명히 나타나도록 getter() 보단 대신에 findFooBar(), calculateFooBar(), detemineFooBar(), 등 과 같은 이름을 사용하는 것이 좋습니다.

클래스 메소드를 오버라이드(override)하고 베이스 메소드를 노출하고 싶은 경우는 베이스 명의 머리에 '$'가 붙은 같은 이름의 메소드를 기술합니다. 이 경우 해당 메소드에는 'final'을 표시 하여 슈퍼 메소드의 호출하여 이외의 기능을 포함하지 않게 합니다.
(대체 뭔말인지 ㅜ_ㅜ)

mx_internal final function $addChild(child:DisplayObject):DisplayObject
{
return super.addChild(child);
}


이벤트 핸들러명 (Event handler names)

이벤트 핸들러는 그 이벤트 타입 명칭에 "Handler"를 붙인 이름으로 합니다.
ex) mouseDownHandler()

이벤트 핸들러가 하위 컴포넌트에 이벤트를 디스패치(dispatch)하는 경우(this는 예외), 하위 컴포넌트 이름을 앞에, 핸들러 이름을 뒤에 적어주고 언더스코어(_)로 구분하여 연결 짓는다.
ex) textInput_focusInHandler()


파라미터[인수]명 (Argument names)

setter의 파라미터에는 value (을)를 사용합니다.

올바른 예

public function set label(value:String):void

나쁜 예

public function set label(lab:String):void

다른 좋은 예

public function set label(labelValue:String):void

다른 예

public function set label(val:String):void

이벤트 핸들러의 인수에는 (e, evt, eventObj는 아님) event를 사용하도록 합니다.

protected function mouseDownHandler(event:Event):void


리소스번들명 (Resource bundle names)

만약 리소스번들이 특별한 패키지를 포함하고 있다면 그 패키지와 같은 이름을 번들 이름으로 명명합니다.
ex) controls, {formatters}}, validators


리소스키명 (Resource key names)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex)pm, dayNamesShort


그밖에 명명법 (Miscellaneous nomenclature)


"object"는 막연한 (vague) 뜻이므로 피합니다.

"item"은 data item이지 DisplayObject는 아닙니다.

"renderer"는 data item을 표시하는 DisplyObject입니다.

"type"은 ActionScript3의 자료형입니다. 그러니 "kind"같은 비슷한 단어를 사용합니다.
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2009.09.02 17:50

menu0.addEventListener(MouseEvent.ROLL_OVER, mouseOverEvt);
menu1.addEventListener(MouseEvent.ROLL_OVER, mouseOverEvt);
menu2.addEventListener(MouseEvent.ROLL_OVER, mouseOverEvt);
menu3.addEventListener(MouseEvent.ROLL_OVER, mouseOverEvt);
menu4.addEventListener(MouseEvent.ROLL_OVER, mouseOverEvt);

위와 같은 코딩을 해야할 경우
for (var i:int = 0;i < 5; i++) {
	var mc:MovieClip = this["menu"+i] as MovieClip;
	mc.addEventListener(MouseEvent.ROLL_OVER, mouseOverEvt);
}

와 같이 간단히 표현 할 수 있다.
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★
Flex/AIR/AS3/Etc2009.08.31 17:11


[출처] http://flex4.tistory.com/


저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★

티스토리 툴바