it세미나 naming guidlines for flex

26
2022 년 5 년 22 년 년년년 IT 년년년 년 년 년 IT 사사사 사사 사사 Flex SDK coding conventions and best practices Adobe Open Source. Last Modified: 2008-02-24 19:33:43.0 Powered by Atlassian Confluence 2.7.1, the Enterprise Wiki . Flex SDK coding conventions and best practices Note: This page is not yet complete and has some sections marked TBD. But there's plenty here to get you started! Introduction This document lays out the coding standards for writing open-source Flex framework components in ActionScript 3. Adhering to these standards makes the source code look consistent, well- organized, and professional. Some of these standards are completely arbitrary, since there is not always a “best way” to code. Nevertheless, in the interest of consistency, all commits to the Flex SDK project will be expected to follow these conventions. Contents Naming Language Usage File Organization Formatting ASDoc Naming Choosing good names is critical to creating code that is easy to use and easy to understand. You should always take the time to think about whether you have chosen the right name for something, especially if it is part of the public API. Our naming standards are mostly consistent with those of ECMAScript and Flash Player 9. Abbreviations Avoid them as a general rule. For example, calculateOptimalValue() is a better method name than calcOptVal(). Being clear is more important than minimizing keystrokes. And if you don't abbreviate, developers won't have to remember whether you shortened a word like “qualified” to “qual” or “qlfd”. However, we have standardized on a few abbreviations: acc for accessibility, as in ButtonAccImpl auto for automatic, as in autoLayout auto for automatic, as in autoLayout eval for evaluate, as in EvalBindingResponder impl for implementation, as in ButtonAccImpl info for information, as in GridRowInfo num for number of, as in numChildren min for minimum, as in minWidth max for maximum, as in maxHeight nav for navigation, as in NavBar regexp for regular expression, as in RegExpValidator util for utility, as in StringUtil This list probably does not include all abbreviations that are currently in use. If you're considering using an abbreviation that isn't listed here, please search the source code to determine whether it is already in use. If you don't find it, think twice about whether abbreviating is really appropriate. Occasionally we are (deliberately) inconsistent about abbreviations. For example, we spell out “horizontal” and “vertical” in most places, such as horizontalScrollPolicy and verticalScrollPolicy but we abbreviate them to H and V in the very-commonly-used container names HBox and VBox. Acronyms Various acronyms are common in Flex, such as AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, and XML. 년년년 | 1

Upload: daejin-um

Post on 01-Nov-2014

884 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

IT 사업팀 개발 표준Flex SDK coding conventions and best practices

Adobe Open Source.Last Modified: 2008-02-24 19:33:43.0

Powered by Atlassian Confluence 2.7.1, the Enterprise Wiki.

Flex SDK coding conventions and best practicesNote: This page is not yet complete and has some sections marked TBD. But there's plenty here to get you started!IntroductionThis document lays out the coding standards for writing open-source Flex framework components in ActionScript 3. Adhering to these standards makes the source code look consistent, well-organized, and professional.Some of these standards are completely arbitrary, since there is not always a “best way” to code. Nevertheless, in the interest of consistency, all commits to the Flex SDK project will be expected to follow these conventions.ContentsNamingLanguage UsageFile OrganizationFormattingASDocNamingChoosing good names is critical to creating code that is easy to use and easy to understand. You should always take the time to think about whether you have chosen the right name for something, especially if it is part of the public API.Our naming standards are mostly consistent with those of ECMAScript and Flash Player 9.AbbreviationsAvoid them as a general rule. For example, calculateOptimalValue() is a better method name than calcOptVal().Being clear is more important than minimizing keystrokes. And if you don't abbreviate, developers won't have to remember whether you shortened a word like “qualified” to “qual” or “qlfd”.However, we have standardized on a few abbreviations:

acc for accessibility, as in ButtonAccImpl auto for automatic, as in autoLayout auto for automatic, as in autoLayout eval for evaluate, as in EvalBindingResponder impl for implementation, as in ButtonAccImpl info for information, as in GridRowInfo num for number of, as in numChildren min for minimum, as in minWidth max for maximum, as in maxHeight nav for navigation, as in NavBar regexp for regular expression, as in RegExpValidator util for utility, as in StringUtil

This list probably does not include all abbreviations that are currently in use. If you're considering using an abbreviation that isn't listed here, please search the source code to determine whether it is already in use. If you don't find it, think twice about whether abbreviating is really appropriate.Occasionally we are (deliberately) inconsistent about abbreviations. For example, we spell out “horizontal” and “vertical” in most places, such as horizontalScrollPolicy and verticalScrollPolicy but we abbreviate them to H and V in the very-commonly-used container names HBox and VBox.

AcronymsVarious acronyms are common in Flex, such as AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, and XML.An acronym is always all-uppercase or all-lowercase (e.g., SWF or swf, but never Swf). The only time that all-lowercase is used is when the acronym is used by itself as an identifier, or at the beginning of an identifier, and the identifier should start with a lowercase letter. See the rules below for which identifiers should start with which case.Examples of identifiers with acronyms are CSSStyleDeclaration, IUID, uid, IIME, and imeMode.Word boundariesWhen an identifier contains multiple words, we use two ways of indicating word boundaries: intercaps (as in LayoutManager or measuredWidth) and underscores (as in object_proxy). See the rules below for which method to use.Sometimes it isn't clear whether a word combination has become its own single word, and we are unforunately inconsistent about this in some places: dropdown, popUp, pulldown.Follow the acronym-casing rules even in the rare case that two acronyms must be adjacent. An example (which isn't actually in use) would be something like loadCSSURL(). But try to avoid such names.

페이지 | 1

Page 2: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

Type-specifying namesIf you want to incorporate the type into the name, make it the last “word”. Don't use the old ActionScript 1 convention of concatenating abbreviated type suffixes such as _mc to indicate type. For example, name a border Shape border, borderSkin, or borderShape, but not border_mc.Often, the best name for an object is simply the same as its type, with different casing:var button:Button = new Button();Package namesStart them with a lowercase letter and use intercaps for subsequent words: controls, listClasses.Package names should always be nouns or gerunds (the -ing noun form of a verb), not verbs, adjectives, or adverbs.A package implementing lots of similar things should have a name which is the plural form of the thing: charts, collections, containers, controls, effects, events, formatters, managers, preloaders, resources, skins, states, styles, utils, validators.It is common to use a gerund for the name of a package which implements a concept: binding, logging, messaging, printing. Otherwise, they are generally "concept nouns": accessibility, core, graphics, rpc.A package containing classes that support component FooBar should be called fooBarClasses.File namesFor importable APIs, the file name must be the same as the public API inside. But include files don't have to follow this rule.Start the names of include files for [Style(...)] metadata with an uppercase letter, use intercaps for subsequent words, and make the last word “Styles”: BorderStyles.as, ModalTransparencyStyles.as.Start the names of individual asset files with a lowercase letter and use underscores between words: icon_align_left.png.Namespace namesStart them with a lowercase letter and use underscores between words: mx_internal, object_proxy.Interface namesStart them with I and use intercaps for subsequent words: IList, IFocusManager, IUID.Class namesStart them with an uppercase letter and use intercaps for subsequent words: Button, FocusManager, UIComponent.Name Event subclasses FooBarEvent.Name Error subclasses FooBarError.Name the EffectInstance subclass associated with effect FooBar FooBarInstance.Name Formatter subclasses FooBarFormatter.Name Validator subclasses FooBarValidator.Name skinning classes FooBarBackground, FooBarBorder, FooBarSkin, FooBarIcon, FooBarIndicator, FooBarSeparator, FooBarCursor, etc.Name utility classes FooBarUtil (not FooBarUtils; the package is plural but the class is singular).It is common to name a base class FooBarBase: ComboBase, DateBase, DataGridBase, ListBase.Event namesStart them with a lowercase letter and use intercaps for subsequent words: "move", "creationComplete".Style namesStart them with a lowercase letter and use intercaps for subsequent words: color, fontSize.Enumerated values for String propertiesStart them with a lowercase letter and use intercaps for subsequent words: "auto", "filesOnly", Constant namesUse all uppercase letters with underscores between words: OFF, DEFAULT_WIDTH.The words in the identifier must match the words in the constant value if it is a String:public static const FOO_BAR:String = "fooBar";Property (variable and getter/setter) namesStart them with a lowercase letter and use intercaps for subsequent words: i, width, numChildren.Use i for a loop index and n for its upper limit. Use j for an inner loop index and m for its upper limit.for (var i:int = 0; i < n; i++){ for (var j:int = 0; j < m; j++) { ... }}Use p (for “property”) for a for-in loop variable:for (var p:String in o){ ...}If a class overrides a getter/setter and wants to continue to expose the base getter/setter, it should do so by implementing a property whose name is the base name with a $ prepended. This getter/setter should be marked final and should do nothing more than call the supergetter/setter.mx_internal final function get $numChildren():int{ return super.numChildren;}Storage variable namesGive the storage variable for the getter/setter foo the name _foo.

페이지 | 2

Page 3: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

Method namesStart them with a lowercase letter and use intercaps for subsequent words: measure(), updateDisplayList().Method names should always be verbs.Parameterless methods should generally not be named getFooBar() or setFooBar(); these should be implemented as getter/setters instead. However, if getFooBar() is a slow method requiring a large amount of computation, it should be named findFooBar(), calculateFooBar(), determineFooBar(), etc. to suggest this, rather than being a getter.If a class overrides a method and wants to continue to expose the base method, it should do so by implementing a method whose name is the base name with a $ prepended. This method should be marked final and should do nothing more than call the supermethod.mx_internal final function $addChild(child:DisplayObject):DisplayObject{ return super.addChild(child);}

Event handler namesEvent handlers should be named by concatenating “Handler” to the type of the event: mouseDownHandler().If the handler is for events dispatched by a subcomponent (i.e., not this), prefix the handler name with the subcomponent name and an underscore: textInput_focusInHandler().Argument namesUse value for the argument of every setter:Do this:public function set label(value:String):voidNot this:public function set label(lab:String):voidOr this:public function set label(labelValue:String):voidOr this:public function set label(val:String):voidUse event (not e, evt, or eventObj) for the argument of every event handler:protected function mouseDownHandler(event:Event):voidResource bundle namesIf a resource bundle contains resources for a particular package, name the bundle the same as the package: controls, {formatters}}, validators. Resource key namesStart them with a lowercase letter and use intercaps for subsequent words: pm, dayNamesShort.Miscellaneous nomenclatureAvoid “object” because it is vague.An “item” is a data item, not a DisplayObject.A “renderer” is a DisplayObject that displays a data item.A “type” is an AS3 type; use "kind" otherwise.Language UsageThis section discusses how we use the language constructs of ActionScript 3, especially when there are multiple ways to express the same thing.Compilation optionsCompile with the options -strict and -show-actionscript-warnings. (These are the defaults in the flex-config.xml file.)Property-based APIsFavor property-based APIs rather than method-based APIs, because these are more suitable for declarative-style MXML programming.Type declarationsWrite a type annotation for every constant, variable, function argument, and function return value, even if the annotation is simply :* to indicate “no type”.Do this:var value:*;Not this:var value;Use the narrowest type that is appropriate. For example, a loop index should be a int, not a Number, and certainly not an Object or *. As another example, a mouseDownHandler should declare its argument as event:MouseEvent, not event:Event.Use int for integers, even if they can't be negative. Use uint only for RGB colors, bit masks, and other non-numeric values.Use * only if the value can be undefined. You should generally use Object rather than *, with null being the “object doesn't exist” value.If you declare something to be of type Array, add a comment of the form /* of ElementType */ immediately after Array indicate the type of the array elements. A future version of the language is likely to have typed arrays.Do this:var a:Array /* of String */ = [];Not this:var a:Array = [];And this:function f(a:Array /* of Number */):Array /* of Object */

페이지 | 3

Page 4: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

{ ...}Not this:function f(a:Array):ArrayLiteralsundefinedAvoid using this when possible. It is only necessary when dealing with values whose compile-time is type is *, and you should be using * sparingly as well.int and uint literalsDo not use a decimal point in a integer.Do this:2Not this:2.Use a lowercase x and uppercase A-Z in hexadecimal numbers.Do this:0xFEDCBANot this:0Xfedcba Always write an RGB color as a six-digit hexadecimal number.Do this:private const BLACK:uint = 0x000000;Not this:private const BLACK:uint = 0; When dealing with indices, use the value -1 to mean “no index”.Number literalsIf a Number value typically can be fractional, indicate this by using a decimal point, and follow the decimal point by a single trailing zero.Do this:alphaFrom = 0.0;alphaTo = 1.0;Not this:alphaFrom = 0;alphaTo = 1;However, don't do this for pixel coordinates, which are by convention integral even though they can in principle be fractional.Do this:var xOffset:Number = 3;Not this:var xOffset:Number = 3.0;Use e, not E, when using exponential notation.Do this:1.0e12Not this:1.0E12Use the default value NaN as the “not set” value for a Number.String literalsUse quotation marks (double quotes), not apostrophes (single quotes), to delimit strings, even if that string contains a quotation mark as a character.Do this:"What's up, \"Big Boy\"?"Not this:'What\'s up, "Big Boy"?'Use \u, not \U, for unicode escape sequences.Array literalsUse Array literals rather than new Array().Do this:[]Not this:new Array()And this:[ 1, 2, 3 ]Not this:new Array(1, 2, 3)Use the Array constructor only to allocate an array of a prespecified size, as in new Array(3), which means [ undefined, undefined, undefined ], not [ 3 ].Object literalsUse Object literals rather than new Object().Do this:{}Not this:new Object()

페이지 | 4

Page 5: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

And this:o = { a: 1, b: 2, c: 3 };Not this:o = new Object();o.a = 1; o.b = 2; o.c = 3;Or this:o = {};o.a = 1; o.b = 2; o.c = 3;Function literalsAvoid using function literals to define anonymous functions; use a class method or package function instead.If you must use a function literal, declare a return type, and terminate the last statement inside the function block with a semicolon.Do this:function(i:int):void { doIt(i - 1); doIt(i + 1); }Not this:function(i:int) { doIt(i - 1); doIt(i + 1) }RegExp literalsUse the literal notation rather than constructing a RegExp instance from a String.Do this:var pattern:RegExp = /\d+/g;Not this:var pattern:RegExp = new RegExp("\\d+", "g");XML and XMLList literalsUse the literal notation rather than constructing an XML instance from a String.Do this:var node:XML = <name first="Jane" last="Doe"/>;Not this:var node:XML = new XML("<name first=\"Jane\" last=\"Doe\"/>");Use double-quotes rather than single-quotes around XML attribute values:Do this:var node:XML = <name first="Jane" last="Doe"/>;Not this:var node:XML = <name first='Jane' last='Doe'/>;Class literalsUse a fully-qualified class literal only if necessary to disambiguate between two imported classes with the same unqualified name.Do this:import mx.controls.Button;...var b:Button = new Button();Not this:import mx.controls.Button;...var b:Button = new mx.controls.Button();But here a fully-qualified name is required and therefore qppropriate:import mx.controls.Button;import my.controls.Button;...var b:Button = new mx.controls.Button();ExpressionsParenthesesDon't use unnecessary parentheses with common operators such as +, -, *, /, &&, ||, <, <=, >, >=, ==, and !=.Do this:var e:Number = a * b / (c + d);Not this:var e:Number = (a * b) / (c + d);And this:var e:Boolean = a && b || c == d;Not this:var e:Boolean = ((a && b) || (c == d));The precedence rules for other operators are harder to remember, so parentheses can be helpful with them.CoercionDon't compare a Boolean value to true or false; it already is one or the other.Do this:if (flag)Not this:if (flag == true)Do this:var flag:Boolean = a && b;

페이지 | 5

Page 6: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

Not this:var flag:Boolean = (a && b) != false;Explicitly coerce an int, uint, Number or String to a Boolean:Do this:if (n != 0)Not this:if (n)And this:if (s != null && s != "")Not this:if (s)Let object references implicitly coerce to a Boolean:Do this:if (child)Not this:if (child != null)And this:if (!child)Not this: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.Do this:IUIComponent(child).documentNot this:(child as IUIComponent).documentComparisonWrite comparisons in the order that they read most naturally:Do this:if (n == 3) // "if n is 3"Not this:if (3 == n) // "if 3 is n"++ and -- operatorsIn 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.Do this:for (var i:int = 0; i < n; i++)Not this:for (var i:int = 0; i < n; ++i)Ternary operatorUse a ternary operator in place of a simple if/else statement, especially for null checks:Do this:return item ? item.label : null;Not this:if (!item) return null;return item.label;But don't use nested ternary operators in place of complex if/else logic.Do this:if (a < b) return -1;else if (a > b) return 1;return 0;Not this:return a < b ? -1 : (a > b ? 1 : 0);new operatorUse parentheses after the class reference, even if the constructor takes no arguments.Do this:var b:Button = new Button();Not this:var b:Button = new Button;StatementsTerminate each statement with a semicolon. Do not use the optional-semicolon feature of ActionScript 3.Do this:a = 1;b = 2;c = 3;Not this:a = 1b = 2c = 3include statements

페이지 | 6

Page 7: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

Use include, not the deprecated #include. Terminate the include statement with a semicolon, like any other statement.Do this:include "../core/ComponentVersion.as";Not this:#include "../core/ComponentVersion.as"Use relative, not absolute, paths.import statementsImport specific classes, interfaces, and package-level functions rather than using the * wildcard.Do this:import mx.controls.Button;import flash.utils.getTimer;Not this:import mx.core.*;use namespace statementsAvoid them; use :: syntax instead on each reference to something in a non-open namespace.Do this:import mx.core.mx_internal;

// Later, in some method...mx_internal::doSomething();Not this:import mx.core.mx_internal;use namespace mx_internal;

// Later, in some method...doSomething();if statementsIf the various branches of an if/else statement involve single statements, don't make them into blocks.Do this:if (flag) doThing1();Not this:if (flag){ doThing1();}And this:if (flag) doThing1();else doThing2():Not this:if (flag){ doThing1();}else{ doThing2();}But if any branch has multiple statements, make all of them into blocks.Do this:'if (flag){ doThing1();}else{ doThing2(); doThing3();}Not this: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.

페이지 | 7

Page 8: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

Do this:if (!condition1) return false;...if (!condition2) return false;...if (!condition2) return false;...return true;Not this:if (condition1){ ... if (condition2) { ... if (condition3) { ... return true; } }}return false;for statementsMake the body of a for loop be a block, even if it consists of only one statement.Do this:for (var i:int = 0; i < 3; i++){ doSomething(i);}Not this:for (var i:int = 0; i < 3; i++) doSomething(i);Store the upper limit for a for-loop variable in a local variable so that it isn't re-evaluated every time through the loop (unless, of course, it needs to be re-evaluated on each interation).Do this:var n:int = a.length;for (var i:int = 0; i < n; i++){ ...}Not this:for (var i:int = 0; i < a.length; i++){ ...}Declare the loop var inside the parentheses of the for statement, unless it is reused elsewhere.Do this:for (var i:int = 0; i < 3; i++)Not this:var i:int;for (i = 0; i < 3; i++){ ...}while statementsMake the body of a while loop be a block, even if it consists of only one statement.Do this:while (i < n){ doSomething(i);}Not this:while (i < n) doSomething(i);do statementsMake the body of a do loop be a block, even if it consists of only one statement.Do this:do{

페이지 | 8

Page 9: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

doSomething(i);}while (i < n);Not this:do doSomething(i);while (i < n);switch statementsMake 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.Do this:switch (n){ case 0: { foo(); break; }

case 1: { bar(); return; }

case 2: { baz(); return; }

default: { blech(); break; }}Not this:switch (n){ case 0: foo(); break;

case 1: { bar(); } break;

case 2: baz(); return; break;

default: blech();}return statementsDo not enclose a return value in unnecessary parentheses.Do this:return n + 1;Not this:return (n + 1);Returning from the middle of a method is OK.DeclarationsDon't declare multiple constants or variables in a single declaration.Do this:var a:int = 1;var b:int = 2;Not this:var a:int = 1, b:int = 2;

페이지 | 9

Page 10: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

The override keywordIf present, put this first, before the access specifier.Do this:override protected method measure():voidNot this:protected override method measure():voidAccess specifiersPut an explicit access specifier everywhere that one is allowed. Do not use the fact that internal is the implicit access specifier if none is written.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.The static keywordIf present, put this after the access specifier.Do this:public static const MOVE:String = &quot;move&quot;Not this:static public const MOVE:String = &quot;move&quot;;The final keywordIf present, put this after the access specifier.Do this:public final class BoxDirectionNot this:final public class BoxDirectionDeclare all “enum classes” to be final.Also declare “base” properties and methods (those starting with $) to be final.ConstantsAll constants should be static. There is no reason to use an instance constant, since all instances would store the same value.Do this:public static const ALL:String = "all";Not this:public const ALL:String = "all";VariablesIf a variable needs to be initialized to a non-default value, do this in the declaration, not in the constructor.Do this:private var counter:int = 1;Not this:private var counter:int;...public function MyClass(){ super(); ... counter = 1;}Local variablesDeclare local variables at or just before the point of first use. Don't declare them all at the top of the function.Do this: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);}Not this: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);}Declare local variables only one per function. ActionScript 3 doesn't have block-scoped locals.Do this:var a:int;if (flag)

페이지 | 10

Page 11: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

{ a = 1; ...}else{ a = 2; ...}Not this:if (flag){ var a:int = 1; ...}else{ var a:int = 2; ...}And this:var i:int;for (i = 0; i &lt; n; i++){ ...}

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

for (var i:int = 0; i &lt; n; i++){ ...}ClassesIf a class simply extends Object, omit the extends Object clause.The only “bare statements” in a class should be calls to static class initialization methods, such as loadResources().ConstructorsIf a classes has instance members, write a constructor, and make it explicitly call super(), even if it does nothing else.If the constructor takes arguments that set instance vars, give the the same names as the instance vars.Do this:public function MyClass(foo:int, bar:int){ this.foo = foo; this.bar = bar;}Not this:public function MyClass(fooVal:int, barVal:int){ foo = fooVal; bar = barVal;}Don't set the classes' instance vars in the constructor; do this in the declarations of the instance vars. However, if you need to reset the values of inherited instance vars, do this in the consturctor.InterfacesTBDNamespacesTBDImplementing propertiesTBDMetadataTBDPackagesOne public API (usually a class, sometimes a namespace or function) inside the package statement.

페이지 | 11

Page 12: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

Helper classesbare statements

File OrganizationThis section presents the order in which a Flex framework file should be organized.Copyright noticeInclude a copyright notice at the top of every .as file in the framework. The format for the 2008 open-source copyright is given below.//////////////////////////////////////////////////////////////////////////////////// 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.//////////////////////////////////////////////////////////////////////////////////Note that it is 80 characters wide.package statementTBDimport statementsTBDuse namespace statementTBDClass metadataOrganize the class metadata into sections, in the order Events, Styles, Effects, Excluded APIs, and Other Metadata.Put a minor section header before each section. Note that the minor section headers are 40 characters wide and that there are two spaces between the // and the section name. Alphabetize the metadata by name="..." within each section. In the Other Metadata section, alphabetize them by metadata tag name.//--------------------------------------// Events//--------------------------------------/** * ASDoc comment. */[Event

/** * ASDoc comment. */[Event

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

/** * ASDoc comment. */[Style

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

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

/** * ASDoc comment. */[Effect

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

페이지 | 12

Page 13: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

//--------------------------------------// 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;)]Class declarationTBDinclude statement for Version.asEvery class should include core/Version.as using a relative path. This file contains the declaration for static const VERSION:String.include "../core/Version.as";Implementation notesTBDClass initializationTBDClass constantsPut static const declarations here.ActionScript 3 does not allow a constant to have type Array or Object. Declare such constants using static var rather than static const, but put them in this section because they are conceptually constants.Class mix-insDeclare any static variables of type Function that get mixed in rather than being declared as methods.Class resourcesTBDClass variablesTBDClass propertiesDeclare static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.Class methodsPut static function declarations here.ConstructorTBDVariablesTBDOverridden propertiesPut overrides of non-static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.PropertiesPut new non-static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.Overridden methodsPut overrides of non-static functions here.MethodsPut new non-static functions here.Overridden event handlersPut overrides of event handlers here.Event handlersPut new event handlers here.Out-of-package helper classesTBD

FormattingThis section covers how a Flex framework class should be formatted.Line widthWrap code to 80-character lines. This has the following advantages:

Developers with smaller screens don't have to scroll horizontally to read long lines. A comparison utility can display two versions of a file side-by-side. The font size can be increased for projection before a group without requiring scrolling. The source code can be printed without clipping or wrapping.

IndentationUse 4-space indentation. Configure your text editor to insert spaces rather than tabs. This allows another program that uses a different indentation setting, such as Notepad with its 8-character indents, to display the code without disfiguring it.Section separatorsThe major section separators inside a class look like this:

페이지 | 13

Page 14: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

//-------------------------------------------------------------------------- // // Overridden methods // //--------------------------------------------------------------------------They extend from column 4 through column 80. The text is indented to column 8.The minor section separators inside a class, such as between properties, look like this: //---------------------------------- // visible //----------------------------------They extend from column 4 through column 40. The text is indented to column 8.Put a single blank line above and below the separators.Separation of declarationsUse a single blank line as a vertical separator between constant, variable, or function declarations./** * @private * Holds something. */var a:Number;

/** * @private */var b:NumberMetadataTBDDo this:Inspectable[a="1", b="2"]Not this:Inspectable[a=1 b=2]Array indexingDon't put any spaces before or after the left bracket or before the right bracket.Do this:a[0]Not this:a[ 0 ]CommasFollow a comma with a single space. This applies to argument lists, array literals, and object literals.Array literalsPut a single space after the left bracket and a single space before the right bracket, and put a single space after (but none before) each comma.Do this:[ 1, 2, 3 ]Not these:[1, 2, 3] [1,2,3]An empty array is a special case.Do this:[]Not this:[ ]Format lengthy array initializers requiring multiple lines with aligned brackets:static var numberNames:Array /* of String */ =[ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];Object literalsPut a single space after the left brace and a single space before the right brace, and put a single space after the colon separating the property name and value.Do this:{ a: 1, b: 2, c: 3 }Not these:{a: 1, b: 2, c: 3}

페이지 | 14

Page 15: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

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

{a:1,b:2,c:3}An empty Object is a special case.Do this:{}Not this:{ }Format lengthy object initializers requiring multiple lines with aligned braces: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 literalsTBDvar f:Function;

f = function():void{ doSomething();};Type declarationsDon't put any spaces before or after the colon that separates a variable, parameter, or function from its type.Do this:var n:Number;Not these:var n : Number;

var n: Number;And this:function f(n:Number):voidNot these:function f(n : Number) : void

function f(n: Number): voidOperators and assignmentsPut a single space around the assignment operator.Do this:a = 1;Not this:a=1;Put a single space around infix operators.Do this:a + b * cNot this:a+b*cPut a single space around comparison operators.Do this:a == bNot this:a==bDon't put any spaces between a prefix operator and its operand.Do this:!oNot this:! oDon't put any spaces between a postfix operator and its operand.Do this:i++Not this:i ++Statements

페이지 | 15

Page 16: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

Start each statement on a new line, so that you can set a breakpoint on any statement.Do this:a = 1;b = 2;c = 3;Not this:a = 1; b = 2; c = 3;Align the braces of statement blocks.Do this:function f():void{ var n:int = numChildren; for (var i:int = 0; i < n; i++) { if () { x = horizontalGap * i; y = verticalGap * i; } }}Not this:function f():void { var n:int = numChildren; for (var i:int = 0; i < n; i++) { if () { x = horizontalGap * i; y = verticalGap * i; } }}Constant and variable declarationsTBDFunction declarationsTBDDo this:f(a, b)''Not these:''f(a,b)

f( a, b )If the parameters have to wrap, indent the subsequent lines after the left parenthesis. Put multiple parameters per line if they fit. Otherwise, put one per line. If even one won't fit, put the first one on the second line, indented past the beginning of the function name.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):voidFunction callsTBDDo this:f(a, b)Not these:f(a,b)

f( a, b )if statementsFollow the if keywords with a single space before the left parenthesis. Don't put any spaces after the left parenthesis or before the right parenthesis.Do this:if (a < b)Not these:if(a < b)

if( a < b )

if ( a < b )

페이지 | 16

Page 17: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

else if ?multiline ?for statementsFollow the for keyword with a single space before the left parenthesis. Don't put any spaces after the left parenthesis or before the right parenthesis.Do this:for (var i:int = 0; i < n; i++)Not these:for(var i:int = 0; i < n; i++)

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

for ( var i:int = 0; i < n; i++ )If the for clause needs to wrap, indent the subsequent lines after the left parenthesis.for (var aLongLoopVariableName:int = aLongInitialExpression; aLongLoopVariableName < aLongUpperLimit; aLongLoopVariableName++)switch statementsFollow 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.Do this:switch (n)Not these: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.Do this:switch (n){ case 1: { a = foo(); break; }

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

default: { a = blech(); break; }}Not these:switch(n)

switch( n )

switch ( n )class and interface declarationsbraces are always balancedno braces around single linessingle statement per line

ASDocProperty commentsOnly document the first function of a get/set function pair for a property. The idiom for defining and documenting a property is:/** * @private * The backing variable for the property. */private var _someProp:Foo;

/** * Place all comments for the property with the getter which is defined first.

페이지 | 17

Page 18: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

* Comments should cover both get and set behavior as appropriate. */public function get someProp():Foo{ ...} /** * @private */public function set someProp(value:Foo):void{ ...}Also, ASDoc comments are applied to metadata tags as well as other constructs within a class so take care that your comments apply to the proper target. If you tag a property as Bindable, your property comment must precede the get function, not the Bindable metadata tag.Do this:[Bindable("somePropChanged")]

/** * Comments for someProp */public function get someProp():FooNot this:/** * Comments for someProp */[Bindable("somePropChanged")]

public function get someProp():Foo

- 참고 : 컴포너트 유료사이트 - http://www.infosoftglobal.com/- 어도브 컴포넌트 포탈

http://www.adobe.com/cfusion/exchange/index.cfm?s=5&from=1&o=desc&cat=186&l=- 1&event=productHome&exc=15

- 구글 오픈 컴포넌트http://code.google.com/p/flexlib/wiki/ComponentList

<참고 : 델파이의 네이밍룰을 이용해 FLEX 대비>1. 명명 규칙

명명법 요지 : 변수 타입(Variable Type)의 약어를 접두어롤 표시하는 것은, FLEX 의 객체 조사기(Object Inpector) 와 코드 탐색기(Code Explore) 가 리스트를 알파벳 순서로 정렬하기 때문이다. 따라서 같은 타입 별로 분류되어 많은 변수명과 컴포넌트 중에서 빠르게 찾을 수 있도록 한다.

2. 기본 명명 규칙

개요 : 낙타식 명명법 을 쓴다. 이름을 단어별로 첫번째 문자를 대문자로 나머지 문자를 소문자로 이름 짖는다. (ex: UserGrade, IsCertified, GroupPartName)

① 폼 파일 : 폼의 용도를 나타내는 단어 뒤에 Frm 을 붙인 이름을 사용한다. 예를 들어 메인폼의 파일

페이지 | 18

Page 19: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

이름은 MainFrm.mxml 가 된다.② 데이터 모듈 파일 : 데어터 모듈의 용도를 나타내는 단어 뒤에 DM 을 붙인 이름을 사용한다.

예를 들어 메인 데이터 모듈의 파일 이름은 MainDM.mxml 가 된다.③ 기본 변수와 상수

- 상수 (Constance) : 원칙적으로 대문자로 이름짖는다. (ex: MAX_STEP).                               문자열은 예외로 S 소문자 접두어를 붙인다. (ex: sXXXX)- 함수 파라미터 (Procedure Parameter) : A 대문자 접두어를 붙인다. (ex: AXXX)- 스트링 변수 (String Variable) : STR 소문자 접두어를 붙인다. (ex: strXXXX)- 배열 변수 (Array Variable) : SZ 소문자 접두어를 붙인다. (ex: szXXXX)- 숫자 변수 (Number Variable) : N 소문자 접두어를 붙인다. (ex: nXXXX)- 실수 변수 (Floating Variable) : D 소문자 접두어를 붙인다. (ex: dXXXX)- 부울린 변수 (Boolean Variable) : B 소문자 접두어를 붙인다. (ex: bXXXX)기타 타입은 타입의 첫번째 문자를 소문자로 접두어를 붙인다. (ex: Word: wXXXX)

④ 변수 위치- 전역 변수 (Global Variable) : G 소문자 접두어를 붙인다. 기존이름에 추가.(ex: gstrXXX, gnXXX)- 로컬 변수 (Local Variable) : L 소문자 접두어를 붙인다. 기존이름에 추가.(ex: lstrXXX, lnXXX)

⑤ 레코드- 레코드는 최소 기능별로 분류하여, 멤버 변수의 수가 많지 않게한다. 레코드 멤버 변수의 명명 기본규칙은변수형 접두어 없이 M 소문자 접두어를 붙인다. (ex. mXXXX)그러나 멤버 변수의 변수 타입이 중요하거나, 비슷한 이름의 변수 사이의 구분이 필요할 때는 변수형 접두어를 붙인다. (ex: mstrXXXX, mnXXXX) 또한 멤버 변수가 많구, 그룹별로 구분지어야 한다면 그룹명을 접두어로 붙인다.(ex: 유료회원, 무료회원 으로 구분할때.  mPayID, mPayPW, mFreeID, mFreePW...)

⑥ 클래스- 클래스는 변수 기능별로 분류하여 레코드로 정의해 놓으면, 용도와 기능별로 변수 관리가 편하고 멤버변수를 줄일 수 있습니다.- 클래스 멤버 변수의 명명 기본규칙은 변수형 접두어 없이 F 대문자 접두어를 붙인다. (ex. FXXXX)- 복수개의 변수는 List 접미어를 붙인다. (s or List 둘다 좋은 접미어 인데, s 접미어는 쉽게 구분이 안된다는 이유로 List 를 추천합니다.) (ex: FPayIDList: TStringList)

3. 컴포넌트 명명 규칙

모든 컴포넌트를 명명규칙에 따라 명명하지는 않습니다. 핸들링 하는 컴포넌트만 명명법을 적용합니다. 가령 TSplitter 는 폼위에 올려놓구 쓰지만 코드에서 핸들링하는 분은 거의 없을 겁니다. 그래서 Splitter1이름을 그냥 쓰죠.. 또한 폼에 많은 TLabel 을 올려놓지만, 코드에서 TLabel.Caption 에 값을 쓰는 TLabel 만lbl 접두어를 붙입니다. 써드파티 컴퍼넌트도 비슷한 원리로 명명합니다.

① Form폼형은 접두어로 frm 을 붙인다. 때때로 TForm 을 상속받은 클래스가 두개 이상일때 구분을 용이하게 합니다.(ex: frmMain)

② Standard Tapfms        TFramemm        TMainMenupm        TPopupMenummi        TMainMenuItempmi        TPopupMenuItemlbl        TLabeledt        TEditmem        TMemobtn        TButtoncb        TCheckBoxrb        TRadioBoxlb        TListBox

페이지 | 19

Page 20: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

cb        TComboBoxscb        TScrollBargb        TGroupBoxrg        TRadioGrouppnl        TPanelal        TActionList

2. Addition Tabbbtn        TBitBtnsbtn        TSpeedButtonmedt        TMaskEditsg        TStringGriddg        TDrawGridimg        TImageshp        TShapebvl        TBevelsbx        TScrollBoxclb        TCheckListBoxspl        TSplitterstx        TStaticTextcb        TControlBarae        TApplicationEventct        TChart

③ Win32 Tabtc        TTabControlpc        TPageControlil        TImageListredt        TRichEdittbr        TTrackBarpb        TProgressBarud        TUpDownhk        THotKeyani        TAnimationdtp        TDateTimePickertv        TTreeViewlv        TListViewhdr        THeaderControlsb        TStatusBarclb        TCoolBarps        TPageScroller

④ System Tabtm        TTimerpb        TPaintBoxmp        TMediaPlayeroc        TOleContainerddcc        TDDEClientConvddci        TDDEClientItemddsc        TDDEServerConvddsi        TDDEServerItem

⑤ Internet Tabcs        TClientSocketss        TServerSocketwd        TWebDispatcherpp        TPageProducertp        TQueryTableProducerdstp        TDataSetTableProducerdspp        TDataSetPageProducerwb        TWebBrower

⑥ Data Access Tabds        TDataSource

페이지 | 20

Page 21: It세미나 Naming Guidlines For Flex

2023 년 4 월 8 일 土요일 IT 사업팀 엄 대 진

tbl        TTableqry        TQuerydb        TDateBasesn        TSessionbm        TMatchMoveusql        TUpdateSQL

⑦ Data Controls Tabdbg        TDBGriddbn        TDBNavigatordbt        TDBTextdbe        TDBEditdbm        TDBMemodbi        TDBImagedblb        TDBListBoxdbcb        TDBComboBoxdbch        TDBCheckBox........

⑧ Dialogs Tabod        TOpenDialogsd        TSaveDialogopd        TOpenPictureDialogspc        TSavePictureDialogfd        TFontDialogcd        TColorDialogpd        TPrintDialogpsd        TPrintSetupDialogfd        TFindDialogrd        TReplaceDialog

페이지 | 21