がるの健忘録 このページをアンテナに追加 RSSフィード

2009-06-04

[]相変わらずのmemo XML

そもXML嫌いだしとかいう話はおいといて。

あるXML文字列があると仮定すると。

それは例えば

  var x1:XML = 

にぶち込めば、とりあえず入る。

で。ここから「複数要素」を切り出す場合。

  var x_list:XMLList = x1.elements("エレメント名");

でゲトれる。*とか使えるのがある意味素敵。

で…このXMLListをどう紐解くかってぇと

for (var i:int = 0; i < x_list.length(); ++i) {
  var mono_item:XML = x_list[i];
}

でぶん回しつつゲトる。確かにXML配列だから受け口はXMLクラスだねぇ…面倒だけど。

で…最終的に、エレメントの要素がタグ無しの値だけの時は、やっぱりelementsメソッドでいける。

で…アトリビュートをとりたければ attribute() メソッド。


これで…構造が明確なのは、一式いけると思う。

不明瞭なのは、とりあえず*でぶち込んでから以下略、って感じかしらん。


以下、実験したコード。

  var x1:XML = 
    <order>
        <!-- これはコメントです -->
        <?PROC_INSTR sample ?>
        <item id='1'>
            <menuName>burger</menuName>
            <price>3.95</price>
        </item>
        <item id='2'>
            <menuName>fries</menuName>
            <price>1.45</price>
        </item>
    </order>
trace(" -- 1");
trace( x1.elements("*")[0].toString() );  
trace(" -- 1");
trace( x1.elements("item")[0].elements("menuName")[0].toString() );  
trace(" -- 1");
trace( x1.elements("item")[0].elements("price")[0].toString() );  
trace(" -- 1");
trace( x1.elements("*")[1].toString() );  
trace(" -- 1");
//trace( x1.elements("foo")[0].toString() );   未定義はエラー。どう拾う?
//trace(" -- 1");
  var xitem:XMLList = x1.elements("item");
trace(" -- 2");
trace( xitem[0].toString() );
for (var i:int = 0; i < xitem.length(); ++i) {
trace(" -- 2-1");
  var mono_item:XML = xitem[i];
    trace(mono_item.elements("menuName"));
    trace(mono_item.elements("price"));
}

var xitem:XMLList = x1.elements("*");
for (var i:int = 0; i < xitem.length(); ++i) {
trace(" -- 3-1");
  var mono_item:XML = xitem[i];
    trace(mono_item.toString());
}

いぢょ。

[]未定義の例

上述の追記。

例えば「存在しないエレメント名」を指定した時とか。どうやら「空配列(Arrayクラスで中身がカラッポ?)」が戻ってくるっぽ。

trace(" -- 4");
var xundef:XMLList = x1.elements("test");
trace(xundef);
trace(" -- 4");
trace(xundef.length());

いぢょ。

[]めも

いち。

  //
  setTimeout(foo, 100);

&

private function foo():void{
  Alert.show("time out!!");
}

で…

public function setTimeout(closure:Function, delay:Number, ... arguments):uint

という感じらしい。第二引数はミリ秒。closureに引数を渡す時は第三引数以降、って感じだよねぇ。

関数ポインタ(closure)の名前は、()付けるとエラるので注意。

戻り値は「ユニークなID」。何に使うのかというと…キャンセルする時。clearTimeout(id:uint)の引数に渡す。


ただ…

このメソッドを使用する代わりに、repeatCount パラメータを 1 (タイマーを 1 回のみ実行する設定) にして、指定した間隔で Timer オブジェクトを作成することを検討してください。

とかいう記述あり(ちなみにこの記述は、特定時間毎に実行される setInterval() にもある)。


さて…どう使うのか。

っつかわかりにくい orz


とりあえず…「アプリ全体で時間制御をする」時は、initなメソッド(ルートになるクラスの applicationComplete イベントのコールバック関数)で。

まず、initメソッドで

import flash.utils.Timer;
import flash.events.TimerEvent;

  // 1000ミリセック(1秒)毎に、1回繰り返すインスタンス作成
  var tim:Timer = new Timer(1000, 1);
  // タイマーがやってくる毎にfoo関数をコールバックするよう設定
  tim.addEventListener(TimerEvent.TIMER, foo);

  // タイマーstart!!
  tim.start();

で。コールバック関数

private function foo(e:TimerEvent):void{
  Alert.show("time out!!");
}

ってな感じ。

引数忘れると怒られるので注意。


で…addEventListenerの第一引数

TimerEvent.TIMERと書かれてたり"timer"と書かれてたりするですが、ドッチも一緒っつかTimerEvent.TIMERは定数っぽ。

この手のものは定数の方が「もぁ べたぁ」なので、定数記述する。


いぢょ。

[][]言語を書くのはうち等の仕事

んと…「プログラム組めないエンジニア(含むSE、PM、SI、ITコンサルタントなど)」の存在価値は根本的に認めていないおいちゃんですが。

同じくらいに「日本語がちゃんと書けない」のも、大分もって方手落ちです。


別に「感動できる叙情詩を書け」とは言いませんし思いませんが。

「誤解誤読などを招かない文章」を書くスキルは、必須です。

えと…おいちゃん的にお好みなのは

ザ・テクニカルライティング―ビジネス・技術文章を書くためのツール

ザ・テクニカルライティング―ビジネス・技術文章を書くためのツール

明文術 伝わる日本語の書きかた

明文術 伝わる日本語の書きかた

など。

箇条書きでよいので。基本は

・誤解のない文章を

MECEに且つKISSに

書くのが大切。

誤解のある、誤読の可能性のある文章は論外として。

重複があったり冗長だったりといった、長い文章も結果的に「読まない読めない」ので、だめ。


なので結論としては「明文にしてMECEかつKISSな文章」が要求されるです。

…難しいんですがね(苦笑


TeXとかつかうと。論理構造を意識して文章を書くクセがつくので。おいちゃん的には「よいツールだ」とおもってまふ。

[]Classの作り方

package、で囲う。

コンストラクタは「クラスメイト同一のメソッド」。…クラシカルだねぇ。

クラス変数へのアクセスはthisで。

package{

  public class クラス名 extends ベースクラス名 {
    private var count:int = 1;
    
    public function クラス名(  ) {
      this.count ++;
    }

}

1ファイルに複数のClassが書けるのか、protectedはあるのか、などについては未調査。

調査したら追記しま〜 ノ

[]音関連

Soundクラス(flash.media.Sound)に関する話。

基本mp3wavファイルもある程度OKらしいんだけど、サンプリングの対応が

 5.5 kHz

 11 kHz

 22 kHz

 44 kHz

という話もある(未検証)。


いぢょ ノ