gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

相変わらずの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());
}

いぢょ。

めも

いち。

  //
  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はあるのか、などについては未調査。
調査したら追記しま〜 ノ