Flex SDKでFlexアプリを作ってみる

Flex SDKとは

Adobe Flashを使わずにFlashを開発するためのSDK。
FlexではMXMLとActionScriptで開発する。

MXMLとは

MXMLはXMLの一種で、FlexアプリのコンポーネントのUIを配置することができる。
MXMLタグは ActionScriptのクラスまたはクラスのプロパティに相当する。Flexアプリをコンパイルすると、MXMLタグが解析されて、対応するActionScriptクラスが生成される。

ActionScriptとは

ActionScriptとはJavaScriptをベースに独自の拡張をしたもの。

Flex SDKの準備

http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3sdk
からダウンロードする。
また、Java実行環境が必要。無ければインストールする。
解凍したflex_sdk_3/binにパスを通す。

ボタンだけが表示されるアプリを作ってみる

ファイルを作成する。とりあえずFirstFlex.mxmlとする。

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

    xmlns:mx="http://www.adobe.com/2006/mxml"

    horizontalAlign="center" verticalAlign="center">

    <mx:Button id="myButton" label="I'm a button!"/>

</mx:Application>

コンパイルする。
mxmlc –strict=true –file-specs MyFirst.mxml
–strictで厳密なチェックが行われる。
–file-specsでコンパイルするファイルを指定。
FirstFlex.swfが作成される。これをブラウザにD&Dするとボタンだけが表示される。

ボタンをActionScriptで作成してみる

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

    xmlns:mx="http://www.adobe.com/2006/mxml"

    horizontalAlign="center" verticalAlign="center"

    creationComplete="creationCompleteHandler();"

    >

    <mx:Button id="myButton" label="I'm a button!"/>

    <mx:Script>

        <![CDATA[

            import mx.controls.Button;

            import mx.events.FlexEvent;

            private var asButton:Button;

            private function creationCompleteHandler() :void {

                asButton = new Button();

                asButton.label = "I'm a actionscript button!";

                asButton.addEventListener (FlexEvent.CREATION_COMPLETE, buttonCreationCompleteHandler);

                addChild(asButton);

            }

            private function buttonCreationCompleteHandler(evt:FlexEvent) :void {

                asButton.x = parent.width / 2 - asButton.width / 2;

                asButton.y = parent.height / 2 - asButton.height /2;

            }

        ]]>

    </mx:Script>

</mx:Application>

コンパイルしてブラウザで読みこむとボタンが2つ表示される。

Scalaの変数

Scalaには2つの変数があります。

valとvarです。

valは再代入ができない変数です。valueを短縮したものですね。varは再代入ができます。variableなので正確にはこちらが変数でvalは値といった方がいいのでしょうか。

早速試してみます。まずはval。


scala> val la = “val test”
la: java.lang.String = val test

scala> print(la)
val test
scala> la = “another”
:5: error: reassignment to val
la = “another”
^

scala> la = null
:5: error: reassignment to val
la = null
^

はじめにlaに”val test”という文字列を代入しました。printしたのちlaに再度”another”という文字列を代入しようとしてもエラーが発生しています。nullの代入も同様です。

今度はvarを使ってみます。


scala> var ra = "var test"
ra: java.lang.String = var test

scala> print(ra)
var test
scala> ra = "another"
ra: java.lang.String = another

scala> print(ra)
another
scala> ra = null
ra: java.lang.String = null

scala> print(ra)
null

varでは再代入できました。

上記ではvarに文字列を代入して、再度文字列を代入しましたが、再代入で数値を入れてみます。

scala> ra = 1
:5: error: type mismatch;
found : Int(1)
required: java.lang.String
ra = 1
^

一度文字列を代入したものには文字列以外は代入できないようです。

でははじめに数値を代入して数値を再代入してみます。

scala> var num = 2
num: Int = 2

scala> num = num * 5
num: Int = 10

ということで、今回はここまでにしときます。

Scalaの複数行にわたる文字列

Scalaでの複数行にわたる文字列は、”””で囲むということです。試してみます。

scala> print("""abcd
     | efgh""")
abcd
       efgh

また、上記の|は環境により自動的に表示されているものですが、ソースコードで

var a = """abcd
               |efgh"""

のようにすると、efghの行頭の|までのスペースは無視されるということです。試してないですが。

ScalaでHello world!

Scalaのインストールが完了したので、早速Hello world!やってみます。
シェルでscalaコマンドを実行すると、scalaの対話式実行環境が起動します。

scala> print("Hello world!")
Hello world!
scala> println("Hello world!")
Hello world!

scala> printf("%s %s", "Hello", "world!")
Hello world!

printfはネットではprintf(“{0}”, “hoge”)のような記述が見られるんですが、試しても{0}と出力されるだけでした。これはバージョンの違いなんでしょうか。使ってるのは2.7.4.finalなんですが。

それから文字列は”hoge”で文字は’h’ですね。はじめ’hoge’してエラーが出ました。最近はPHPやらRubyやらなのですっかり忘れていましたが、Javaはchar型があるんでしたね。Scalaにもcharがあるんですね。

ScalaをMacにインストール

なんだかScalaが素敵に見えてきたので、Scalaに入門してみます。

とりあえずscalaをMacPortsでインストール。

$ sudo port install scala

それからEclipseもダウンロードしました。
Eclipseなんて久しぶりです。アイコンのデザインがいまいちなんですよね・・・scalaとは関係ないけど。

Scala plugin for eclipseはこの更新サイトからインストールできます。