Flash Builder 4 -> Button

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-21 (水) 18:31:03 | 最終更新:2010-07-25 (日) 2:21:18

Button
spark.components
mx.controls

 

クリックイベント登録
FB4

FB4 上ではこちらから。

テキストボックスに関数名を記入してもよし。
ドロップダウンから選択してもよし。
 

イベントハンドラーを生成

[mxml]

[/mxml]
上記のコードが自動生成される。
 

サービスの呼び出しを生成

あ、ちなみに サービスと接続 してないと、この選択肢は表示されない。
[mxml]




[/mxml]
もう少し多めにコードを自動生成してくれる。
 

AS
Actionscript 3.0 on Flex 4

  1. import flash.events.Event;
  2.  
  3. var myButton:Button = new Button();
  4. myButton.addEventListener( MouseEvent.CLICK, hoge(event:MouseEvent) );
Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-21 (水) 18:31:03 | 最終更新:2010-07-25 (日) 2:21:18

文字列の検索・置換

Posted by muchag | ActionScript 3.0 |
初回投稿:2010-07-20 (火) 2:23:17 | 最終更新:2011-01-09 (日) 13:43:57

ActionScript 3.0 (含、Flex)
検索
ActionScript 3

  1. String.search(pattern:*):int

指定された pattern を検索し、最初に一致したサブストリングのインデックスを返します。一致するサブストリングがなかった場合、メソッドは -1 を返します。

ActionScript 3.0 言語およびコンポーネントリファレンス:String

 

置換
ActionScript 3

  1. String.replace(pattern:*, repl:Object):String

指定された pattern をストリングと照合し、新しいストリングを返します。
この新しいストリングでは、pattern と最初に一致した部分が repl で指定された内容に置き換えられます。
pattern パラメータには、ストリングまたは正規表現を指定できます。
repl パラメータには、ストリングまたは関数を指定できます。
関数を指定した場合、一致した部分は、関数によって返されるストリングに置き換えられます。
元のストリングは変更されません。

ActionScript 3.0 言語およびコンポーネントリファレンス:String

第2引数は Object 型なんだね。
置換後文字列なわけだから、てっきり String 型かと。。。
 

正規表現

正規表現

正規表現リテラルを囲む区切り文字はスラッシュ(/)です。

Flash 用 ActionScript 3.0 のプログラミング:正規表現の基礎 正規表現の使用の概要

正規表現処理用に RegExp というクラスがある。

ActionScript 3

  1. var pattern1:RegExp = new RegExp("test-\\d", "i");
  2. var pattern2:RegExp = /test-\d/i;

ActionScript 3.0 言語およびコンポーネントリファレンス:RegExp
 

利用例
ActionScript 3

  1. var str:String = "she sells seashells by the seashore.";
  2. var pattern:RegExp = /sh\w*/;
  3. trace(str.match(pattern)); // output: she

Flash 用 ActionScript 3.0 のプログラミング:フラグとプロパティ
 

チェック

◆ActionScript 3.0 言語およびコンポーネントリファレンス:XML

ActionScript 3

  1. XML.replace(propertyName:Object, value:XML):XML

 
◆配列、文字列、正規表現(ActionScript3):Stringの正規表現メソッド
文字列置換に関数を利用する例が載っている。

Posted by muchag | ActionScript 3.0 |
初回投稿:2010-07-20 (火) 2:23:17 | 最終更新:2011-01-09 (日) 13:43:57

正規表現

Posted by muchag | ActionScript,PHP |
初回投稿:2010-07-19 (月) 19:05:29 | 最終更新:2017-12-24 (日) 18:21:29

文字列の検索・置換

正規表現(regular expression) とは、文字列を一般化して表記する手法

素晴らしいのは、ルールが世界共通。(なんだろうな)
よほど古いものでない限り、どの言語でも同じルール を用いる。(んだろうな)
(何々言語では、何々は使えないよ~ という情報があればぜひコメントに。。。)

だからこそ、覚えていて損はない どころか 覚えないといけない。

そういうわけで、やろうやろうと思いつつ放置していた 正規表現 まとめに
重い腰を上げてみる。

オンラインチェックツール

Dan’s Tools:Regex Pal
→一番軽くてよさそう

RegExr:Learn, Build, & Test RegEx v3.1
→素晴らしい。色々と機能があって、メニューから選べる。Cookie が無効だと利用できない

regex101.com:Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript
→初っ端のロード時間が長いけど、素晴らしい!。Cookie が無効だと利用できない

REGEXPER
→パターンを入力して [Display]。構文が間違っていれば赤くなって、修正箇所を ^ で示してくれる。合っていれば、図解してくれる

Regulex:JavaScript Regular Expression Visualizer.
→UI は一番好き。オプションにも対応。図解を画像で保存したり、自サイトへ埋め込めるように iframe タグを発行してくれる。エラー検知がないのが残念

特殊文字(メタキャラクタ)

全て半角文字。

特殊文字 意味
^ 行頭
$ 行末
. 任意の一文字
[ ] 括弧内のいずれかの一文字
[^ ] 括弧内のいずれかの一文字以外
| OR
* 直前の一文字の0回以上の繰り返し
+ 直前の一文字の1回以上の繰り返し
? 直前の一文字の0回または1回(2回以上はNG)
( ) グルーピング
選択制御文字 | の適用範囲を限定する場合
繰り返し制御文字の適用範囲を指定する場合
後方参照を使用する場合
\ エスケープキャラクタ

 

メタシーケンス

正規表現パターンの中で特別な意味を持つ一連の文字を メタシーケンス という。
サイトによって載っている情報に過不足がある ので、言語依存のものもありそう。

メタシーケンス 意味
\<oct> を8進数とみなして、それを文字コードに持つ文字
\x<hex> を16進数とみなして、それを文字コードに持つ文字
{n} 直前の文字の繰り返し回数 n 回
{n,} 直前の文字の繰り返し回数 n 回以上
{m,n} 直前の文字の繰り返し回数 m 回以上 n 回以下
\a ベル (\x07)
\A 文の先頭
\b バックスペース (\x08)、単語境界
\B 単語境界以外
\d 数字
\D 数字以外
\e esc
\f フォームフィード(改ページ) (\x0C)
\G 前にm//gが起きた
\n 改行 (\x0A)
\r キャリッジリターン (\x0D)
\s タブ、スペース、改行(\t、 、\f、\r、\n)
\S タブ、スペース、改行以外
\t タブ (\x09)
\unnnn 16 進数 nnnn で指定される文字コードを持つ Unicode 文字にマッチ
\v 垂直タブ (\x0B)
\w 英単語アンダーバー([0-9a-zA-Z_])
\W 英単語アンダーバー以外([^0-9a-zA-Z_])
\\xnn 16 進数 nn で指定される文字コードを持つ ASCII 文字にマッチ
\z EOF(End Of File) 記号 (\x1A)
\< 英単語の始まりにマッチ(文字ではない)
\> 英単語の終わりにマッチ(文字ではない)
\<char> 上記以外の文字の場合は そのもの
(メタキャラクタのエスケープに使用)

 

具体例
表記 意味 ヒット対象
.* 複数. が続く .*A.* BBBBABB、BBBBA、ABBB、A等
c* cの文字が続く c*A ccccA、ccA、cA、A等
c+ cの文字が1文字以上 c+A cA、cccA等。Aはダメ
.+ 空白以外 A.+ ABCD、AAA、AE等。A BCD、A AA、A等はダメ
c? cの文字が1文字、もしくは無し MAC ?OS MACOS、MAC OS
c|d(or記号) cかdどちらか (A|B)C AC、BC
(c|d)? cかdどちらか、もしくは無し (A|B)?C AC、BC、C
表記 意味 ヒット対象
[cde] []内のどれか一つ [cde]A cA、dA、eA
[0-9A-Za-z] 数字とアルファベット [0-9A-Za-z] 0、5、e、H、U等
[]cde] cde]の内どれか []cde]A ]A、cA、dA、eA
[.*] .か*文字 A[.*]B A.B、A*B
[^0-9] 0-9以外 [^0-9a-z]A AA、BA、_A、 A等。5A、bA、yA等はダメ
表記 意味 ヒット対象
^c 先頭がc ^AC ACbcd、ACEFG、AC260等
^[0-9][0-9] 先頭が00~99 ^[0-9][0-9] 00ABGT、48tgh、917、1747等
c$ 最後がc AC$ 1560AC、gaACAC、BVFAC等
^$ ^$ 空のみ
^.*$ 全ての文 ^.*$ 何でも良い
表記 意味 ヒット対象
c\{n\} cがn文字続く A\{3\} AAA
c\{n,\} cがn文字以上続く A\{3,\} AAA、AAAAA、AAAAAAA等
c\{n,m\} cがn回からm回 A\{3,4\} AAA、AAAA
表記 意味 ヒット対象
[ぁ-ん一-龠ァ-ヾー] 日本語全角記号以外
[ア-ン゙゚ァ-ォャ-ョー。「」、] 日本語半角カタカナ

 

表記 意味
<[^>]*> HTML, XML 等のタグに有効
<[^>]* />
</[^>]*>
<!–(.|\n)*–>
[A-Za-z]+ 英単語に有効
/\*/?(\n|[^/]|[^*]/)*\*/ 2行まで(?)のコメントにマッチ

 

表記 ([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}
意味 メールアドレス

 

キャラクタクラス

キャラクタクラス とは、上記メタキャラクタを利用して、全文字の中から選り出した任意の文字集合 のこと。 (っぽい)

「任意の一文字」を一般化しようとすれば . という正規表現になる。
「a か b か k か z の中の1文字」であれば、[abkz] となる。
 

範囲で抽出

ところが、「任意の半角アルファベット一文字」を一般化しようとすると
[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz] となる。

これだと大変なので、便利な機能があり、[A-Za-z] とすることで代替できる。

(ここから・・・昔の記憶を辿って書いたので不確か・・・
ちなみにこの範囲抽出の方法は A-Z という表記はしているけれども
実際には A の文字コードから Z の文字コードまで という意味で
A から Z までは、文字コードが連番で付いているから成せる技。

だから逆に言うと A-z という指定は不可。
・・・ここまで)

[A-Za-z]+ これで、全ての英単語を検索可能。

代表的な連番キャラクタクラス

キャラクタクラス 意味
[0-9] 半角の数字にマッチ
[^0-9] 半角の数字以外にマッチ。以下同様
[a-z] 半角のアルファベット小文字にマッチ
[A-Z] 半角のアルファベット大文字にマッチ
[ぁ-ん] 全角ひらがなにマッチ
[ァ-ヶ] 全角カタカナにマッチ
[ -~] 任意の1バイト文字(半角空白” “から”~”まで)にマッチ
[亜-黑] 漢字にマッチ (詳細は●漢字だけを探したい を参照)

 

グルーピング

グルーピング とは、複数の文字(つまり文字列)をワンセットにすること。

ここでの例は、参考サイトの例があまりにも楽しかったので、そのまま拝借することにした。

「うひうひひうひうひひひひひ」
という妖しい文字列。 😎

「うひ+うひ+うひ+うひ+」
ひとまずこれで正規表現ができた。(自信はないけど。。。)

でも、これだと「うひ+」の繰り返しが4回と固定。

これを「(うひ+)+」とすることで 「うひ+」というグループの繰り返し という意味になる。
 

後方参照

正規表現における 変数 っていう感じ。

後方から前方を参照する。
前方にて ( ) で括ってある(グルーピングしてある)エスケープシーケンスを
後方にて代替する。

検索のときは \ (バックスラッシュ、円マーク)
\1 ~ \99 まで使用可能。

ActionScript 3

  1. var pattern:RegExp = /(\d+)-by-\1/;
  2. // matches the following: 48-by-48

置換のときは $ (ドルマーク)
$1 ~ $99 まで使用可能。

ActionScript 3

  1. var pattern:RegExp = /Hi, (\w+)\./;
  2. var str:String = "Hi, Bob.";
  3. trace(str.replace(pattern, "$1, hello."));
  4. // output: Bob, hello.

 

  1. $x = '0173123456';
  2. $x =~ s/(\d\d\d\d)(\d\d)(\d\d\d\d)/$1-$2-$3/;
  3. print $x;
  4. // 0173-12-3456

 

フラグとプロパティ
フラグ プロパティ 説明
g global 複数箇所に一致
i ignoreCase 一致の判定において大文字と小文字を区別しない
A ~ Z および a ~ z の文字に適用されるが、É や é などの拡張文字には適用されない
m multiline このフラグを設定した場合、$ および ^ はそれぞれ行末と行頭にも一致
s dotall このフラグを設定した場合、.(ドット)は改行文字(¥n)にも一致
x extended 正規表現の拡張機能を有効にする
パターンの一部と見なされない空白を正規表現の中に挿入できるようになる
これにより、正規表現コードの読みやすさが向上

 

ActionScript 3

  1. var re:RegExp = /abc/gimsx;

書式は上記のように / の後ろに付加。
併用可。
 

最長一致のルール

正規表現では、与えられたパターンにマッチする 最も長い文字列 が検索結果になる。

な~にいいいいい! やっちまったなぁ!

という文字列に対して、「な~にい+」という正規表現を用いた場合、検索結果としては
「な~にい」「な~にいい」「な~にいいい」「な~にいいいい」「な~にいいいいい」のうちどれがかかるのか。

最長一致 なので、一番長い「な~にいいいいい」が結果として出てくる。

記述例
  1. $_SESSION['name'] = $row['name'];
  2. \$_SESSION\['(.+)'\] = \$row\[
参考サイト

Flash 用 ActionScript 3.0 のプログラミング:正規表現の使用

第IV部~テキスト編集を極める!!:正規表現について
正規表現
すぐ使える!正規表現サンプル集:文字列を置換しよう

Posted by muchag | ActionScript,PHP |
初回投稿:2010-07-19 (月) 19:05:29 | 最終更新:2017-12-24 (日) 18:21:29

Flash Builder 4 -> RichEditableText

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-19 (月) 5:11:58 | 最終更新:2010-07-25 (日) 2:22:59

HTML タグの反映

[mxml][/mxml]

Actionscript 3.0 on Flex 4

  1. import flashx.textLayout.conversion.TextConverter;
  2. import flashx.textLayout.elements.Configuration;
  3. import flashx.textLayout.elements.TextFlow;
  4. import flashx.textLayout.formats.TextDecoration;
  5. import flashx.textLayout.formats.TextLayoutFormat;
  6.  
  7. private function init():void {
  8.     var txt:String = "Check out our website at <a href='http://blog.flexexamples.com/' target='_top'>flexexamples.com</a>.";
  9.  
  10.     var cfg:Configuration = TextFlow.defaultConfiguration;
  11.  
  12.     var normalFmt:TextLayoutFormat = new TextLayoutFormat(cfg.defaultLinkNormalFormat);
  13.     normalFmt.color = 0xFF0000; // red
  14.     normalFmt.textDecoration = TextDecoration.NONE;
  15.  
  16.     var hoverFmt:TextLayoutFormat = new TextLayoutFormat(cfg.defaultLinkHoverFormat);
  17.     hoverFmt.color = 0xFF00FF; // purple
  18.     hoverFmt.textDecoration = TextDecoration.UNDERLINE;
  19.  
  20.     cfg.defaultLinkNormalFormat = normalFmt;
  21.     cfg.defaultLinkHoverFormat = hoverFmt;
  22.  
  23.     ret.textFlow = TextConverter.importToFlow(txt, TextConverter.TEXT_FIELD_HTML_FORMAT, cfg);
  24. }

Flex Examples:Customizing the appearance or a hyperlink in a TextFlow object in Flex 4
こちらよりの丸パクリ。。。
 

リンクの実装(a タグ)
Actionscript 3.0 on Flex 4

  1. import flashx.textLayout.elements.LinkElement;
  2. import flashx.textLayout.events.FlowElementMouseEvent;
  3. import mx.controls.Alert;
  4.  
  5. private function init():void {
  6.     var myString:String = "検索サイト:<a href="http://www.google.com/">Google</a>";
  7.     myString.replace(/^<a href=(^.*$)>$/, "<a href=$1 click=\"linkElement_clickHandler(event);\">");
  8.  
  9.     var myRichEditableText:RichEditableText = new RichEditableText();
  10.     myRichEditableText.text = myString;
  11. }
  12.  
  13. protected function linkElement_clickHandler(event:FlowElementMouseEvent):void {
  14.     var linkEl:LinkElement = event.flowElement as LinkElement;
  15.     event.stopImmediatePropagation();
  16.     event.preventDefault();
  17. }

<参考サイト>
Flex Examples:Creating a LinkElement in a Spark RichEditableText control in Flex 4
 

テキストの折り返し

width プロパティを設定しないと折り返しは実現しない。

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-19 (月) 5:11:58 | 最終更新:2010-07-25 (日) 2:22:59

Flash Builder 4 -> LayoutBase

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-18 (日) 21:06:06 | 最終更新:2010-07-25 (日) 2:41:59

Flash Builder 4 -> AS3 で layout の設定
で書いたが、コンテナ系コンポーネントの layout プロパティは
値ではなく LayoutBase クラスのサブクラスで設定する

サブクラス BasicLayout, ButtonBarHorizontalLayout, HorizontalLayout, TileLayout, VerticalLayout

Adobe® Flex® 4 リファレンスガイド:LayoutBase

これ関連で、分かりやすい記事を見つけたのでメモ。
Flexデベロッパーセンター:Flex 4 マスターシリーズ #10 Flex 4 Spark Layouts

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-18 (日) 21:06:06 | 最終更新:2010-07-25 (日) 2:41:59

Flash Builder 4 -> width, height のパーセント指定

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-18 (日) 14:11:44 | 最終更新:2010-07-25 (日) 2:50:44

ActionScript で、コンポーネントの width を 100% にしようとしてはまった・・・。

Actionscript 3.0 on Flex 4

  1. var myGroup:Group = new Group();
  2. myGroup.width = "100%"; // エラー
  3. myGroup.width = 100%; // エラー

グーグル先生にお伺いを立てると・・・一発回答!
ジャンピング土下座:ActionScriptでのwidth/heightのパーセント指定方法

な、なるほど・・・そういうプロパティがあったのね・・・。

Actionscript 3.0 on Flex 4

  1. var myGroup:Group = new Group();
  2. myGroup.percentWidth = 100;

チャンチャン!

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-18 (日) 14:11:44 | 最終更新:2010-07-25 (日) 2:50:44

Flash Builder 4 -> 文字列と XML の相互変換

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-18 (日) 4:06:39 | 最終更新:2010-07-25 (日) 2:40:56

文字列から XML オブジェクトへ
Actionscript 3.0 on Flex 4

  1. var myXML:XML = new XML(String);

このように文字列を XML コンストラクタの引数にするだけ。

但し、XML の属性値、名前、テキスト値はすべて String データ型で表現されているので
後々数値として利用する場合は Number() 関数等で変換してから利用すること。
 

XML オブジェクトから文字列へ

XML オブジェクトまたはXMLList オブジェクトを文字列に変換する場合は
toString メソッド、あるいは toXMLString メソッドを用いる。

両者の違いは、最下層ノードの時に出る。

ActionScript 3

  1. var myXML:XML =
  2.     <order>
  3.         <item id='1' quantity='2'>
  4.             <menuName>burger</menuName>
  5.             <price>3.95</price>
  6.         </item>
  7.     <order>;
  8.  
  9. trace(myXML.item[0].menuName.toXMLString());
  10.     // <menuName>burger</menuName>
  11. trace(myXML.item[0].menuName.toString());
  12.     // burger

最下層ノードのときだけは、toString メソッドだと当該ノードの値だけを抽出。

<参考元>
ActionScript 3.0 のプログラミング > ActionScript 3.0 の基本データ型およびコアクラス > XML の操作 > XML の型変換

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-18 (日) 4:06:39 | 最終更新:2010-07-25 (日) 2:40:56

Flash Builder 4 -> Tree

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-18 (日) 3:58:04 | 最終更新:2010-07-25 (日) 2:23:43

<Tree>
mx.controls
Flex 3 開発ガイド / ユーザーインターフェイス / データ駆動型コントロールの使用 : Tree コントロール

 

dataProvider

Tree コンポーネントは、XMLListCollection 及び ArrayCollection の2種類のデータソースを選択できるようだ。

いずれかを dataProvider プロパティにセットすることで簡単に Tree メニューを実現できる。
 

XMLListCollection

せっかくなので [XML サービスを設定] を利用しようとしたけど、うまくできなかった。。。
Flash Builder 4 -> XML との連携

そこで
gihyo.jp:プログラマのためのFlash遊び方 第8回 Flexで本格Webアプリケーションを作ってみよう
こちらを参考にして、既存の XML ファイルを読み込んでみた。

Actionscript 3.0 on Flex 4

  1. private function init():void {
  2.     var req:URLRequest = new URLRequest( "example.xml?time=" + new Date().getTime() );
  3.    
  4.     var loader:URLLoader = new URLLoader();
  5.     loader.load(req);
  6.     loader.addEventListener("complete", function(event:Event):void {
  7.         myTree.dataProvider = new XMLListCollection( new XMLList (XML(loader.data) ) );
  8.     });
  9. }

無事に動いた。

アッサリすぎて・・・ポカーン。

外部ファイル読み込み時のキャッシュのクリア
 

PHP サービスの利用

上記手法だと一旦 XML ファイルを保存しないといけないのでセキュリティ上あまりよろしくないと思い、
せっかく繋げた PHP サービスを利用することを考えた。

Actionscript 3.0 on Flex 4

  1. var myXML:XML = new XML(event.result);
  2. myTree.dataProvider = new XMLListCollection( new XMLList(myXML) );

PHP 側から XML ファイルの中身を文字列で送り、AS で XML へ変換。

これまた楽チン♪
 

ArrayCollection

やり方がよくわからない。

結論
よほどの事がない限り、データは XML で作り XMLListCollection を dataProvider に登録しよう!

dataProvider 関連の記事を検索すると、XML でのデータ構築方法ばかりがヒットします。
実際は、Object&Array でも階層データを構築出来るのに、何故この情報が少ないのか疑問でした。

で、頑張ってみたわけですが、調べて納得(笑)。
一部理解が微妙な部分があるのもありますが(ぉ)、
面倒が嫌なら XML でササッとコーディングした方が、手間も少ないようです。

<引用元>
左脳Script:flex3 における Tree での dataProvider の扱い方

こちらの方の忠告に従って、当面考えないことにした。
 

itemClick

Tree メニューのクリックイベントは、itemClick イベントである。

XMLListCollection を dataProvider に指定しているときの例。
[mxml][/mxml]

Actionscript 3.0 on Flex 4

  1. import mx.events.ListEvent;
  2.  
  3. protected function myTree_itemClickHandler(event:ListEvent):void
  4. {
  5.     var item:Object = event.itemRenderer.data; // itemClick イベントから当該ノードの情報を受け取る
  6.     var id = item.@id; // 属性値の受け取り方
  7.     var hoge = item.hoge; // 子ノードの受け取り方
  8. }

 

labelField

各ノードの表示ラベルの設定は labelField プロパティ。

  1. <unit name="SMAP" num="5">
  2.     <member name="中居正広" />
  3.     <member name="木村拓哉" />
  4.     <member name="稲垣吾郎" />
  5.     <member name="草彅剛" />
  6.     <member name="香取慎吾" />
  7. </unit>

[mxml]
[/mxml]
 

showRoot

ルートノードを表示したくない場合は showRoot プロパティ。
[mxml][/mxml]

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-18 (日) 3:58:04 | 最終更新:2010-07-25 (日) 2:23:43

Flash Builder 4 -> E4X

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-17 (土) 2:54:14 | 最終更新:2010-08-03 (火) 17:51:42

XML(Extensible Markup Language)っていったら
データ群をタグを用いて表現し、テキストファイルベースに一般化したもの
なんていう軽いイメージで捉えている。

今回 FB4 に触れてみて XMLList というものに出会ったが、なんてことはない。

XML はルートが1つ
  1. <?xml version="1.0" encoding="utf8" ?>
  2. <johnnys>
  3.     <unit>
  4.         <name>Hey! Say! JUMP</name>
  5.         <member>
  6.             <name>知念侑李</name>
  7.             ・
  8.             ・
  9.         </member>
  10.     </unit>
  11.     <unit>
  12.         <name>KAT-TUN</name>
  13.         <member>
  14.             <name>亀梨和也</name>
  15.             ・
  16.             ・
  17.         </member>
  18.     </unit>
  19. </johnnys>

 

XMLList はルートが複数
  1. <?xml version="1.0" encoding="utf8" ?>
  2. <unit>
  3.     <name>Hey! Say! JUMP</name>
  4.     <member>
  5.         <name>知念侑李</name>
  6.         ・
  7.         ・
  8.     </member>
  9. </unit>
  10. <unit>
  11.     <name>KAT-TUN</name>
  12.     <member>
  13.         <name>亀梨和也</name>
  14.         ・
  15.         ・
  16.     </member>
  17. </unit>

 

XML の子は XMLList

上を見れば一目瞭然・・・。
 
ってな感じで、相変わらず軽くイメージ・・・していたところに

  1. <unit name="SMAP" num="5">
  2.     <member name="中居正広" />
  3.     <member name="木村拓哉" />
  4.     <member name="稲垣吾郎" />
  5.     <member name="草彅剛" />
  6.     <member name="香取慎吾" />
  7. </unit>

なんていう表記を見つけた。
なんじゃこりゃぁぁぁぁぁぁ!

ちょこっと調べてみると、E4X というキーワードにぶつかった。
 

E4X

E4X (ECMAScript for XML) は ECMAScript3 の拡張として開発された XML データを扱うための仕様です。
2nd Edition が昨年末に公開されています(こちら)。
AS3 では新しく E4X のクラスがサポートされ、
従来よりもずっと簡単に XML データを扱うことができるようになりました。

AS3 でも AS2 で使われていた XML クラスは XMLDocument と名前を変えて他の関連クラス (XMLNode 等)と共に flash.xml パッケージに含まれています。
しかし、これは過去に開発したコードのサポートが主目的で、今後の使用を推奨するものではありません。

<引用元>
akihiro kamijo:E4X

上記引用元サイトには、E4X について色々と有益な情報が載っている。
カテゴリ「E4X」からリストアップできる。
 
確かにこれは便利だね。

ActionScript

  1. myXML[i][ndeTitle[i].childNodes[j].nodeName] = ndeTitle[i].childNodes[j].firstChild.nodeValue;

もう、こんな思いをしなくても済みそうだ・・・。

XML を本気で利用することになったら勉強してみよう。

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-17 (土) 2:54:14 | 最終更新:2010-08-03 (火) 17:51:42

関数パラメータ

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-16 (金) 18:42:11 | 最終更新:2011-01-09 (日) 13:04:53

関数パラメータ というのはヘルプのタイトルで
業界の方々はこういう言葉を常用しているのかもしれないが
私なんかに分かりやすく言うと 関数の引数 の話。
(まぁ 同じか・・・)

本来 AS3 の話FB4 とは直接は関係ないのだが
Flash Builder 4 -> library -> Debug
でDLしてきたコードを見て発見し、調べていっぱいビックリしたのと
FB4 でも便利に使えそうなので(実際に使われてるし)、FB4 カテゴリにも登録。

何にビックリしたか、というお話。

前述の Debug という外部クラスの関数宣言が

ActionScript 3

  1. public static function dump(o:Object,...rest):String

となっていた。

先ずここでビックリ! …rest ???!
 

「値渡し」と「参照渡し」

VB を触っていた頃に ByVal, ByRef なんていう感じで意識していたが
最近はすっかり忘れていた。

PHP では、参照渡しを使わずにコーディングしてたんだなぁ。。。
 

値渡し

引数をコピーする。

関数内で代入された値は関数内でのみ有効で、関数外には影響がない。
よって、関数外でも新しい値を用いたいなら return で値を戻してやる必要がある。
 

参照渡し

引数の参照を渡す。

つまり、関数内でその引数(変数)を操作すると、それが全体に反映される。
 
という風に
ActionScript 言語とシンタックス / 関数:関数パラメータ
を読んでいて「値渡し」と「参照渡し」について再認識した。

AS3 では

  • プリミティブ型は「「値渡し」
  • オブジェクト型は「参照渡し」

なのだそうだ。
 

引数のデフォルト値

引数は受け取る側でデフォルト値を設定できる。

これによって、呼び出し時に引数を省略した場合は、デフォルト値が用いられる。

ActionScript 3

  1. function defaultValues(x:int, y:int = 3, z:int = 5):void
  2. {
  3.     trace(x, y, z);
  4. }
  5. defaultValues(1); // 1 3 5

今まで PHP からの流れで何気なく使ってきたが
このは AS3 の新機能なんだそうで、これまたビックリ。
 

引数オブジェクト(配列)

私は「オブジェクト」という言葉にどうも慣れなくて、ついつい「配列」をイメージしてしまう。
これは早く直さないとなぁ。

さて、脱線してしまったが、本題はここから。

AS3 では、受け取り引数をオブジェクト化できる(してある)

具体的には、以下のように書くことができる。

ActionScript 3

  1. function (x:int, y:String, z:Number)
  2.  ↓
  3. function (... args)

これはすごいいいいいいいい!

ActionScript 3

  1. function example(... args):void {
  2.     myTextArea.text = Debug.dump(args); // 前述の Debug クラスを利用
  3. }
  4. example(2, "hoge", 5.5);
  5.  
  6. // Array (3) {
  7. //     [0] =>
  8. //     int(2)
  9. //     [1] =>
  10. //     String (4) = "hoge"
  11. //     [2] =>
  12. //     Number(5.5)
  13. // }

 

引数オブジェクトの種類

この便利な機能には

  • arguments オブジェクト
  • …(rest) パラメータ

の2種類の用法があるが、同時に用いることはできない
 

arguments オブジェクト

関数に引数を送った時点で、自動的に生成されている arguments オブジェクト。

  • arguments オブジェクトは、関数に渡されるすべてのパラメータを含む配列です。
  • arguments.length プロパティは、関数に渡されるパラメータの数を報告します。
  • arguments.callee プロパティを使用すると、関数自体を参照することができます。これは関数式の再帰呼び出しに便利です。

以下のように宣言なしでいきなり利用可能。
function example(x:int, y:String, z:Number):void {
for (var i:int = 0; i < arguments.length; i++) { trace(arguments[i]); } } example(2, "hoge", 5.5); // output: // 2 // hoge // 5.5[/as3] これならば、引数の一括処理が可能

ヘルプにある
function traceArgArray(x:int):void
{
for (var i:uint = 0; i < arguments.length; i++) { trace(arguments[i]); } } traceArgArray(1, 2, 3); // output: // 1 // 2 // 3[/as3] このコードを試してみたけど「引数の数が合わない」と怒られた。 Flex だから?   arguments.callee 利用例 [as3]var factorial:Function = function (x:uint) { if(x == 0) { return 1; } else { return (x * arguments.callee(x - 1)); } } trace(factorial(5)); // 120[/as3] 以上のような素敵な機能があるので、arguments という名称の変数は使わないようにする
 

…(rest) パラメータ

ActionScript 3.0 は、…(rest) パラメータと呼ばれる新しいパラメータ宣言を導入しています。
このパラメータを使用すると、任意の数のカンマ区切りのパラメータを受け入れる配列パラメータを指定できます。
パラメータには、予約語ではない名前を指定することができます。
このパラメータ宣言は、指定される最後のパラメータである必要があります。
このパラメータを使用すると、 arguments オブジェクトにアクセスできなくなります
… (rest) パラメータには arguments 配列および arguments.length プロパティと同じ機能がありますが、 arguments.callee のような機能はありません
… (rest) パラメータを使用する前に、arguments.callee を使用する必要はありません。

… (rest) の (rest) の部分は予約語以外なら好きに命名してよい。

function traceArgArray(… args):void
{
for (var i:uint = 0; i < args.length; i++) { trace(args[i]); } } traceArgArray(1, 2, 3); // output: // 1 // 2 // 3[/as3] この方法なら、呼び出し時に設定する引数の個数が可変になる

1つの関数で、場合によっては引数3つ、別の場合は5つなんていうことが可能。
つまり、引数の個数が可変なのだ。
すごいなぁ。

もちろん一括処理も可能。
 
function traceArgArray(x: int, … args)
{
for (var i:uint = 0; i < args.length; i++) { trace(args[i]); } } traceArgArray(1, 2, 3); // output: // 2 // 3[/as3] このように固定された引数があっても大丈夫。 但し、...(rest) パラメータは必ず最後の引数とすること。  

差異
arguments オブジェク …(rest) パラメータ
引数全てを含む配列 オブジェクト 固定引数以外を含む配列
不要 明示 引数欄の末尾
を持つ callee プロパティ 持たない
Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-16 (金) 18:42:11 | 最終更新:2011-01-09 (日) 13:04:53
« 前ページへ次ページへ »