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="horizontalAlign", kind="style")]
[Exclude(name="verticalAlign", kind="style")]

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

[DefaultBindingProperty(source="text", destination="text")]
[IconFile("Text.png")]


클래스 선언

 
후일 발표 예정


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 코멧'★

티스토리 툴바