2008-09-01から1ヶ月間の記事一覧
java.lang.Iterableを実装すればOK。 /** * 拡張for文でループできるクラス */ class Test implements Iterable<String> { public Iterator<String> iterator () { return Arrays.asList( new String[] { "a", "b", "c" } ).iterator(); } } for ( String str : new Test() )</string></string>…
型パラメータで指定された型を引数で受け取るメソッドがあって、 class Test<T> { void add( T value ) {} } このとき、「add」の引数として指定できるのは「Tと代入互換性があるクラス(T or Tの派生クラス)」になります。で、これと同じノリで、一括登録版の「</t>…
ObjectProxyを使うとオブジェクトの属性変更を監視する仕組みがさくっと作れます。使い方は以下の通り。 監視するオブジェクトを作成。 作成したオブジェクトを引数として、ObjectProxyを作成してラップ。 「addEventListener()」でObjectProxyに属性変更リ…
フィルタを使うと、スプライトやビットマップにドロップシャドウやブラーなどの効果を適用することができます。 フィルタはflash.filtersパッケージ配下にいろいろあります。 スプライトなどDisplayObject派生のコンポーネントであれば、フィルタを作成してf…
昨日の続き。XMLリテラルを使って文字列を生成した場合の性能を測ってみました。 20文字程度の文字列を、「文字列連結」「XMLリテラル」「XMLリテラル+埋め込み」のそれぞれで50000回生成した場合の所用時間を計測。 それぞれ5回試行し、平均を取っています…
ActionScriptで長めの複数行文字列を作るのってメンドウですよね。Rubyみたいにヒアドキュメントとか使えればいいのにー。という時にXMLリテラルが使えます! // XMLリテラルをヒアドキュメント風に使う! XML.ignoreWhitespace = false;// デフォルトだとテキ…
StringUtil#substituteでテンプレート文字列中の「{数字}」を任意の値で置き換えた文字列を生成できます。 // テンプレートの「{数字}」を置換した文字列を生成する stdout.text = StringUtil.substitute( "name : {0}, age : {1}", "mii", 1); // → name : …
ObjectUtil#toStringでオブジェクトの属性一覧を示す文字列を生成できます。 // オブジェクトの属性一覧を表示 var obj:Object = { a:10, b:"bbb", c:true, d:[1,2,3,4,5], e:{foo:"foo",hoge:"hoge"}, f:function():void{} }; stdout.text = ObjectUtil.toS…
「RubyクラスをJSONでアクセスできるWebサービス化する」で作ったJSONBroker(任意のRubyクラスのAPIをJSON-RPCライクなプロトコルでアクセスできるWebサービスとして公開するための簡易ユーテイリティ)のActionScript版クライアントを書きました。前に作った…
JavaScriptと一緒かと思ったら微妙に拡張されてますね! > ActionScriptの配列。ということで、便利そうなAPIを使うサンプルを書いてみました。使ってみたAPIは以下。 Array#forEach 配列の要素を順番に取り出します。forループの代わりに。 Array#map 配列の…
配列をソートするAPIとして、Array#sortとArray#sortOnが提供されています。 Array#sort 配列の要素をソートします。 引数で比較関数(第一引数)とオプション(第二引数)が指定できます。 比較関数を指定することで、任意のロジックに基づくソートが可能です。…
mx.utils.NameUtil#createUniqueName()でオブジェクトの一意なIDを作成できます。 IDは「無修飾のクラス名+番号」になります。 「無修飾のクラス名」なら、パッケージが違う同名クラスだと同じIDになるのでは、と思いきや、番号がすべてのオブジェクトで一意…
Flexで、キーと値をペアで保持する構造(rubyでいうHashてきなもの)を使いたい場合、flash.utils.Dictionaryが使えます。 JavaScriptだとObjectで何とかしますが(Flexでも同じように何とかできますが)、 Objectと違って、Dictionaryではキーにオブジェクトが…
ActionScriptの型指定では、「*」は型指定なしを意味します。任意の型とも若干意味が違っていて、 任意値を代入できて、 かつ、任意の値として取り出すことができます。 // 任意の値を代入でき var a:* = "foo"; var b:Object = "foo"; // 任意の値として取…
Graphics#beginBitmapFillを使って、枠内を画像で塗りつぶすサンプルです。 画像はswf内にアセットとして埋め込んだモノを使用してます。アセットの使い方はこちらを参照。 あとは、beginBitmapFill→drawRect→endFillでOK。 package { import flash.display.…
日時(Date)のフォーマットにはmx.formatters.DateFormatterが使えます。以下は、現在時刻をフォーマットして表示するサンプルです。 package { import flash.display.*; import flash.text.*; import mx.formatters.*; public class Sample extends Sprite {…
FireBugのコンソールに行番号付きでswfで発生した例外のスタックトレースを表示する手順です。ポイントは以下。 デバック版Flash Playerでswfを実行。 →発生した例外からスタックトレースが取得できるようになります。 コンパイルオプションでデバッグをオン…
「as」演算子で型キャスト、「is」演算子で互換性チェックができます。 package { import flash.display.*; import flash.text.*; public class AsIsSample extends Sprite { public function AsIsSample(){ var str:String = "" var a:Object = "a"; // is…
Flex(というかActionScript3)では、メソッドやフィールドに名前空間を設定できます。 名前空間を設定されたメソッドは、名前空間を明示(またはuse)して呼び出す必要があります。 publicやprivateといったアクセス制御指定子も特殊な名前空間として実装されて…
Flexでprivateなクラスを定義する場合、パッケージ定義の外部で定義します。 Flexでは、1つのソースファイルに複数のクラスを含めることが可能ですが、 ファイルの外部にあるコードで使用できるのは各ファイルのクラス 1 つだけ。各ファイルのクラスのうち1…
Proxyを使うと、オブジェクトのメソッド呼び出しやプロパティへのアクセスをインターセプトする仕組みが作れます。 機能的にはJavaのProxyに近い感じです。 メソッド以外にも、属性へのアクセスや「for...in」「for...each in 」で属性を列挙された場合の動…
クリップボードの値を更新するサンプルです。System#setClipboard()でさくっと設定できます。 package { import flash.display.*; import flash.system.System; public class SetClipBoard extends Sprite { public function SetClipBoard(){ // クリップボ…
扱うデータ数が多いと若干性能が気になる感じのGeneratorですが、callccじゃなくてThreadを使えばちょっとは早くなったりするんじゃね?と思って作ってみました。next?とnextだけ、Queueを使ってさくっと実装。 require 'thread' # スレッドを使ったGenerator…
Generatorを使うと、内部イテレータ(Array#eachみたいな、渡されたブロックに対して要素を1つづつコールバックするタイプのイテレータ)を外部イテレータ(Java見たいな、hasNext,nextで要素を取り出すイテレータ)に変換できます。 array = ["1", "2", "3"] # …
グラデーションする四角を描くには、Graphics#beginGradientFill()を設定したあと、Graphics#drawRect()で四角を描画します。 グラデーションの種別(線or放射)とか色など、いろいろパラメータが指定できますが、まぁ、ドキュメントを参照ということで。(→Gra…
☆☆☆☆ 「残業ゼロ」の仕事力作者: 吉越浩一郎出版社/メーカー: 日本能率協会マネジメントセンター発売日: 2007/12/22メディア: 単行本購入: 11人 クリック: 271回この商品を含むブログ (205件) を見る 残業よくない!には賛同するけど、残業しないと生活がまま…
FlexというかActionScriptで、HTTPでサイトに接続しデータを取得するサンプルです。クロスドメインまわりのことがまだ良くわかってないので、とりあえず同じサイトのデータを取得してます。 package { import flash.display.Sprite; import flash.text.*; im…
Dateを使うと簡単にできます。 require 'date' d = Date.new( 2008, 9, 1 ) # 200回次の日を求める。 200.times { d += 1 puts d } 実行結果です。 2008-09-02 2008-09-03 2008-09-04 2008-09-05 2008-09-06 2008-09-07 ...省略 最初、Timeを使ってやろうと…
ActionScript3とかもはや記憶にあるはずもなく、「まぁ、JavaScriptと似たようなもんだろー」、ということで気合で書き進めているわけですが、ここで一つ大きな違いを発見。ActionScript3ではthisが省略できるのです。 package sample { public class Kitten…
今更ながらlog.asなるものを発見したので使ってみます。これを使うと、「log()」関数1発で、FlexからFireBugのコンソールにデータを出力することができます。1つのソースファイルだけでできていて、プロジェクトへの導入も簡単。 log.asのソースをコピーして…