バイト配列の操作
この例では、種類の異なる複数のファイルを含む単純な
zip ファイルを読み取る方法を示します。その手段として、ここでは各ファイルに関連するデータをメタデータから抽出し、ファイルごとに ByteArray に圧縮解除して、ファイルをデスクトップに書き込んでいます。の仕様に基づきます。
最初にあるのは
zip アーカイブ内の最初のファイルのファイルヘッダーとファイルデータで、その後に、他の各ファイルのファイルヘッダーとファイルデータのペアが続きます。ファイルヘッダーの構造については後で説明します。
zip ファイルには次に、必要に応じてデータ記述子レコードが含まれます(通常は、出力 zip ファイルがディスクに保存されずメモリに作成された場合がこれに当たります)
次に、アーカイブ復号化ヘッダー、アーカイブ追加データレコード、中央ディレクトリ構造、Zip64 中央ディレクトリ終了レコード、Zip64 中央ディレクトリ終了ロケータ、中央ディレクトリ終了レコードなど、いくつかの追加オプションエレメントがあります。この例のコードは、フォルダを含まない zip ファイルのみを解析するように作られており、データ記述子レコードは想定していません。最後のファイルデータの後にある情報はすべて無視します。各ファイルのファイルヘッダーの形式は次のとおりです。
必要なバージョン
ファイル名の長さ
追加フィールドの長さ
ファイルヘッダーの後には実際のファイルデータがあり、圧縮方法フラグに応じて、圧縮されている場合とされていない場合があります。フラグの値は、ファイルデータが圧縮されていない場合は 0(ゼロ)、データが DEFLATE アルゴリズムで圧縮されている場合は 8、他の圧縮アルゴリズムの場合は別の値になります。この例のユーザインターフェイスは、ラベルとテキスト領域(taFiles)で構成されています。
アプリケーションは、zip ファイルで検出したファイルごとに、ファイル名、圧縮サイズおよび非圧縮サイズの情報をテキスト領域に書き込みます。次の MXML ドキュメントは、アプリケーションのユーザインターフェイスの定義です。プログラムの最初で、次のタスクを実行します。必要なクラスを読み込みます。ファイルヘッダーのメタデータを格納する変数を定義します。zip」という名前のファイル)を指定します。プログラムは、次に、while() ステートメントでループを開始し、ファイルストリーム内の現在位置がファイルのサイズ以上になるまで続けます。最初の 30 バイトは、最初のファイルヘッダーの固定サイズ部分を構成します。
シグネチャが異なる場合は、コードが
zip ファイルのファイル部分を超えており、展開するファイルがそれ以上ないことを意味します。その場合は、コードはバイト配列の終端を待つことなく、直ちに while ループを終了します。コードの次の部分では、オフセット位置 8 のヘッダーバイトを読み取って、値を変数 compMethod に格納します。このバイトには、そのファイルの圧縮時に使用された圧縮方法を示す値が含まれます。
複数の圧縮方法を使用できますが、実際には、ほとんどすべての
最初の 30 バイトの後にはヘッダーの可変長部分があり、ファイル名と、場合によっては追加フィールドが含まれます。サイズはファイル名の長さと追加フィールドの長さを加えたもので、これらの値はヘッダーのオフセット 26 および 28 から読み取ります。次に、プログラムは、offset 変数に格納されているバイト数だけ、ファイルヘッダーの可変長部分を読み取ります。そして、ヘッダーの可変長部分からファイル名を読み取り、ファイルの圧縮サイズ(zip サイズ)と非圧縮サイズ(元のサイズ)と共にテキスト領域に表示します。続いて、圧縮サイズで指定されている長さだけファイルストリームからファイルの残りを読み取って bytes に格納し、最初の 30 バイトのファイルヘッダーを上書きします。圧縮サイズは、ファイルが圧縮されていない場合でも正確です。その場合の圧縮サイズはファイルの非圧縮サイズと等しくなるからです。次に、圧縮ファイルの圧縮を解除し、outfile() 関数を呼び出して出力ファイルストリームに書き込みます。outfile() には、ファイル名と、ファイルデータを含むバイト配列を渡します。zip ファイルの次のバイトの処理を続けます。
つまり、別のファイルを展開するか、または最後のファイルの処理が済んだ場合は
zip ファイルの処理を終了します。
ファイルシステムの操作
ディレクトリの操作
ディレクトリの作成
一時ディレクトリの作成
ディレクトリの列挙
ディレクトリのコピーおよび移動
ディレクトリの内容の削除
ランタイムには、ローカルファイルシステム上のディレクトリを操作する機能が用意されています。ディレクトリを参照する File オブジェクトの作成について詳しくは、File オブジェクトでのディレクトリの参照を参照してください。
ディレクトリの作成
例えば、次のコードでは、ユーザのホームディレクトリのサブディレクトリとして AIR Test というディレクトリを作成します。また、一部のモードでは、FileStream オブジェクトでファイルを開くときにもディレクトリが作成されます。WRITE に設定すると、存在しない場合にディレクトリが作成されます。詳しくは、ファイルの読み取りと書き込みのワークフローを参照してください。
一時ディレクトリの作成
一時ディレクトリは、アプリケーションのセッションに使用される一時ファイルを一時的に格納するために使用できます。システムの一時ディレクトリに新しい一意の一時ファイルを作成するための createTempFile() メソッドも用意されています。一時ディレクトリは自動的には削除されないので、アプリケーションを終了する前に削除する必要がないか確認してください。
ディレクトリの列挙
例えば、次のコードでは、ユーザのドキュメントディレクトリの内容の一覧を出力します(サブディレクトリの内容は確認されません)
ディレクトリのコピーおよび移動
ファイルをコピーまたは移動する場合と同じメソッドを使用して、ディレクトリをコピーまたは移動することができます。例えば、次のコードでは、同期的にディレクトリがコピーされます。
copyTo() メソッドの overwrite パラメータに true を指定すると、既存のターゲットディレクトリにあるすべてのファイルおよびフォルダが削除され、ソースディレクトリ内のファイルおよびフォルダに置き換えられます(ターゲットファイルがソースディレクトリに存在しない場合でも同様に処理されます)
copyTo() メソッドの newLocation パラメータとして指定するディレクトリは、結果として生成されるディレクトリへのパスを指定するものであり、そのディレクトリを格納する親ディレクトリを指定するものではありません。詳しくは、ファイルのコピーおよび移動を参照してください。
ディレクトリの内容の削除
1 つ目のメソッドでは同期的に処理が行われ、2 つ目のメソッドでは非同期で処理が行われます(AIR ファイルの基礎を参照)
例えば、次のコードでは、ユーザのドキュメントディレクトリの AIR Test サブディレクトリが同期的に削除されます。次のコードでは、ユーザのドキュメントディレクトリの AIR Test サブディレクトリが非同期で削除されます。詳しくは、ごみ箱へのファイルの移動を参照してください。
ネイティブウィンドウの操作
ネイティブウィンドウのイベントフロー
ネイティブウィンドウのスタイルと動作を制御するプロパティ
ウィンドウの透明度
MXML アプリケーションウィンドウでの透明度
HTML アプリケーションウィンドウでの透明度
AIR には、Flash®、FlexTM および HTML のプログラミング技法を使用してオペレーティングシステムのネイティブウィンドウを作成するための、簡単に使用できるクロスプラットフォームのウィンドウ API が用意されています。AIR では、アプリケーションの外観を柔軟に開発できます。または、Flex フレームワークで提供されているスキンとして使用できて拡張性のあるクロムを使用して、アプリケーションの実行環境に左右されない独自のスタイルを作成することもできます。さらには、デスクトップに対する透明度とアルファブレンドを完全にサポートするベクトルとビットマップのアートワークを使用して、独自のウィンドウを描画することもできます。矩形のウィンドウに飽きているなら、丸いウィンドウを作成してみてください。NativeWindow に表示オブジェクトを追加するには、ウィンドウステージの表示リストまたはステージの別の表示オブジェクトにオブジェクトを追加します。Flex フレームワークでウィンドウを作成するときは、通常、MXML コンポーネントを使用してウィンドウを設定します。Flex コンポーネントをウィンドウに追加するには、コンポーネントエレメントをウィンドウの MXML 定義に追加します。これらの Flex コンポーネントについて詳しくは、ウィンドウコンテナについてを参照してください。このプロパティを使用して、ここで説明する NativeWindow のプロパティ、メソッドおよびイベントにアクセスできます。オーバーラップするメソッドを使用できる場合は、最も便利なものを使用してかまいません。アプリケーションの最初のウィンドウは、AIR によって自動的に作成されます。AIR は、アプリケーション記述ファイルの initialWindow エレメントで指定されているパラメータを使用して、ウィンドウのプロパティとコンテンツを設定します。アプリケーション記述子で指定するウィンドウプロパティについて詳しくは、アプリケーション記述ファイルの構造を参照してください。ネイティブウィンドウ API には、次のクラスが含まれます。ウィンドウのストリング定数は、次のクラスで定義されています。
ネイティブウィンドウのイベントフロー
ネイティブウィンドウは、イベントを送出して、重要な変更が発生しようとしていること、または既に発生したことを、関係するコンポーネントに通知します。多くのウィンドウ関連イベントは、ペアで送出されます。最初のイベントは、変更が発生しようとしていることを警告します。2 番目のイベントは、変更が行われたことを通知します。警告イベントはキャンセルできますが、通知イベントはキャンセルできません。次のシーケンスは、ユーザがウィンドウの最大化ボタンをクリックすると発生するイベントのフローを示したものです。登録済みのどのリスナーもイベントをキャンセルしない場合、ウィンドウは最大化します。さらに、NativeWindow オブジェクトはウィンドウのサイズと位置に関連する変更についてのイベントも送出します。これらの関連する変更については、警告イベントは送出されません。次のような関連イベントがあります。最大化操作によりウィンドウの左上隅の位置が移動した場合、move イベントが送出されます。最大化操作によりウィンドウのサイズが変更された場合、resize イベントが送出されます。NativeWindow オブジェクトは、ウィンドウを最小化する、元のサイズに戻す、閉じる、移動する、サイズ変更するときも、同様のシーケンスでイベントを送出します。警告イベントは、ウィンドウクロムまたはその他のオペレーティングシステムによって制御されるメカニズムを通して変更が開始されるときにのみ、送出されます。ウィンドウメソッドを呼び出してウィンドウのサイズ、位置、表示状態を変更すると、ウィンドウは変更を通知するイベントのみを送出します。必要な場合は、ウィンドウの dispatchEvent() メソッドを使用して警告イベントを送出した後、警告イベントがキャンセルされたかどうかを確認してから、変更を継続できます。
ネイティブウィンドウのスタイルと動作を制御するプロパティ
ウィンドウの基本的な外観と動作は、次のプロパティが制御します。
AIR は、初期アプリケーションウィンドウのプロパティを、アプリケーション記述子から読み取ります(ただし、type プロパティはアプリケーション記述子では設定できず、常に normal に設定されます)
ウィンドウの作成後に、プロパティを変更することはできません。これらのプロパティの設定の中には、同時に指定できないものがあります。AIR には次のウィンドウタイプがあります。一般的なウィンドウです。ツールパレットです。lightweight ウィンドウは、通知バブルや、短時間だけ表示される領域を開くコンボボックスなどのコントロールに適しています。ウィンドウクロムは、ユーザがデスクトップ環境内のウィンドウを操作できるようにする一連のコントロールです。クロムエレメントには、タイトルバー、タイトルバーボタン、ボーダー、サイズ変更グリップなどがあります。ユーザのオペレーティングシステムによって作成およびスタイル設定される標準コントロールのセットをウィンドウで使用するには、standard システムクロムを選択します。ウィンドウに独自のクロムを使用するには(または Flex クロムを使用するには)、none を選択します。システムクロムは、システムによって管理されます。アプリケーションでは、コントロール自体に直接アクセスすることはできませんが、コントロールが使用されるときに送出されるイベントには対応できます。また、透明で非矩形のウィンドウを作成してもかまいません。
ウィンドウの透明度
ウィンドウとデスクトップまたは他のウィンドウとのアルファブレンドを可能にするには、transparent プロパティを true に設定します。transparent プロパティは、ウィンドウを作成する前に設定する必要があり、変更することはできません。透明なウィンドウには、デフォルトの背景はありません。アプリケーションによって描画されたオブジェクトを含まないウィンドウ領域は表示されません。表示されたオブジェクトのアルファ設定が 1 未満の場合は、同じウィンドウ内の他の表示オブジェクト、他のウィンドウ、デスクトップなど、オブジェクトの下にあるすべてのものが透けて見えます。大きいアルファブレンド領域のレンダリングには時間がかかる場合があるので、この効果は控えめに使用する必要があります。ボーダーが不規則な形のウィンドウ、または「フェードアウト」するウィンドウや不可視のウィンドウを作成するには、透明なウィンドウが便利です。透明度は、システムクロムを使用するウィンドウでは使用できません。詳しくは、HTML ページに SWF コンテンツまたは PDF コンテンツを読み込む場合の考慮事項を参照してください。オペレーティングシステムによっては、ハードウェア構成、ソフトウェア構成またはユーザの表示オプションにより、透明度がサポートされない場合があります。透明度がサポートされていない場合、アプリケーションの背景は黒になります。この場合、アプリケーションの完全な透明領域は不透明の黒として表示されます。このプロパティで false をテストする場合は、警告ダイアログをユーザに表示するか、フォールバックとして矩形の不透明なユーザインターフェイスを表示することができます。Linux オペレーティングシステムで透明度をサポートするには、コンポジティングウィンドウマネージャが必要です。ただし、その場合でも、ユーザの表示オプションやハードウェア構成により、透明度が使用できないことがあります。
MXML アプリケーションウィンドウでの透明度
デフォルトでは、MXML ウィンドウの背景は、transparent としてウィンドウを作成した場合でも不透明です(透明効果はウィンドウの角でわかります)
ウィンドウの背景を透明にするには、スタイルシートまたはアプリケーションの MXML ファイルに含まれる <mx:Style> エレメントで、背景の色とアルファ値を設定します。例えば、次のスタイル宣言を使用すると、背景は少しだけ透明な緑色のシェードになります。
HTML アプリケーションウィンドウでの透明度
HTML ドキュメント内のエレメントに背景色を設定すると、そのエレメントの背景は透明ではなくなります。透明度(または不透明度)の値の部分的な設定は、サポートされていません。ただし、透明な PNG 形式のグラフィックをページまたはページエレメントの背景として使用することで、同じような視覚効果を得ることができます。次の表に、Mac OS X および Windows オペレーティングシステムでのウィンドウプロパティ設定の異なる組み合わせによる視覚効果を示します。
AIR アプリケーションプロパティの設定
アプリケーション記述ファイルの構造
アプリケーション記述ファイルでのプロパティの定義
基本アプリケーション情報の定義
インストールフォルダおよびプログラムメニューフォルダの定義
初期アプリケーションウィンドウのプロパティの定義
アイコンファイルの指定
アプリケーションアップデート用のカスタムユーザインターフェイスの提供
アプリケーションのブラウザ呼び出しの許可
ファイルの種類による関連付けの宣言
AIR アプリケーションには、その構成要素であるファイルなどのアセットに加えて、アプリケーション記述ファイルが必要です。アプリケーション記述ファイルは、AIR アプリケーションの基本プロパティを定義する XML ファイルです。
アプリケーション記述ファイルの構造
アプリケーション記述ファイルには、アプリケーションの名前、バージョン、著作権情報など、アプリケーション全体に影響するプロパティが含まれています。アプリケーション記述ファイルには任意の名前を付けることができます。xml という名前に変更されて、パッケージ内の特別なディレクトリに格納されます。アプリケーション記述ファイルの例を次に示します。
アプリケーション記述ファイルでのプロパティの定義
アプリケーション記述ファイルのルートには、次の複数の属性を持つ application プロパティがあります。
この名前空間は、AIR のメジャーリリースごとに異なります(マイナーパッチには影響されません)
名前空間の最後のセグメント(「1
0」など)は、アプリケーションに必要なランタイムバージョンを示します。通常、AIR アプリケーションに必要な AIR のバージョンを指定するには、単にアプリケーション記述ファイルに名前空間を定義します。1 など)ごとに変更されます。パッチリリースに伴う名前空間の変更はありません。パッチリリースには、限られたフィックスのセットだけが含まれ、API の変更は含まれません。通常、アプリケーションに必要なパッチリリースをアプリケーションが指定することはありません。ただし、アプリケーションの問題がパッチリリースのフィックスによって修復される場合があります。このような場合は、アプリケーションで minimumPatchLevel 属性の値を指定し、アプリケーションのインストール前にパッチを適用できます。AIR アプリケーションのインストーラを実行すると、必要なバージョンやパッチがあれば、ダウンロードしてインストールするよう要求されます。
基本アプリケーション情報の定義
次のエレメントでは、アプリケーション ID、バージョン、名前、ファイル名、説明および著作権情報を定義します。id アプリケーション ID と呼ばれる、アプリケーション固有の識別ストリングです。属性値には、次の文字のみを使用できます。このエレメントは必須です。DNS に似た形式は必須ではありません。また、AIR では、名前と実際の DNS ドメインとの関連付けは作成されません。
version アプリケーションのバージョン情報を指定します(ランタイムのバージョンとは関係ありません)
version ストリングは、アプリケーション定義の指示子です。
したがって、バージョン「3
0」より新しいとは見なされません。4a」のように指定します。このエレメントは必須です。filename アプリケーションのインストール時に、アプリケーションのファイル名(拡張子なし)として使用するストリングです。ランタイムでは、アプリケーションファイルから AIR アプリケーションを起動します。このエレメントは必須です。これらの文字は、各種のファイルシステムで使用が禁止されています。filename の値の末尾にピリオドを付けることはできません。name (オプション、ただし推奨)AIR アプリケーションインストーラに表示されるタイトルです。1 つのテキストノードを指定した場合(複数の text エレメントを指定しない場合)、システム言語に関係なしに、この名前が AIR アプリケーションインストーラで使用されます。0 アプリケーション記述スキーマでは、1 つの単純なテキストノードのみを名前として定義できます。複数の text エレメントを定義することはできません。例えば、次の例では 3 つの言語(英語、フランス語、スペイン語)を指定しています。txt)に定義された言語コードを指定します。AIR アプリケーションインストーラでは、ユーザのオペレーティングシステムのユーザインターフェイス言語と最も近い名前が使用されます。例えば、アプリケーション記述ファイルの name エレメントの値として en(英語)が含まれているとします。オペレーティングシステムのユーザインターフェイス言語が en(英語)になっている場合は、AIR アプリケーションインストーラで名前 en が使用されます。システムのユーザインターフェイス言語が en-US(アメリカ英語)の場合にも名前 en が使用されます。システムのユーザインターフェイス言語と一致する名前がアプリケーションに定義されていない場合、AIR アプリケーションインストーラではアプリケーション記述ファイルに定義された最初の name の値が使用されます。name エレメントが指定されていない場合、AIR アプリケーションインストーラではアプリケーション名として filename が表示されます。name エレメントは、AIR アプリケーションインストーラで使用されるアプリケーションのタイトルを定義するだけです。1 アプリケーションインストーラは、複数の言語(繁体字中国語、簡体字中国語、英語、フランス語、ドイツ語、イタリア語、日本語、韓国語、ブラジル語、ポルトガル語、ロシア語およびスペイン語)をサポートしています。AIR アプリケーションでは、システムのユーザインターフェイス言語に基づいて、アプリケーションとタイトルおよび説明以外のテキスト用として、表示された言語が選択されます。この言語の選択は、アプリケーション記述ファイルの設定とは関係なく行われます。name エレメントでは、実行中のインストール済みアプリケーションの言語は定義しません。複数言語アプリケーションの開発について詳しくは、AIR アプリケーションのローカライズを参照してください。1 つのテキストノードを指定した場合(複数の text エレメントを指定しない場合)、システム言語に関係なく、この説明が AIR アプリケーションインストーラで使用されます。0 アプリケーション記述スキーマでは、1 つの単純なテキストノードのみを名前として定義できます。複数の text エレメントを定義することはできません。例えば、次の例では 3 つの言語(英語、フランス語、スペイン語)を指定しています。txt)に定義された言語コードを指定します。AIR アプリケーションインストーラでは、ユーザのオペレーティングシステムのユーザインターフェイス言語と最も近い説明が使用されます。オペレーティングシステムのユーザインターフェイス言語が en(英語)になっている場合は、AIR アプリケーションインストーラで名前 en が使用されます。システムのユーザインターフェイス言語が en-US(アメリカ英語)の場合にも名前 en が使用されます。システムのユーザインターフェイス言語と一致する名前がアプリケーションに定義されていない場合、AIR アプリケーションインストーラではアプリケーション記述ファイルに定義された最初の description の値が使用されます。複数言語アプリケーションの開発について詳しくは、AIR アプリケーションのローカライズを参照してください。Macintosh では、インストールしたアプリケーションのバージョン情報ダイアログボックスに著作権情報が表示されます。
インストールフォルダおよびプログラムメニューフォルダの定義
インストールフォルダおよびプログラムメニューフォルダは、次のプロパティ設定で定義します。installFolder (オプション)デフォルトのインストールディレクトリのサブディレクトリを指定します。app にそれぞれインストールされます。ネストされたサブディレクトリを指定する場合は、次に示すように、スラッシュ(/)をディレクトリの区切り文字として使用します。
ただし、各種のファイルシステムでフォルダ名として使用できない文字は除きます(使用できない文字の一覧については、上記の filename プロパティを参照してください)
installFolder プロパティを指定しない場合、アプリケーションは、name プロパティに基づいて、デフォルトのインストールディレクトリのサブディレクトリにインストールされます。
programMenuFolder (オプション)Windows オペレーティングシステムのすべてのプログラムメニューに表示するアプリケーションへのショートカットの位置を指定します(現在、この設定は他のオペレーティングシステムでは無視されます)
この値の末尾文字としてスラッシュ(/)は使用しないでください。
初期アプリケーションウィンドウのプロパティの定義
ランタイムは、AIR アプリケーションの読み込み時に、initialWindow エレメントの値を使用してアプリケーションの初期ウィンドウを作成します。ルートコンテンツファイルが読み込まれるウィンドウのプロパティは、initialWindow エレメントの子エレメントで設定します。URL は、アプリケーションのインストールフォルダのルートを基準に指定します(ADL を使用して AIR アプリケーションを実行する場合は、アプリケーション記述ファイルを含むフォルダを基準とする URL を指定します。例えば、空白文字は、%20 としてエンコードする必要があります。none に設定した場合、システムクロムは表示されません。実行時にシステムクロムの設定を変更することはできません。透明なウィンドウは、描画に時間がかかり、より多くのメモリを必要とする場合があります。実行時に透明設定を変更することはできません。作成したメインウィンドウを直ちに表示する場合にのみ、true に設定します。この場合、ウィンドウのコンポーネントの配置に伴ってウィンドウへの変更も表示されます。最初はメインウィンドウを非表示のままにしておくことで、ウィンドウの位置やサイズ、およびウィンドウ内のコンテンツのレイアウトに対する変更が表示されないようにすることができます。詳しくは、ネイティブウィンドウの操作を参照してください。これらの値を設定しない場合、ウィンドウサイズは、ルート SWF ファイルの設定またはオペレーティングシステム(HTML の場合)によって決定されます。これらの値を設定しない場合、ウィンドウの最小サイズおよび最大サイズはオペレーティングシステムによって決定されます。これらの設定のデフォルト値は true です。
アイコンファイルの指定
icon プロパティでは、アプリケーションで使用するアイコンファイルを指定します。アイコンの指定は必須ではありません。icon プロパティを指定しない場合、オペレーティングシステムによってデフォルトのアイコンが表示されます。アイコンファイルのパスは、アプリケーションのルートディレクトリを基準に指定します。アイコンファイルは PNG 形式である必要があります。次のすべてのアイコンサイズを指定できます。特定のサイズに対応するエレメントが存在する場合、ファイル内のイメージは指定どおりのサイズになります。一部のサイズしか存在しない場合、アイコンの使用に合わせて、最も近いサイズのイメージがオペレーティングシステムによって拡大または縮小されます。注意: 指定したアイコンは、AIR パッケージに自動的には追加されません。アプリケーションをパッケージ化する際には、アイコンファイルが適切な相対場所に格納されている必要があります。最適な結果を得るためには、使用可能なサイズごとにイメージを用意します。また、アイコンが 16 ビットおよび 32 ビットのカラーモードで適切に表示されることを確認します。
アプリケーションアップデート用のカスタムユーザインターフェイスの提供
AIR では、デフォルトのインストールダイアログを使用して、アプリケーションのインストールおよびアップデートを行います。ただし、アプリケーションアップデート用の独自のユーザインターフェイスを提供できます。インストールされているバージョンのアプリケーションで customUpdateUI エレメントが true に設定されているときに、ユーザが新しいバージョンの AIR ファイルをダブルクリックするか、シームレスインストール機能を使用してアプリケーションのアップデートをインストールすると、デフォルトの AIR アプリケーションインストーラではなく、インストールされているバージョンのアプリケーションがランタイムによって起動されます。
その後、アプリケーションロジックでアップデート操作の続行方法を決定できます(アップグレードを続行するには、AIR ファイルとインストールされているアプリケーションのアプリケーション ID および発行者 ID が一致している必要があります)
注意: customUpdateUI のメカニズムが機能するのは、アプリケーションがインストール済みで、ユーザがアップデートを含む AIR インストールファイルをダブルクリックするか、シームレスインストール機能を使用してアプリケーションのアップデートをインストールする場合だけです。アップデートのダウンロードおよびインストールは、customUpdateUI が true かどうかにかかわらず、独自のアプリケーションロジックとカスタム UI (必要な場合)を使用して行うことができます。詳しくは、AIR アプリケーションのアップデートを参照してください。
アプリケーションのブラウザ呼び出しの許可
次の設定を指定すると、ブラウザ呼び出し機能を介して(ユーザが Web ブラウザ内のページのリンクをクリックして)インストール済みの AIR アプリケーションを起動できるようになります。この値を true に設定する場合は、ブラウザによる呼び出しで説明しているセキュリティ上の影響を考慮してください。詳しくは、Web ページからの AIR アプリケーションのインストールと実行を参照してください。
ファイルの種類による関連付けの宣言
fileTypes エレメントを使用すると、AIR アプリケーションを関連付けることができるファイルの種類を宣言できます。AIR アプリケーションをインストールすると、宣言済みのファイルの種類がすべてオペレーティングシステムに登録されます。また、これらのファイルの種類が別のアプリケーションに関連付けられていない場合は、AIR アプリケーションに関連付けられます。注意: ランタイムメソッドで管理できるのは、アプリケーション記述子で宣言されたファイルの種類の関連付けだけです。このプロパティが存在する場合は、任意の数の fileType エレメントをプロパティに含めることができます。複数の拡張子について同じ名前を使用できます。
ファイルの種類は、拡張子によって一意に識別されます(拡張子は先頭のピリオドなしで指定します)
description エレメントはオプションで、オペレーティングシステムのユーザインターフェイスを介してユーザに表示されます。contentType プロパティもオプションですが、このプロパティを設定すると、ある状況下でファイルを開くのに最適なアプリケーションをオペレーティングシステムが特定できるようになります。この値はファイルコンテンツの MIME タイプである必要があります。ファイル拡張子には、アプリケーションアイコンエレメントと同じ形式のアイコンを指定できます。
このアイコンファイルも AIR インストールファイルに含める必要があります(アイコンファイルは自動的にはパッケージ化されません)
ファイルの種類が AIR アプリケーションに関連付けられている場合、ユーザが該当する種類のファイルを開くたびにその AIR アプリケーションが起動されます。アプリケーションが既に実行されている場合、AIR は実行中のインスタンスに InvokeEvent オブジェクトを送出します。実行されていない場合、AIR はまずアプリケーションを起動します。このパスを使用してファイルを開くことができます。
ファイルの関連付けの管理
コマンドライン引数のキャプチャ
2 つのアプリケーション間でのメッセージ送信
異なるドメインのコンテンツおよび他の AIR アプリケーションへの接続
LocalConnection オブジェクトでの通信相手は、同じクライアントコンピュータ上で動作する AIR アプリケーションと SWF ファイルに限られますが、通信相手が同じアプリケーションで動作している必要はありません。この場合、セキュリティに関する問題への対処は不要です。しかし、異なるドメイン間で通信を行う必要がある場合は、セキュリティ対策を実施する必要があります。いくつかの方法があります。client プロパティに、メンバーメソッドを持つオブジェクトを設定します。client プロパティに、呼び出すことができるすべてのコールバックメソッドが含まれます。
2 つのアプリケーション間でのメッセージ送信
この例外は、オブジェクトが接続済みであるために接続の試行が失敗したことを示します。リモートアプリケーションにパラメータを送信する場合は、次のコードに示すように、send() メソッドに対するメソッド名の指定の後に追加パラメータを指定します。
異なるドメインのコンテンツおよび他の AIR アプリケーションへの接続
アスタリスク値(*)は、すべてのドメインにアクセスを許可することを示します。localhost というストリングは、ローカル(ただし、アプリケーションリソースディレクトリ外)にインストールされているコンテンツから該当のアプリケーションへの呼び出しを許可することを示します。異なるドメインにあるコンテンツ間での通信を実装する場合は、connectionName パラメータに対して、アンダースコアで始まる名前を指定します。このアンダースコアを付けると、受信側 LocalConnection オブジェクトを含むコンテンツのドメイン間におけるポータビリティが高まります。考えられる 2 つの状況を次に示します。したがって、新しいスーパードメインを参照するようにすべての送信側 LocalConnection オブジェクトを手動で編集する必要が生じます。もう 1 つの欠点は、セキュリティ関連です。アンダースコアシンタックスを使用する接続名では、リッスンしているアプリケーションのドメインは識別されません。これらの理由から、ドメイン修飾名の使用が推奨されます。
AIR アプリケーションセキュリティサンドボックスで実行されるコンテンツ(AIR アプリケーションと共にインストールされるコンテンツ)では、ブラウザで実行される SWF コンテンツで使用するドメインの代わりに、app# というストリング、AIR アプリケーションのアプリケーション ID(アプリケーション記述ファイルで定義)、ドット()文字、アプリケーションの発行者 ID の順に続く 1 つの値を使用します。AIR アプリケーションでは、このドメイン名は接続ストリングと同じ要領でアプリケーション ID と発行者 ID により構成されます。アプリケーションをインストールして実行する場合は、発行者 ID をドメインストリングに含めます。一時的な発行者 ID を ADL コマンドライン引数を使用して割り当てることができます。接続ストリングおよびドメイン名が適切にフォーマットされていることをテストするには、一時的な発行者 ID を使用します。
ローカル SQL データベースの操作 / SQL データベースの操作のための戦略
データベースのパフォーマンスの向上
複数の操作をトランザクションにまとめる。ランタイムの処理を最小限にする。スキーマの変更を避ける。Adobe AIR には、アプリケーションのデータベース操作のパフォーマンスを向上させるために使用できるいくつかのテクニックが組み込まれています。ここで説明するテクニックのほかに、SQL ステートメントの記述方法もデータベースのパフォーマンスに影響します。多くの場合、SQL SELECT ステートメントを記述して特定の結果セットを取得するには複数の方法があり、使用する方法によってデータベースエンジンの処理が増減することもあります。この側面によるデータベースのパフォーマンスの向上(パフォーマンスを向上させるための SQL ステートメントの設計)については、Adobe AIR のマニュアルでは取り上げません。SQL ステートメントは、実行前に準備(コンパイル)されて、そのステートメントを実行するために内部で実行されるステップが特定されます。execute() を呼び出すと、ステートメントが実行される前に自動的に準備されます。text プロパティが変更されていない限り、ステートメントは準備された状態のままです。したがって、より高速に実行されます。
ステートメントの再利用のメリットを最大限に活用するために、実行のたびに値を変更する必要がある場合は、ステートメントパラメータを使用してステートメントをカスタマイズします(ステートメントパラメータを指定するには SQLStatement
ステートメントパラメータの値を変更しても、SQLStatement インスタンスの text プロパティを変更した場合とは違って、ステートメントを準備し直す必要はありません。ステートメント内でのパラメータの使用について詳しくは、ステートメント内でのパラメータの使用を参照してください。ステートメントを準備して実行する操作は負荷が高くなる可能性があるため、初期データを事前に読み込んでから、他のステートメントをバックグラウンドで実行することをお勧めします。まず、アプリケーションで最初に必要になるデータを読み込み、アプリケーションの最初の起動操作が完了したら(またはアプリケーションのその他の「アイドル」時に)、他のステートメントを実行します。例えば、アプリケーションで初期画面を表示するためにデータベースに一切アクセスしない場合は、その画面が表示されるまで待ってからデータベース接続を開きます。一方、アプリケーションで起動後すぐに何らかのデータ(特定のクエリの結果など)を表示する場合は、そのクエリの SQLStatement インスタンスをすぐに実行します。初期データが読み込まれて表示されたら、他のデータベース操作のための SQLStatement インスタンスを作成し、可能であれば、後に必要になる他のステートメントを実行します。インスタンスへの参照を保持するには、その変数を関数スコープの変数ではなくクラススコープの変数として宣言します。そのためには、SQL ステートメントが 1 つのクラスにラップされるようにアプリケーションを構成することをお勧めします。一緒に実行される一連のステートメントを 1 つのクラスにラップすることもできます。SQLStatement インスタンスをクラスのメンバ変数として定義すると、そのインスタンスは、そのラッパークラスのインスタンスがアプリケーション内に存在する限り保持されます。最低でも、SQLStatement インスタンスを含む変数を関数の外部で定義すれば、そのインスタンスがメモリ内に保持されるようになります。複数の操作をトランザクションにまとめる。データの追加や変更を伴う SQL ステートメント(INSERT ステートメントや UPDATE ステートメント)を多数実行する場合は、すべてのステートメントを明示的なトランザクションの中で実行するとパフォーマンスが大幅に向上します。トランザクションを明示的に開始しない場合は、各ステートメントが、自動的に作成される固有のトランザクションで実行されます。この場合、トランザクション(ステートメント)の実行が完了するたびに結果のデータがディスク上のデータベースファイルに書き込まれます。一方、トランザクションを明示的に作成してそのトランザクションのコンテキストでステートメントを実行する場合は、すべての変更がメモリ内で行われ、トランザクションがコミットされるときに一度にデータベースファイルに書き込まれます。一般に、ディスクへのデータの書き込みは操作の中で最も時間のかかる部分です。したがって、ディスクへの書き込みを SQL ステートメントごとに行う代わりに一度に行うようにすると、パフォーマンスが大幅に向上します。ランタイムの処理を最小限にする。以下のテクニックを使用すると、データベースエンジンで無駄な処理が行われないようにして、アプリケーションのパフォーマンスを向上させることができます。
ステートメントで常にデータベース名をテーブル名と一緒に明示的に指定します(メインデータベースの場合は「main」を使用します)
データベース名を明示的に指定すると、一致するテーブルを見つけるためにランタイムが各データベースをチェックする必要がなくなります。間違ったデータベースが選択される可能性もなくなります。SQLConnection が接続されているデータベースが 1 つしかない場合でもこのルールに従うようにしてください。多数の行を取得する SELECT ステートメントによって返される行を分割します。スキーマの変更を避ける。いったんデータベースのテーブルにデータを追加したら、なるべくデータベースのスキーマ(テーブル構造)を変更しないようにします。データベースファイルでは通常、ファイルの先頭にテーブル定義が配置されています。データベースへの接続を開くと、それらの定義が読み込まれます。データベースのテーブルに追加したデータはファイルのテーブル定義データの後に追加されますが、テーブルに列を追加したり新しいテーブルを追加したりしてスキーマを変更すると、新しいテーブル定義データがデータベースファイル内でテーブルデータと混ざり合ってしまいます。すべてのテーブル定義データがデータベースファイルの先頭にないと、ファイルの様々な部分からテーブル定義データが読み取られるため、データベースへの接続を開くのにかかる時間が増加します。これにより、データベースファイルが再構築されて、テーブル定義データがファイルの先頭にまとめて配置されます。
ただし、compact() 操作には時間がかる場合があります(データベースファイルが大きくなるにつれてその傾向が強くなります)
バイト配列の操作
この例では、種類の異なる複数のファイルを含む単純な
zip ファイルを読み取る方法を示します。その手段として、ここでは各ファイルに関連するデータをメタデータから抽出し、ファイルごとに ByteArray に圧縮解除して、ファイルをデスクトップに書き込んでいます。の仕様に基づきます。
最初にあるのは
zip アーカイブ内の最初のファイルのファイルヘッダーとファイルデータで、その後に、他の各ファイルのファイルヘッダーとファイルデータのペアが続きます。ファイルヘッダーの構造については後で説明します。
zip ファイルには次に、必要に応じてデータ記述子レコードが含まれます(通常は、出力 zip ファイルがディスクに保存されずメモリに作成された場合がこれに当たります)
次に、アーカイブ復号化ヘッダー、アーカイブ追加データレコード、中央ディレクトリ構造、Zip64 中央ディレクトリ終了レコード、Zip64 中央ディレクトリ終了ロケータ、中央ディレクトリ終了レコードなど、いくつかの追加オプションエレメントがあります。この例のコードは、フォルダを含まない zip ファイルのみを解析するように作られており、データ記述子レコードは想定していません。最後のファイルデータの後にある情報はすべて無視します。各ファイルのファイルヘッダーの形式は次のとおりです。
必要なバージョン
ファイル名の長さ
追加フィールドの長さ
ファイルヘッダーの後には実際のファイルデータがあり、圧縮方法フラグに応じて、圧縮されている場合とされていない場合があります。フラグの値は、ファイルデータが圧縮されていない場合は 0(ゼロ)、データが DEFLATE アルゴリズムで圧縮されている場合は 8、他の圧縮アルゴリズムの場合は別の値になります。この例のユーザインターフェイスは、ラベルとテキスト領域(taFiles)で構成されています。
アプリケーションは、zip ファイルで検出したファイルごとに、ファイル名、圧縮サイズおよび非圧縮サイズの情報をテキスト領域に書き込みます。次の HTML ページは、アプリケーションのユーザインターフェイスの定義です。プログラムの最初で、次のタスクを実行します。ファイルヘッダーのメタデータを格納する変数を定義します。zip」という名前のファイル)を指定します。プログラムは、次に、while() ステートメントでループを開始し、ファイルストリーム内の現在位置がファイルのサイズ以上になるまで続けます。最初の 30 バイトは、最初のファイルヘッダーの固定サイズ部分を構成します。
シグネチャが異なる場合は、コードが
zip ファイルのファイル部分を超えており、展開するファイルがそれ以上ないことを意味します。その場合は、コードはバイト配列の終端を待つことなく、直ちに while ループを終了します。コードの次の部分では、オフセット位置 8 のヘッダーバイトを読み取って、値を変数 compMethod に格納します。このバイトには、そのファイルの圧縮時に使用された圧縮方法を示す値が含まれます。
複数の圧縮方法を使用できますが、実際には、ほとんどすべての
最初の 30 バイトの後にはヘッダーの可変長部分があり、ファイル名と、場合によっては追加フィールドが含まれます。サイズはファイル名の長さと追加フィールドの長さを加えたもので、これらの値はヘッダーのオフセット 26 および 28 から読み取ります。次に、プログラムは、offset 変数に格納されているバイト数だけ、ファイルヘッダーの可変長部分を読み取ります。そして、ヘッダーの可変長部分からファイル名を読み取り、ファイルの圧縮サイズ(zip サイズ)と非圧縮サイズ(元のサイズ)と共にテキスト領域に表示します。続いて、圧縮サイズで指定されている長さだけファイルストリームからファイルの残りを読み取って bytes に格納し、最初の 30 バイトのファイルヘッダーを上書きします。圧縮サイズは、ファイルが圧縮されていない場合でも正確です。その場合の圧縮サイズはファイルの非圧縮サイズと等しくなるからです。次に、圧縮ファイルの圧縮を解除し、outfile() 関数を呼び出して出力ファイルストリームに書き込みます。outfile() には、ファイル名と、ファイルデータを含むバイト配列を渡します。zip ファイルの次のバイトの処理を続けます。
つまり、別のファイルを展開するか、または最後のファイルの処理が済んだ場合は
zip ファイルの処理を終了します。
バイト配列の操作
オブジェクトの読み取りと書き込み
js ファイルが含まれている場合は、エイリアス air
意味のあるデータストリームはすべて、分析して目的の情報を発見できるような形式に編成されています。例えば、単純な従業員ファイルのレコードには通常、ID 番号、氏名、住所、電話番号などが含まれます。MP3 オーディオファイルには、ダウンロードされているファイルのタイトル、作成者、アルバム、発行日、およびジャンルを示す ID3 タグが含まれます。一定の形式を使用することで、データストリーム上のデータの予想される順序がわかります。これにより、データストリームをインテリジェントに読み取ることができます。ByteArray クラスには、データストリームの読み書きを容易にするメソッドがいくつか用意されています。これらのメソッドを使用することで、データストリームから特定のデータ型の変数にデータを読み取ったり、特定のデータ型からバイナリデータストリームに直接書き込んだりすることができます。例えば、次のコードは、ストリングと浮動小数点数の単純な配列を読み取り、各エレメントを ByteArray に書き込みます。同じデータパターンの繰り返しなので、ループを使用して配列を読み取ることができます。ByteArray の読み書きを行うと、使用したメソッドによって position プロパティが更新され、最後に読み書きしたバイトの直後の位置を指すようになります。同様に、読み取り操作を行うと、読み取ったバイト数だけ position プロパティがインクリメントされます。次の例では、これらのプロパティの使用方法を示します。マルチバイトの数値、つまり格納に必要なメモリが 1 バイトより多い数値の格納方法は、コンピュータによって異なる場合があります。例えば、整数の格納に 4 バイト(32 ビット)のメモリを使用するとします。あるコンピュータでは数値の最上位バイトが最初に(最も小さいメモリアドレスに)格納され、別のコンピュータでは最下位バイトが最初に格納されます。このようなコンピュータの属性、すなわちバイト順序の属性は、ビッグエンディアン(最上位バイトが最初)またはリトルエンディアン(最下位バイトが最初)と呼ばれます。例えば、0x31323334 という数値は、バイト順序がビッグエンディアンかリトルエンディアンかに応じて次のように格納されます。a0 は 4 バイトのうちの最小メモリアドレスを表し、a3 は最大メモリアドレスを表します。ByteArray クラスの endian プロパティを使用すると、マルチバイト数値を処理する際のバイト順序を指定することができます。
オブジェクトの読み取りと書き込み
0 クラスで使用されています。1 バイト型のマーカが、その後に続くエンコードされたデータの型を示します。型マーカの後には、エンコードされたデータが続きます。このようなマーカの場合、他には何もエンコードされません。AMF 0 では複雑なオブジェクトの参照渡しがサポートされ、エンドポイントでオブジェクトの関係を復元することができます。0 で導入された新しいデータ型をサポートします。」というメッセージを終了時に AIR ウィンドウに表示しています。
ファイルシステムの操作
ディレクトリの操作
ディレクトリの作成
一時ディレクトリの作成
ディレクトリの列挙
ディレクトリのコピーおよび移動
ディレクトリの内容の削除
ランタイムには、ローカルファイルシステム上のディレクトリを操作する機能が用意されています。ディレクトリを参照する File オブジェクトの作成について詳しくは、File オブジェクトでのディレクトリの参照を参照してください。
ディレクトリの作成
例えば、次のコードでは、ユーザのホームディレクトリのサブディレクトリとして AIR Test というディレクトリを作成します。また、一部のモードでは、FileStream オブジェクトでファイルを開くときにもディレクトリが作成されます。WRITE に設定すると、存在しない場合にディレクトリが作成されます。詳しくは、ファイルの読み取りと書き込みのワークフローを参照してください。
一時ディレクトリの作成
一時ディレクトリは、アプリケーションのセッションに使用される一時ファイルを一時的に格納するために使用できます。システムの一時ディレクトリに新しい一意の一時ファイルを作成するための createTempFile() メソッドも用意されています。一時ディレクトリは自動的には削除されないので、アプリケーションを終了する前に削除する必要がないか確認してください。
ディレクトリの列挙
例えば、次のコードでは、ユーザのドキュメントディレクトリの内容の一覧を出力します(サブディレクトリの内容は確認されません)
ディレクトリのコピーおよび移動
ファイルをコピーまたは移動する場合と同じメソッドを使用して、ディレクトリをコピーまたは移動することができます。例えば、次のコードでは、同期的にディレクトリがコピーされます。
copyTo() メソッドの overwrite パラメータに true を指定すると、既存のターゲットディレクトリにあるすべてのファイルおよびフォルダが削除され、ソースディレクトリ内のファイルおよびフォルダに置き換えられます(ターゲットファイルがソースディレクトリに存在しない場合でも同様に処理されます)
copyTo() メソッドの newLocation パラメータとして指定するディレクトリは、結果として生成されるディレクトリへのパスを指定するものであり、そのディレクトリを格納する親ディレクトリを指定するものではありません。詳しくは、ファイルのコピーおよび移動を参照してください。
ディレクトリの内容の削除
1 つ目のメソッドでは同期的に処理が行われ、2 つ目のメソッドでは非同期で処理が行われます(AIR ファイルの基礎を参照)
例えば、次のコードでは、ユーザのドキュメントディレクトリの AIR Test サブディレクトリが同期的に削除されます。次のコードでは、ユーザのドキュメントディレクトリの AIR Test サブディレクトリが非同期で削除されます。詳しくは、ごみ箱へのファイルの移動を参照してください。
ネイティブウィンドウの操作
ウィンドウの管理
ウィンドウのアクティブ化、表示、非表示
ウィンドウの表示順序の変更
ウィンドウを閉じる。
ウィンドウ操作のキャンセルの許可
ウィンドウの最大化、最小化、復元
ウィンドウのサイズ変更と移動
例:ウィンドウのサイズ変更と移動
デスクトップウィンドウの外観、動作、ライフサイクルを管理するには、NativeWindow クラスのプロパティとメソッドを使用します。ウィンドウを操作するには、最初にウィンドウインスタンスを取得する必要があります。ウィンドウインスタンスは、次のいずれかの場所から取得できます。
ステージ上の表示オブジェクト
イベントオブジェクトの target プロパティは、イベントを送出したウィンドウを示しています。
activeWindow は、アプリケーションのアクティブなウィンドウを示しています(ただし、アクティブなウィンドウが AIR アプリケーションのウィンドウでない場合は、null を返します)
ウィンドウのアクティブ化、表示、非表示
ウィンドウをアクティブ化すると、ウィンドウが前面になり、キーボードとマウスのフォーカスが設定され、必要な場合は、ウィンドウを復元するか、または visible プロパティを true に設定することでウィンドウが表示されるようになります。あるウィンドウをアクティブ化しても、アプリケーション内での他のウィンドウの順序は変わりません。非表示になっているウィンドウをアクティブ化しないで表示するには、visible プロパティを true に設定します。これによりウィンドウは前面になりますが、フォーカスがウィンドウに割り当てられることはありません。ウィンドウを非表示にすると、ウィンドウ、関連するタスクバーアイコン、および MacOS X ではウィンドウメニューのエントリが表示されなくなります。注意: Mac OS X では、ドックアイコンのある最小化されたウィンドウを完全に非表示にすることはできません。最小化されたウィンドウの visible プロパティを false に設定しても、そのウィンドウのドックアイコンは表示されています。ユーザがアイコンをクリックすると、ウィンドウは復元されて表示されるようになります。
ウィンドウの表示順序の変更
AIR では、ウィンドウの表示順序を複数の方法で直接変更できます。ウィンドウの表示順序の前面は背面に移動したり、ウィンドウを別のウィンドウの前や後に移動したりできます。同時に、ウィンドウをアクティブ化することでウィンドウの順序を変更することもできます。複数のウィンドウでこのプロパティを設定すると、それらのウィンドウの間では表示順序が並べ替えられますが、alwaysInFront が false に設定されているウィンドウよりは常に前面に配置されます。また、最上位グループのウィンドウは、AIR アプリケーションがアクティブではない場合でも、他のアプリケーションのウィンドウより前面に表示されます。この動作はユーザにとっては迷惑である場合があるので、alwaysInFront を true に設定するのは、それが必要であって適切である場合にのみ行う必要があります。例えば、次のような場合には使用が正当化されます。
ツールチップ、ポップアップリスト、カスタムメニュー、コンボボックスなどのコントロール用の一時的なポップアップウィンドウ
これらのウィンドウはフォーカスを失ったときに閉じる必要があるので、別のウィンドウの表示の邪魔になるのを避けることができます。
特に緊急を要するエラーメッセージと警告
ユーザが直ちに応答しないと元に戻すことのできない変更が発生する可能性がある場合は、警告ウィンドウを最前面に移動してもかまいません。ただし、ほとんどのエラーと警告は、通常のウィンドウ表示順序で処理できます。
短時間だけ表示されるトーストスタイルのウィンドウ
ただし、ユーザのワークフローを妨害するようなアプリケーションは、ごみ箱行きになることでしょう
NativeWindow クラスには、ウィンドウ間の相対的な表示順序を設定する次のプロパティとメソッドが用意されています。ウィンドウを最上位ウィンドウグループに表示するかどうかを指定します。
値を false から true に変更すると、そのウィンドウは他のウィンドウの前面に移動します(ただし、アクティブにはなりません)
値を true から false に変更すると、そのウィンドウは最上位グループに残っているウィンドウの背後に移動しますが、他のウィンドウよりは前面になっています。プロパティをウィンドウの現在値と同じ値に設定すると、ウィンドウの表示順序は変わりません。ウィンドウを前面に移動します。ウィンドウを特定のウィンドウのすぐ前面に表示します。ウィンドウを他のウィンドウの背後に移動します。ウィンドウを特定のウィンドウのすぐ背後に表示します。
ウィンドウを前面に移動します(同時に、ウィンドウを表示状態にしてフォーカスを割り当てます)
注意: ウィンドウが非表示状態(visible が false)または最小化状態の場合は、表示順序メソッドを呼び出しても順序は変更されません。ウィンドウを閉じる。ウィンドウを閉じると、ウィンドウのコンテンツの読み込みは解除されますが、他のオブジェクトがそのコンテンツを参照している場合は、コンテンツオブジェクトは破棄されません。close() メソッドは非同期に実行するので、ウィンドウに含まれるアプリケーションは、閉じる処理が行われている間も実行を続けます。閉じられたウィンドウを再び開くことはできません。ウィンドウが閉じられているかどうかを確認するには、ウィンドウの closed プロパティを調べます。autoExit プロパティが true の場合は(デフォルト)、最後のウィンドウが閉じるとアプリケーションは終了します。
ウィンドウ操作のキャンセルの許可
ウィンドウがシステムクロムを使用している場合は、適切なイベントをリッスンし、イベントのデフォルト動作をキャンセルすることで、ユーザによるウィンドウの操作をキャンセルできます。例えば、ユーザがシステムクロムの閉じるボタンをクリックすると、closing イベントが送出されます。ウィンドウがシステムクロムを使用していない場合は、目的の変更が行われる前に変更の通知イベントが自動的に送出されることはありません。したがって、ウィンドウを閉じたり、ウィンドウの状態を変更したり、ウィンドウ境界プロパティを設定したりするメソッドを呼び出した場合、変更はキャンセルできません。ウィンドウの変更が行われる前にアプリケーションのコンポーネントに通知するには、アプリケーションのロジックで、ウィンドウの dispatchEvent() メソッドを使用して、関連する通知イベントを送出します。
ウィンドウの最大化、最小化、復元
アプリケーションで定義されている「標準」サイズとユーザが最後に設定したサイズの間で切り替えが行われるのではなく、AIR ウィンドウは、アプリケーションまたはユーザが最後に設定したサイズと、画面で使用可能な領域全体との間で切り替わります。
ウィンドウのサイズ変更と移動
ウィンドウがシステムクロムを使用している場合は、クロムがウィンドウのサイズ変更とデスクトップ上での移動に対するドラッグを制御します。システムクロムを使用しない場合は、独自のコントロールを追加して、ユーザがウィンドウのサイズ変更および移動を行うことができるようにする必要があります。注意: ウィンドウのサイズ変更または移動を行うには、最初に、NativeWindow インスタンスに対する参照を取得する必要があります。ウィンドウの参照を取得する方法について詳しくは、NativeWindow インスタンスの取得を参照してください。
ウィンドウのサイズ変更
mouseDown イベントからこのメソッドを呼び出すと、マウスの動作に応じてサイズ変更操作が行われ、オペレーティングシステムが mouseUp イベントを受信すると完了します。startResize() を呼び出すときは、ウィンドウのサイズ変更の基準になる辺または角を指定する引数を渡します。
ウィンドウの移動
例:ウィンドウのサイズ変更と移動
次の例では、ウィンドウでのサイズ変更および移動操作を開始する方法を示します。
ネイティブウィンドウの操作
ウィンドウの作成
ウィンドウの初期化プロパティの指定
初期アプリケーションウィンドウの作成
ウィンドウへのコンテンツの追加
例:ネイティブウィンドウの作成
アプリケーションの最初のウィンドウは AIR によって自動的に作成されますが、必要に応じて任意の追加ウィンドウを作成できます。ネイティブウィンドウを作成するには、NativeWindow コンストラクタメソッドを使用します。
ウィンドウの初期化プロパティの指定
デスクトップウィンドウの作成後に、ウィンドウの初期化プロパティを変更することはできません。このような不変のプロパティとそのデフォルト値は次のとおりです。AIR によって作成される初期ウィンドウのプロパティは、アプリケーション記述ファイルで設定します。open() 関数で作成するウィンドウの初期化プロパティは設定できません。ただし、独自の HTMLHost クラスを実装することで、これらのウィンドウの作成方法をオーバーライドすることはできます。
初期アプリケーションウィンドウの作成
アプリケーションの初期ウィンドウには、標準の HTML ページを使用します。このページは、アプリケーションのインストールディレクトリから読み込まれて、アプリケーションサンドボックスに配置されます。ページは、アプリケーションの初期エントリポイントとして機能します。アプリケーションを起動すると、AIR はウィンドウを作成し、HTML 環境を設定して、HTML ページを読み込みます。これらのプロパティを使用して、JavaScript からランタイムクラスにアクセスできます。nativeWindow プロパティを使用して、デスクトップウィンドウのプロパティやメソッドに直接アクセスできます。次の例では、HTML で作成された AIR アプリケーションのメインページの基本的な構造を示します。ウィンドウが作成されたなら、ステージプロパティと Flash 表示リストの技法を使用して、ウィンドウのプロパティを初期化し、コンテンツをウィンドウに読み込むことができます。Flash スケールモードは、アプリケーション作成者がアプリケーション表示領域の縦横比を事前に知ることができない状況のために用意されています。スケールモードを使用することで、作成者は、コンテンツのクリッピング、拡大や縮小、または空き領域でのパディングから、最も影響の小さいものを選択できます。表示領域は AIR(ウィンドウフレーム)で制御するので、悪影響を与えることなく、ウィンドウのサイズをコンテンツに、またはコンテンツのサイズをウィンドウに合わせることができます。注意: 現在のオペレーティングシステムで許される最大および最小のウィンドウサイズを判別するには、次の静的 NativeWindow プロパティを使用します。コンテンツがアプリケーションサンドボックスの外部で実行している場合は、マウスクリックやキー押下などのユーザ操作に対して呼び出すことができるのは、open() メソッドだけです。open() を呼び出すと、指定した URL にあるコンテンツを表示するために、システムクロムを使用するウィンドウが作成されます。次に例を示します。open() 関数で作成されるウィンドウをカスタマイズできます。
アプリケーションセキュリティサンドボックス内のコンテンツは、ウィンドウ作成用のさらに強力なメソッドである HTMLLoader
このメソッドを使用すると、新規ウィンドウ用のすべての作成オプションを指定できます。
ウィンドウへのコンテンツの追加
AIR ウィンドウにコンテンツを追加する方法は、ウィンドウのタイプによって異なります。HTML では、ウィンドウの基本的なコンテンツをテキストファイルで宣言的に定義できます。別のアプリケーションファイルから様々なリソースを読み込むことができます。アプリケーションセキュリティサンドボックス内のコンテンツ、つまりアプリケーションでインストールされて、app: URL スキームで読み込み可能なコンテンツは、すべての AIR API にアクセスできる完全な権限を持っています。このサンドボックスの外部から読み込まれるコンテンツは、AIR API にアクセスできません。安全なクロススクリプトを可能にするには、サンドボックスブリッジを使用して、アプリケーションコンテンツと非アプリケーションコンテンツの間に制限されたインターフェイスを提供できます。HTML コンテンツでは、アプリケーションのページを非アプリケーションサンドボックスにマップし、そのページのコードが外部コンテンツをクロススクリプトできるようにすることもできます。AIR のセキュリティを参照してください。
SWF またはイメージの読み込み
Loader クラスを使用して、Flash またはイメージをネイティブウィンドウの表示リストに読み込むことができます。次の例では、ネイティブウィンドウのステージ上の 300 × 500 ピクセルの表示領域に、HTML コンテンツを表示します。
HTML ウィンドウ上のオーバーレイとしての SWF コンテンツの追加
addChild() メソッドは、ウィンドウ内の既存のすべてのコンテンツより上のレイヤーに、コンテンツを追加します。0 インデックスにオブジェクトを配置すると、HTML の表示を含む既存のコンテンツが 1 レイヤーだけ上に移動し、新しいコンテンツが最下位に挿入されます。また、ページのエレメントで背景色が設定されているものはすべて、透明になりません。例えば、ページの body エレメントに背景色を設定すると、ページのすべてのものが透明ではなくなります。次の例では、Flash 表示オブジェクトをオーバーレイおよびアンダーレイとして HTML ページに追加する方法を示します。この例では、単純な形のオブジェクトを 2 つ作成し、1 つは HTML コンテンツより下位に、もう 1 つは上位に追加します。0 のプログラミング』の「表示のプログラミング」の節を参照してください。これは、HTML ベースのアプリケーションのルートページには常に該当しますが、他のコンテンツについては該当しない場合があります。また、アプリケーションサンドボックス内であってもフレームに読み込まれたドキュメントはこれらのプロパティを受け取りませんが、親ドキュメントのプロパティにはアクセスできます。
例:ネイティブウィンドウの作成
次の例では、ネイティブウィンドウの作成方法を示します。次の表に、サポートが確定している拡張プロパティの一覧を示します。WebKit では追加の非標準プロパティを使用できますが、AIR では完全にはサポートされていません。これは、それらのプロパティがまだ WebKit で開発中であるか、今後削除される可能性のある試用機能であるためです。
負でない長さの単位
ボーダーの間隔の水平部分を指定します。
負でない長さの単位
ボーダーの間隔の垂直部分を指定します。中国語、日本語、韓国語(CJK)のテキストに使用する改行規則を指定します。テーブルセルの下マージンの相殺方法を定義します。テーブルセルの上下のマージンの相殺方法を定義します。
任意の長さの単位
開始マージンの幅です。テキストの方向が左から右の場合、このプロパティは左マージンをオーバーライドします。テキストの方向が右から左の場合、このプロパティは右マージンをオーバーライドします。テーブルセルの上マージンの相殺方法を定義します。含まれているコンテンツ内における改行をしないスペースの動作を定義します。
任意の長さの単位
開始パディングの幅を指定します。テキストの方向が左から右の場合、このプロパティは左パディングの値をオーバーライドします。テキストの方向が右から左の場合、このプロパティは右パディングの値をオーバーライドします。左から右と右から左の方向が混在しているテキストのデフォルトの処理をオーバーライドします。
任意の定義済みカラー名または数値によるカラー値
塗りつぶしの色を指定します。パスワード入力フィールドで使用する代替図形を指定します。自動のドラッグ動作をオーバーライドします。エレメントのコンテンツを編集できるかどうかを指定します。text — エレメント内のテキストのみ選択できます。エレメントのコンテンツをユーザが選択できるかどうかを指定します。これをアプリケーションに含めると、HTML ベースのアプリケーションのデバッグに役立ちます。イントロスペクタツールでは、アプリケーション内のユーザインターフェイスエレメントを参照して、そのマークアップと DOM プロパティを確認できます。オブジェクト参照をイントロスペクション用に送信するコンソールが用意されており、プロパティ値を調整して JavaScript コードを実行できます。また、オブジェクトをコンソールに対して直列化すると、データの編集を制限できます。コンソールからテキストをコピーしたり保存したりすることもできます。DOM プロパティと関数をツリー表示できます。DOM エレメントの属性とテキストノードを編集できます。ユーザインターフェイスの初期 HTML ソースと現在のマークアップソースを表示できます。アプリケーションディレクトリ内のファイルにアクセスできます(この機能は、アプリケーションサンドボックス用に開かれた AIR HTML Introspector コンソールでのみ使用できます。
非アプリケーションサンドボックスのコンテンツ用に開かれたコンソールでは使用できません)
ソースコードとファイルから一致するテキストを検索できます。js をアプリケーションのプロジェクトディレクトリにコピーし、アプリケーションのメイン HTML ファイルでスクリプトタグを使用してファイルを読み込みます。また、アプリケーションの各ネイティブウィンドウに対応するすべての HTML ファイルにもこのファイルを含めます。js ファイルは、アプリケーションの開発時とデバッグ時にのみ含めてください。AIR アプリケーションをパッケージ化して配布する際は削除してください。注意: AIR Introspector を使用するコードは、アプリケーションセキュリティサンドボックス内(アプリケーションディレクトリ内のファイル)に含まれている必要があります。これらのうち最も基本的なメソッドは log() です。しかし、複雑なオブジェクトを「Console」タブに送信したほうが便利です。オブジェクトのツリー表示を展開すると、そのプロパティを検査できます。
フルサイズのグラフィックを表示
オブジェクトのプロパティを編集するには、一覧のプロパティ名の右側をクリックして、テキストを変更します。ただし、これらのメソッドを呼び出した場合、「Console」の行の最初に次のようなアイコンが表示されます。したがって、表示されるプロパティは、表示時点でのプロパティだけです。実際のオブジェクトを直列化するには、dump() メソッドを使用します。このメソッドには、次の 2 つのパラメータがあります。直列化されるオブジェクトです。オブジェクトツリーで検査されるレベルの最大数(ルートレベルを除く)です。
デフォルト値は 1 です(ツリーのルートレベルに 1 レベル加えて表示されます)
このパラメータはオプションです。したがって、オブジェクトのプロパティを編集することはできません。例えば、次のようなコードがあるとします。このコードを実行すると、testObject オブジェクトとそのプロパティが「Console」タブに表示されますが、このタブでプロパティ値を編集することはできません。アプリケーションの他のすべてのウィンドウを閉じたときに Inspector ウィンドウも閉じるように設定します。Inspect パネルを開くキーボードショートカットのキーコードです。各行の先頭にタイムスタンプを表示するように「Console」タブを設定します。メッセージの送信元オブジェクトに関する情報を、各行の先頭に表示するように「Console」タブを設定します。ソースファイルを折り返す列数です。ホットキーを設定して、F12 以外のキーに変更することもできます。
フルサイズのグラフィックを表示
Console クラスのいずれかのメソッドにパラメータとして渡されるプロパティの値が表示されます。詳しくは、「Console」タブによるオブジェクトの検査を参照してください。
フルサイズのグラフィックを表示
選択したテキストのみをクリップボードにコピーするには、テキストを右クリックして「コピー」を選択します。エレメントをクリックすると、そのプロパティがタブの右側に表示されます。ツリーのノードを展開するには「+」アイコンを、折りたたむには「-」アイコンをクリックします。
フルサイズのグラフィックを表示
「HTML」タブでは任意の属性やテキストエレメントを編集でき、編集した値がアプリケーションに反映されます。メインウィンドウの HTML ページにある任意のエレメントをクリックすると、関連付けられている DOM オブジェクトが「HTML」タブに表示されます。メインウィンドウにフォーカスがあるときは、キーボードショートカットを押して「Inspect」ボタンのオンとオフを切り替えることもできます。デフォルトでは、このキーボードショートカットは F11 です。キーボードショートカットを設定して、F11 以外のキーに変更することもできます。ストリングおよび数値の任意のプロパティを編集でき、編集した値がアプリケーションに反映されます。
フルサイズのグラフィックを表示
これらのノードのいずれかを展開すると、ファイルの内容または実際に使用されているイメージが表示されます。
フルサイズのグラフィックを表示
アプリケーション実行中に Ajax 技術を使用してマークアップコードが生成されるので、実際のソースとは異なる場合があります。この一覧は、アプリケーションセキュリティサンドボックス内のコンテンツから AIR Introspector が起動された場合にのみ表示されます。このセクションには、テキストファイルの内容やイメージを表示できます。
フルサイズのグラフィックを表示
アプリケーションディレクトリのコンテンツを、非アプリケーションサンドボックスにマップされるインラインフレームまたはフレームに読み込むことができます(HTML セキュリティを参照)
アプリケーションサンドボックスと非アプリケーションサンドボックス(インラインフレーム)の両方のコンテンツに、AIRIntrospector
js ファイルを含める必要があります。プロパティは必要に応じて追加してください。例えば、次のように記述しないでください。次のようなシンタックスを使用してください。
デフォルトでは、このボタンがインラインフレームまたはフレームの右上に追加されます(非アプリケーションサンドボックスのコンテンツに課せられるセキュリティ制限により、ボタンのクリックなど、ユーザ操作の結果としてのみ新しいウィンドウを開くことができます)
アプリケーションサンドボックスと非アプリケーションサンドボックスのそれぞれに対して、別個の AIR Introspector ウィンドウを開くことができます。AIR を使用すると、使い慣れた環境で作業でき、自分にとって最も作業しやすいツールや方法を利用できます。例えば、次のようなテクノロジを使用してアプリケーションを開発できます。これらのテクノロジを組み合わせて開発することもできます。
PDF(どのアプリケーションでも利用可能)
結果として、次のような AIR アプリケーションを開発できます。AIR アプリケーションはネイティブのデスクトップアプリケーションと同じように操作できます。ランタイムをユーザのコンピュータに一度インストールしておくと、AIR アプリケーションが他のデスクトップアプリケーションと同じようにインストールされ、実行されます。ランタイムにより、アプリケーションを展開するための一貫性のあるクロスオペレーティングシステム対応のプラットフォームおよびフレームワークが提供されます。これにより、デスクトップ間の機能および操作の一貫性が確保され、クロスブラウザテストが不要になります。開発のターゲットを特定のオペレーティングシステムではなくランタイムにすることで、次のようなメリットがあります。AIR 用に開発されたアプリケーションは、追加の作業なしで、複数のオペレーティングシステム間で実行されます。ランタイムにより、AIR でサポートされているすべてのオペレーティングシステム間で、一貫性のある想定したとおりのプレゼンテーションと操作が実現します。既存の Web テクノロジやデザインパターンを利用して Web ベースのアプリケーションをデスクトップに拡張できるため、従来のデスクトップ開発テクノロジや複雑なネイティブコードを習得する必要もなく、アプリケーションの構築にかかる時間を短縮することができます。アプリケーションの開発は、C や C++ などの下位の言語を使用するよりも簡単です。各オペレーティングシステム固有の複雑な下位 API を管理する必要もありません。AIR 用のアプリケーションの開発では、豊富なフレームワークと API のセットを利用できます。AIR はアプリケーションの作成、展開、使用の方法に変革をもたらします。柔軟なコントロールが可能になり、従来のデスクトップ開発テクノロジを習得することなく、Flash、Flex、HTML および Ajax ベースのアプリケーションをデスクトップで利用できます。
コマンドラインツールを使用した AIR アプリケーションの作成
ADL によるアプリケーションの起動
トレースステートメントの出力
ADL の終了コードとエラーコード
ADL を使用すると、アプリケーションをパッケージ化してインストールしなくても実行できます。デフォルトでは、ADL では SDK に付属するランタイムが使用されるので、ADL を使用するためにランタイムを個別にインストールする必要はありません。ADL では、トレースステートメントとランタイムエラーが標準出力に出力されますが、ブレークポイントやその他のデバッグ機能はサポートされていません。
ADL によるアプリケーションの起動
次のシンタックスを使用します。指定しない場合、ADL プログラムと同じ SDK のランタイムディレクトリが使用されます。SDK フォルダ外へ ADL を移動している場合は、ランタイムディレクトリを指定する必要があります。一時的な発行者 ID を指定すると、ローカル接続による通信など、アプリケーションを一意に識別できるようにするために発行者 ID を使用する AIR アプリケーションの機能をテストできます。最終的な発行者 ID は、AIR インストールファイルへの署名に使用される電子証明書によって決まります。このオプションを使用すると、アプリケーションプロセスが Flash デバッガに接続できなくなり、処理されていない例外のダイアログが非表示になります。トレースステートメントは、引き続きコンソールウィンドウに出力されます。デバッグをオフにすると、アプリケーションの実行がやや速くなり、インストールされているアプリケーションの実行モードに動作が近くなります。xml アプリケーション記述ファイルです。AIR アプリケーションプロパティの設定を参照してください。指定しない場合、アプリケーション記述ファイルが含まれているディレクトリが使用されます。-- arguments 「--」の後に続くすべての文字ストリングが、コマンドライン引数としてアプリケーションに渡されます。注意: 既に実行されている AIR アプリケーションを起動した場合、そのアプリケーションの新しいインスタンスは開始されません。代わりに、invoke イベントが実行中のインスタンスに送出されます。
トレースステートメントの出力
ADL の実行に使用するコンソールにトレースステートメントを出力するには、air
trace() 関数を使用して、トレースステートメントをコードに追加します。また、キャッチされない JavaScript 例外に加えて、シンタックスエラーの行番号もコンソールに出力されます。現在のディレクトリのアプリケーションを実行します。現在のディレクトリのサブディレクトリのアプリケーションを実行します。特定のランタイムを使用してアプリケーションを実行します。
ADL の終了コードとエラーコード
次の表で、ADL によって出力される終了コードについて説明します。
既に実行されている AIR アプリケーションの正常な呼び出し
ADL に渡された引数が正しくありません。ランタイムが見つかりません。ランタイムを起動できません。多くの場合、アプリケーションで指定されたバージョンまたはパッチレベルが、ランタイムのバージョンまたはパッチレベルと一致しないために起こります。原因不明のエラーが発生しました。アプリケーション記述ファイルが見つかりません。アプリケーション記述子の内容が無効です。このエラーは、通常、XML の形式が正しくないことを示しています。アプリケーションのメインコンテンツファイル(アプリケーション記述ファイルの <content> エレメントで指定)が見つかりません。アプリケーションのメインコンテンツファイルが、有効な SWF または HTML ファイルではありません。
アプリケーションの起動および終了オプション
アプリケーションの呼び出し
コマンドライン引数のキャプチャ
例:呼び出しイベントログ
ログイン時の起動
ブラウザによる呼び出し
アプリケーションの終了
この節では、インストールした Adobe® AIRTM アプリケーションの起動、および実行中のアプリケーションの終了に使用するオプションと考慮事項について説明します。
アプリケーションの呼び出し
AIR アプリケーションは、ユーザ(またはオペレーティングシステム)が次の動作を行った場合に呼び出されます。アプリケーションをデスクトップシェルから起動する。アプリケーションをコマンドラインシェルのコマンドとして使用する。アプリケーションがデフォルトで関連付けられている種類のファイルを開く。
(Mac OS X)ドックタスクバーでアプリケーションアイコンをクリックする(アプリケーションが現在実行中であるかどうかは問いません)
インストーラでアプリケーションの起動を選択する(新規インストール作業の最後、またはインストール済みアプリケーションの AIR ファイルをダブルクリックした後)
AIR アプリケーション向けの識別情報を指定した com
ブラウザからインストールされた AIR アプリケーションの起動を参照してください。アプリケーション時間が自分自身を初期化し、イベントリスナーを登録できるようにするには、invoke イベントを破棄せず、キューに入れる必要があります。リスナーが登録されると、キューに入れられているすべてのイベントが直ちに送出されます。注意: ブラウザ呼び出し機能を使用してアプリケーションが呼び出されると、NativeApplication オブジェクトは、そのアプリケーションが既に実行中でなければ、invoke イベントのみを送出します。ブラウザからインストールされた AIR アプリケーションの起動を参照してください。イベントリスナーは、invoke イベントについて登録されると、登録前に発生したすべての invoke イベントも受け取ります。このプロセス中に新しい invoke イベントが発生した場合、このイベントを、キューに入れられた 1 つ以上のイベントが送出される前に送出することができます。このイベントキューイングにより、初期化コードが実行される前に発生した任意の invoke イベントを処理できます。イベントリスナーは、実行の比較的遅い時点(アプリケーション初期化の後)で追加された場合でも、アプリケーション起動後に発生したすべての invoke イベントを受け取ります。1 つの AIR アプリケーションについて、起動されるインスタンスは 1 つだけです。既に実行されているアプリケーションが再び呼び出されると、AIR は実行中のインスタンスに対して新しい invoke イベントを送出します。invoke イベントに応答し、適切なアクションを実行する(例えば新しいドキュメントウィンドウを開く)ことは、AIR アプリケーションの役割です。InvokeEvent オブジェクトには、アプリケーションと、そのアプリケーションが呼び出されたディレクトリに渡された任意の引数が格納されます。アプリケーションがファイルの種類による関連付けによって呼び出された場合には、コマンドライン引数にそのファイルへのフルパスが含まれます。同様に、アプリケーションがアプリケーションアップデートのために呼び出された場合には、アップデート AIR ファイルへのフルパスが設定されます。さらに、イベントリスナーを次のように定義します。
コマンドライン引数のキャプチャ
arguments プロパティには、AIR アプリケーションの呼び出し時にオペレーティングシステムによって渡される引数の配列が格納されています。AIR プログラムに渡される引数は、次の表に示すように、二重引用符で囲まれている場合を除いて、空白で区切られたストリングとして扱われます。
アプリケーションが、そのアプリケーションによって登録された種類のファイルが開かれたことによって呼び出された場合には、そのファイルへのネイティブパスがコマンドライン引数にストリングとして設定されます(ファイルを開いたり、ファイルに対して目的の操作を実行することは、アプリケーションの役割です)
同様に、アプリケーションがアップデートを自動で(標準の AIR アップデートユーザインターフェイスを使用せずに)実行するようにプログラムされている場合には、一致するアプリケーション ID を持つアプリケーションを格納した AIR ファイルをユーザがダブルクリックしたときに、AIR ファイルへのネイティブパスが設定されます。引数が本当にファイルへのパスであるかどうかについても検証する必要があります。
例:呼び出しイベントログ
次の例では、invoke イベントに対するリスナーを登録し、このイベントを処理する方法を示します。この例では、受け取ったすべての呼び出しイベントを記録し、現在のディレクトリとコマンドライン引数を表示します。js ファイルを使用しています。このファイルは、SDK のフレームワークフォルダにあります。
ログイン時の起動
このように設定すると、アプリケーションはユーザがログインすると自動的に起動します。起動時にアプリケーションが自動起動しないようにするには、設定を false に変更するか、ユーザが設定をオペレーティングシステムから手動で変更するか、またはアプリケーションをアンインストールします。ログイン時の起動は、実行時設定です。注意: アプリケーションは、コンピュータシステムの起動時には起動しません。アプリケーションは、ユーザのログイン時に起動します。この設定は、現在のユーザにのみ適用されます。アプリケーションがインストールされていない(例えば ADL で起動される)場合、プロパティを設定するとエラーがスローされます。
ブラウザによる呼び出し
ブラウザ呼び出し機能を使用すると、Web サイトでは、インストールされている AIR アプリケーションをブラウザから起動されるように起動できます。アプリケーション記述ファイルについて詳しくは、AIR アプリケーションプロパティの設定を参照してください。これにより、初期化コードが実行される前(例えばアプリケーションがブラウザから最初に呼び出されたとき)に発生した BrowserInvokeEvent イベントを処理できます。イベントリスナーは、実行の比較的遅い時点(アプリケーション初期化の後)で追加された場合でも、アプリケーション起動後に発生したすべての BrowserInvokeEvent イベントを受け取ります。
アプリケーションに渡す引数(ストリング)の配列
ブラウザによる呼び出しがユーザイベント(例えばマウスクリック)で発生したかどうかを示します。AIR では、ブラウザ呼び出し機能に対するユーザイベントが必要です。
ブラウザ内のコンテンツに対して使用するサンドボックスのタイプ
ブラウザ内のコンテンツのセキュリティドメイン
このプロパティは、リモートのセキュリティサンドボックスで実行されるコンテンツ(ネットワークドメインからのコンテンツ)に対してのみ設定されます。ローカルまたはアプリケーションセキュリティサンドボックスで実行されるコンテンツに対しては設定されません。ブラウザ呼び出し機能を使用する場合は、セキュリティ上の影響を考慮してください。このデータを、ファイルやコードを読み込む API のような注意を必要とする操作で使用する場合には、慎重に行う必要があります。リスクのレベルは、アプリケーションがそのデータを使用して実行する処理の種類によって異なります。また、そのアプリケーションを呼び出す Web サイトに対して、HTTPs を使用するように要求することもできます。アプリケーションは、渡されたデータを検証する必要があります。例えば、あるアプリケーションが特定のドメインの URL を渡されることを予期している場合、そのアプリケーションは、その URL が本当にそのドメインを指し示しているかどうかを検証する必要があります。これにより、攻撃者がアプリケーションを不正に操作して重要なデータを送信させることを防ぐことができます。例えば、アプリケーションでは、ブラウザから渡されたパスに基づいて File オブジェクトを作成することは避けてください。ブラウザからリモートのパスが渡されることを想定している場合、アプリケーションでは、リモートプロトコルの代わりに file:// プロトコルがパスに使用されていないことを確認する必要があります。ブラウザからのアプリケーションの呼び出しについて詳しくは、ブラウザからインストールされた AIR アプリケーションの起動を参照してください。
アプリケーションの終了
これは、アプリケーションに保存するデータやクリーンアップするリソースがない場合に適した方法です。exit() を呼び出すと、すべてのウィンドウが閉じ、アプリケーションが終了します。しかし、例えば重要なデータを保存するために、アプリケーションのウィンドウやその他のコンポーネントが終了プロセスを中断できるようにする場合は、exit() を呼び出す前に、適切な警告イベントを送出します。アプリケーションを適切な手順に従ってシャットダウンするためのもう一つの方法は、シャットダウンプロセスを開始する方法とは関係なく、単一の実行経路を設定することです。ユーザ(またはオペレーティングシステム)は、次に示す方法でアプリケーションの終了をトリガすることができます。
オペレーティングシステムから、アプリケーション終了コマンドを選択する(例えば、ユーザがデフォルトのメニューからアプリケーションを終了するコマンドを選択した場合)
Windows では、システムクロムによるアプリケーション終了コマンドは提供されていません。コンピュータをシャットダウンする。リスナーが exiting イベントをキャンセルしなければ、開いているすべてのウィンドウが閉じられます。いずれかのウィンドウで closing イベントがキャンセルされると、シャットダウンプロセスは停止します。例えば、ツールパレットの付いたドキュメントウィンドウを閉じる場合がこれに該当します。システムがパレットを閉じたが、ユーザはデータを保存するために終了コマンドをキャンセルすることにした、というような場合には、これは非常に不便です。すべてのプラットフォームで一貫性のある動作を実現するためには、終了シーケンスがオペレーティングシステムクロム、メニューコマンド、アプリケーションロジックのいずれから開始される場合でも、アプリケーションを終了するための、次に示す正しい方法を遵守してください。すべてのウィンドウが閉じたら、アプリケーションデータの保存や一時ファイルの削除などの必要なクリーンアップタスクを実行します。クリーンアップでは同期メソッドのみを使用することで、アプリケーションの終了前にそれらのメソッドが必ず終了するようにします。順序が重要である場合には、ウィンドウを正しい順序で閉じる手段を提供します。各ウィンドウは、それ自身の closing イベントをリッスンすることで、常にそれ自身のクリーンアップを処理する必要があります。
これは、以前に呼び出されたハンドラは、後続のハンドラが exiting イベントをキャンセルするかどうかを知ることができないためです(また、実行の順序に依拠することも賢明ではありません)
AIR アプリケーションプロパティの設定
カスタムのアプリケーションアップデートユーザインターフェイスの表示
索引 | フレーム フレームなし
ByteArray クラスには、バイナリデータの読み取り、書き込み、および操作を最適化するメソッドおよびプロパティがあります。メモ : ByteArray クラスは、バイトレベルでデータにアクセスする必要がある上級の開発者を対象としています。メモリ内データはバイトの詰め込み配列 (最もコンパクトなデータ型の表現) ですが、ByteArray クラスのインスタンスは標準 [] (配列アクセス) 演算子を使用して操作できます。また、URLStream および Socket クラスと同じメソッドを使用し、メモリ内ファイルとして読み取りおよび書き込みを行うことができます。
カスタム プロトコルを作成してサーバーに接続
データ型を使用したデータのサイズの最適化
継承されるパブリックプロパティを隠す。
継承プロパティの表示
[読み取り専用] バイト配列の現在の位置から最後までの読み取り可能なデータのバイト数です。指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。0 の形式を使用する必要があるかどうかの特定に使用されます。ByteArray オブジェクト内でのファイルポインタの現在の位置をバイト単位で移動するか、または現在の位置をバイト単位で返します。[静的] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。継承されるパブリックメソッドを隠す。
継承メソッドの表示
これにより、このクラスのメソッドおよびプロパティを使用して、データストレージおよびデータストリームを最適化できます。バイト配列を圧縮します。オブジェクトに指定されたプロパティが定義されているかどうかを示します。Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。指定されたプロパティが存在し、列挙できるかどうかを示します。バイトストリームからブール値を読み取ります。バイトストリームから符号付きバイトを読み取ります。バイトストリームから、length パラメータで指定したデータバイト数を読み取ります。バイトストリームから符号付き 32 ビット整数を読み取ります。指定した文字セットを使用して、バイトストリームから指定した長さのマルチバイトストリングを読み取ります。バイト配列から AMF 直列化形式でエンコードされたオブジェクトを読み取ります。バイトストリームから符号付き 16 ビット整数を読み取ります。バイトストリームから符号なしバイトを読み取ります。バイトストリームから符号なし 32 ビット整数を読み取ります。バイトストリームから符号なし 16 ビット整数を読み取ります。バイトストリームから UTF-8 ストリングを読み取ります。バイトストリームまたはバイト配列から、length パラメータで指定した UTF-8 バイトのシーケンスを読み取り、ストリングを返します。ループ処理に対するダイナミックプロパティの可用性を設定します。バイト配列をストリングに変換します。バイト配列を解凍します。指定されたオブジェクトのプリミティブな値を返します。ブール値を書き込みます。バイトストリームにバイトを書き込みます。バイトストリームに 32 ビット符号付き整数を書き込みます。指定した文字セットを使用して、バイトストリームにマルチバイトストリングを書き込みます。バイト配列に AMF 直列化形式でオブジェクトを書き込みます。バイトストリームに 16 ビット整数を書き込みます。バイトストリームに 32 ビット符号なし整数を書き込みます。バイトストリームに UTF-8 ストリングを書き込みます。
プロパティの詳細
バイト配列の現在の位置から最後までの読み取り可能なデータのバイト数です。ByteArray オブジェクトにアクセスするたびに bytesAvailable プロパティと読み取りメソッドを組み合わせて使用すれば、有効なデータを確実に読み取ることができます。0 の形式を使用する必要があるかどうかが特定されます。この長さに現在の長さよりも大きい値を設定すると、バイト配列の右側は 0 で埋められます。この長さに現在の長さよりも小さい値を設定すると、バイト配列は切り詰められます。0 の形式を使用する必要があるかどうかの特定に使用されます。ByteArray オブジェクト内でのファイルポインタの現在の位置をバイト単位で移動するか、または現在の位置をバイト単位で返します。これは、次に読み取りメソッドまたは書き込みメソッドを呼び出したときに読み取りまたは書き込みが開始されるポイントです。
コンストラクタの詳細
これにより、このクラスのメソッドおよびプロパティを使用して、データストレージおよびデータストリームを最適化できます。
メソッドの詳細
バイト配列を圧縮します。バイト配列全体が圧縮されます。position プロパティがバイト配列の末尾に設定されます。txt の説明を参照してください。
これらの圧縮形式のいずれかを使用してデータを圧縮した場合、その圧縮形式データ (zip ファイルなど) には、元のデータの圧縮されたバージョンに加えてメタデータ情報も保存されます。各種ファイル形式に含まれるメタデータの種類の例としては、ファイル名、ファイル修正日時、元のファイルサイズ、オプションのコメント、チェックサムデータなどがあります。特定のバイト位置に圧縮データに関するメタデータが格納され、それ以外のバイト位置に元の ByteArray データの実際に圧縮されたバージョンが格納されます。zlib 圧縮データ形式の仕様で規定されているように、このバイト部分 (つまり、元のデータの圧縮されたバージョンを含む部分) は deflate アルゴリズムを使用して圧縮されます。ZLIB) の結果には追加のメタデータが含まれています。DEFLATE) を呼び出すだけでは目的を達することはできません。まず、圧縮データからメタデータを分離してから、deflate 形式を使用して圧縮データを解凍する必要があります。デフォルトでは zlib 形式が使用されます。このパラメータは、Adobe AIR で実行しているコンテンツに対してのみ有効です。Flash Player はデフォルトの zlib アルゴリズムのみをサポートしているため、このパラメータの値を渡そうとすると例外をスローします。バイトストリームからブール値を読み取ります。バイトストリームから符号付きバイトを読み取ります。バイトストリームから、length パラメータで指定したデータバイト数を読み取ります。デフォルト値の 0 に設定すると、すべてのデータが読み取られます。バイトストリームから符号付き 32 ビット整数を読み取ります。指定した文字セットを使用して、バイトストリームから指定した長さのマルチバイトストリングを読み取ります。完全な一覧については、「サポートする文字セット」を参照してください。メモ : charSet パラメータの値が現在のシステムによって認識されない場合、アプリケーションはシステムのデフォルトコードページを文字セットとして使用します。もう一方のマシンでは、アプリケーションがシステムのデフォルトコードページを使用することになります。バイト配列から AMF 直列化形式でエンコードされたオブジェクトを読み取ります。* — 非直列化されたオブジェクトです。バイトストリームから符号付き 16 ビット整数を読み取ります。バイトストリームから符号なしバイトを読み取ります。バイトストリームから符号なし 32 ビット整数を読み取ります。バイトストリームから符号なし 16 ビット整数を読み取ります。バイトストリームから UTF-8 ストリングを読み取ります。このストリングには、バイト単位の長さを示す符号なし short が前に付いているものと見なされます。バイトストリームまたはバイト配列から、length パラメータで指定した UTF-8 バイトのシーケンスを読み取り、ストリングを返します。バイト配列をストリングに変換します。配列のデータが Unicode バイト順マークで開始する場合、アプリケーションではストリングの変換時に、そのマークが使用されます。useCodePage を true に設定すると、アプリケーションでは、変換時の配列のデータは現在のシステムコードページにあると見なされます。バイト配列を解凍します。同じアルゴリズムを使用してバイト配列が圧縮されている必要があります。txt の説明を参照してください。まず、圧縮データ形式の構成要素であるメタデータを実際の圧縮データから分離する必要があります。データの圧縮に使用されたものと同じ圧縮アルゴリズムを指定する必要があります。デフォルトでは zlib 形式が使用されます。このパラメータは、Adobe AIR で実行しているコンテンツに対してのみ有効です。Flash Player はデフォルトの zlib アルゴリズムのみをサポートしているため、このパラメータの値を渡そうとすると例外をスローします。指定された圧縮アルゴリズムと同じアルゴリズムを使用して圧縮されていません。ブール値を書き込みます。バイトストリームにバイトを書き込みます。パラメータの下位 8 ビットが使用されます。上位 24 ビットは無視されます。バイトストリームに下位 8 ビットが書き込まれます。length パラメータを省略すると、デフォルトの長さの 0 が使用され、メソッドによって offset から開始されるバッファ全体が書き込まれます。offset パラメータも省略した場合は、バッファ全体が書き込まれます。バイトストリームに 32 ビット符号付き整数を書き込みます。指定した文字セットを使用して、バイトストリームにマルチバイトストリングを書き込みます。完全な一覧については、「サポートする文字セット」を参照してください。バイト配列に AMF 直列化形式でオブジェクトを書き込みます。バイトストリームに 16 ビット整数を書き込みます。パラメータの下位 16 ビットが使用されます。上位 16 ビットは無視されます。バイトストリームに 32 ビット符号なし整数を書き込みます。バイトストリームに UTF-8 ストリングを書き込みます。最初に UTF-8 ストリングの長さがバイト単位で 16 ビット整数として書き込まれ、その後にストリングの文字を表すバイトが続きます。バイトストリームに UTF-8 ストリングを書き込みます。
0 言語およびコンポーネントリファレンス
ローカルデータベースでの SQL サポート
ランタイムでは、データベースデータがファイルシステムに格納される方法や場所を指定しません。各データベースは、完全に単一ファイル内に格納されます。開発者は、データベースファイルが格納されるファイルシステム内の場所を指定でき、単一の AIR アプリケーションで、1 つまたは多数の異なるデータベース (別々のデータベースファイル) にアクセスできます。本ドキュメントは、包括的な SQL リファレンスとして使用されることを目的にはしていません。SQL の学習については多数のリファレンス、Web サイト、書籍、およびトレーニング資料があるので、本ドキュメントは、包括的な SQL リファレンスやチュートリアルとして使用されることを目的にはしていません。次のトピックがあります。
サポートされる SQL シンタックス
データ型のサポート
このドキュメントで使用する表記規則
サポートされる SQL シンタックス
これらの一覧は、さまざまなステートメントと句のタイプ、式、ビルトイン関数、および演算子の説明に分かれています。次のトピックがあります。
特殊なステートメントと句
ビルトイン関数 (集約、スカラー、および日付 / 時刻書式設定関数)
サポートされていない SQL 機能
さまざまなステートメントと式の特定のシンタックスに加えて、SQL シンタックスの一般的な規則を次に示します。大文字と小文字の区別 : オブジェクト名を含め、SQL ステートメントでは大文字と小文字が区別されません。ただし、SQL ステートメントは、大文字で記述された SQL キーワードを使用して記述されることが多いので、本ドキュメントではその表記規則を使用します。SQL シンタックスでは大文字と小文字が区別されませんが、SQL のリテラルテキスト値は大文字と小文字が区別され、比較およびソート操作では、列または操作に対して定義されている照合シーケンスの指定に従って大文字と小文字を区別できます。空白 : 空白文字 (スペース、タブ、改行など) は、SQL ステートメントの個々の単語を分離するために使用する必要があります。ただし、単語およびシンボル間の空白はオプションです。SQL ステートメントの空白文字のタイプと数に意味はありません。インデントや改行などの空白を使用して、ステートメントの意味に影響を与えずに、SQL ステートメントが読みやすくなるように書式設定できます。データ操作ステートメントは、最もよく使用される SQL ステートメントです。これらのステートメントは、データベーステーブルのデータを取得、追加、変更、および削除するために使用されます。次のデータ操作ステートメントがサポートされます。SELECT ステートメントは、データベースのクエリーに使用されます。SELECT の結果はゼロ個以上のデータ行で、各行に固定数の列があります。任意の式を結果として使用できます。結果の式が * の場合は、すべてのテーブルのすべての列でその 1 つの式が置換されます。式がテーブル名とそれに続く。* である場合、結果は 1 つのテーブル内のすべての列です。DISTINCT キーワードを使用すると、結果の行のサブセットが返され、各結果行は異なります。NULL 値はそれぞれ異なるものとして扱われません。デフォルトの動作では、すべての結果行が返されます。これはキーワード ALL で明示的に指定できます。クエリーは、FROM キーワードの後に指定された 1 つ以上のテーブルに対して実行されます。複数のテーブル名がカンマで区切られている場合、クエリーでは各種テーブルのクロス結合が使用されます。JOIN シンタックスを使用してテーブルの結合方法を指定することもできます。括弧内のサブクエリーは、FROM 句でテーブルとして使用できます。その場合、結果は result 式リストの値から構成される単一行です。クエリーで取得する行数を制限するには WHERE 句を使用します。WHERE 句の式は、ブール値に解決される必要があります。WHERE 句のフィルタ処理はグループ化の前に実行されるので、WHERE 句の式に集約関数を含めることはできません。GROUP BY 句は、結果に集約関数が含まれている場合に特に役立ちます。したがって、HAVING 式は、集約関数を含む値を参照できます。LIMIT 句は、結果で返される行数の上限を設定します。OFFSET キーワードの代わりにカンマが使用されている場合、オフセットは最初の数値で、制限は 2 番目の数値です。この一見矛盾する定義は意図的です。これにより、古い SQL データベースシステムとの互換性が最大化されます。複合 SELECT では、構成要素であるすべての SELECT ステートメントで同じ結果列数を指定する必要があります。3 つ以上の SELECT ステートメントが複合に接続されている場合は、最初から最後までグループ化されます。使用できる式の定義については、「式」を参照してください。INSERT ステートメントには 2 つの基本形式があり、テーブルにデータを設定するために使用されます。最初の形式 (VALUES キーワードあり) では、既存のテーブルに単一の新しい行が作成されます。column-list が指定されていない場合は、値の数がテーブルの列数と同じである必要があります。column-list が指定されている場合、値の数は指定された列の数と一致する必要があります。列リストにないテーブルの列には、テーブルの作成時に定義されたデフォルト値が設定され、デフォルト値が定義されていない場合は NULL が設定されます。SELECT の結果の各行に対して新しいエントリがテーブルに作成されます。SELECT は単純または複合にすることができます。形式) と同じです。UPDATE ステートメントは、テーブル内の行のセットの列値を変更するために使用します。UPDATE 内の各代入では、等号の左辺に列名を指定し、右辺に任意の式を指定します。式では、他の列の値を使用できます。代入が行われる前にすべての式が評価されます。使用できる式の定義については、「式」を参照してください。更新される行を制限するには WHERE 句を使用します。WHERE 句の式は、ブール値に解決される必要があります。DELETE コマンドは、テーブルからレコードを削除するために使用します。コマンドは、DELETE FROM キーワードに続いて、レコードを削除するテーブル名から構成されます。WHERE 句がない場合は、テーブルのすべての行が削除されます。WHERE 句が指定されている場合は、式に一致する行のみ削除されます。WHERE 句の式は、ブール値に解決される必要があります。使用できる式の定義については、「式」を参照してください。データ定義ステートメントは、テーブル、ビュー、インデックス、トリガなどのデータベースオブジェクトを作成、変更、および削除するために使用されます。次のデータ定義ステートメントがサポートされます。テーブル名は、識別子またはストリングのいずれかです。各列定義は、列の名前と、それに続くその列のデータ型、さらに 1 つ以上のオプションの列制約です。列のデータ型は、その列に格納できるデータを制限します。異なるデータ型の列に値を格納しようとすると、可能な場合にはランタイムによって値が適切な型に変換され、可能でない場合にはエラーが発生します。追加情報については、「データ型のサポート」を参照してください。UNIQUE 制約を指定すると、指定された 1 つまたは複数の列にインデックスが作成されます。このインデックスには、一意キーが含まれている必要があります。2 つの行に、重複する値や、指定された 1 つまたは複数の列の値の組み合わせを含めることはできません。CHECK 制約は評価される式を定義し、行のデータが挿入または更新されるためには true である必要があります。CHECK 式は、ブール値に解決される必要があります。列定義内の COLLATE 句は、列のテキストエントリを比較するときに使用するテキスト照合関数を指定します。BINARY 照合関数がデフォルトで使用されます。値は、NULL、ストリング定数、または数値にすることができます。値が NULL、ストリング定数、または数値の場合は、INSERT ステートメントで列の値が指定されていない場合に、これらがそのまま列に挿入されます。したがって、列は一意の整数値のみ保持できます。これは、ある列の定義の一部または単一のテーブルレベル PRIMARY KEY 制約にすることができます。多くの制約に続くオプションの conflict-clause では、その制約に対する代替のデフォルト制約競合解決アルゴリズムを指定できます。同じテーブル内の異なる制約が、異なるデフォルトの競合解決アルゴリズムを持つことができます。INSERT または UPDATE ステートメントで異なる競合解決アルゴリズムが指定されている場合は、そのアルゴリズムが、CREATE TABLE ステートメントで指定されたアルゴリズムの代わりに使用されます。FOREIGN KEY 制約などの追加の制約を指定してもエラーにはなりませんが、実行時に無視されます。データベース接続が終了すると、自動的に削除されます。一時テーブルに作成されたインデックスも一時的です。一時テーブルおよびインデックスは、メインデータベースファイルとは別のファイルに格納されます。列数またはテーブル内の制約数に任意の制限はありません。1 行のデータ量にも任意の制限はありません。テーブル列の名前は、結果内の列の名前です。ALTER TABLE コマンドを使用すると、ユーザーは新しい列を名前変更または既存のテーブルに追加できます。テーブルから列を削除することはできません。このコマンドを使用して、アタッチされているデータベース間でテーブルを移動することはできません。同じデータベース内でテーブル名を変更することのみ可能です。名前変更されるテーブルにトリガまたはインデックスがある場合、それらはテーブル名が変更された後もテーブルにアタッチされたままになります。ただし、名前変更されるテーブルを参照するトリガによって実行されたビュー定義またはステートメントがある場合は、新しいテーブル名を使用するように自動的に変更されることはありません。名前変更されたテーブルにビューまたはトリガが関連付けられている場合は、新しいテーブル名を使用してトリガまたはビュー定義を手動で削除し、再作成する必要があります。新しい列は常に既存の列のリストの最後に追加されます。ALTER TABLE ステートメントの実行時間は、テーブル内のデータ量の影響を受けません。データベースとディスクファイルから完全に削除されます。テーブルを復元することはできません。テーブルに関連付けられているインデックスもすべて削除されます。デフォルトでは、DROP TABLE ステートメントはデータベースファイルのサイズを削減しません。データベース内の空の領域は保持され、後続の INSERT 操作で使用されます。データベースが最初に作成されたときに autoClean パラメータが true に設定された場合は、領域が自動的に解放されます。オプションの IF EXISTS 句は、テーブルが存在しない場合に通常発生するエラーを抑制します。CREATE INDEX コマンドは、キーワード CREATE INDEX と、それに続く新規インデックスの名前、キーワード ON、以前に作成された、インデックス作成対象のテーブル名、および値がインデックス キーに使用されるテーブル内の列名を括弧で囲んだリストから構成されます。各列名の後に、ソート順を指定する ASC または DESC キーワードを続けることができますが、ソート順の指定は実行時に無視されます。ソートは常に昇順で行われます。各列名に続く COLLATE 句は、その列のテキスト値に使用される照合シーケンスを定義します。デフォルトの照合シーケンスは、CREATE TABLE ステートメントでその列に対して定義された照合シーケンスです。照合シーケンスを指定しない場合は、BINARY 照合シーケンスが使用されます。1 つのテーブルにアタッチできるインデックス数に任意の制限はありません。インデックス内の列数にも制限はありません。指定されたインデックスは、データベースファイルから完全に削除されます。デフォルトでは、DROP INDEX ステートメントはデータベースファイルのサイズを削減しません。データベース内の空の領域は保持され、後続の INSERT 操作で使用されます。データベースが最初に作成されたときに autoClean パラメータが true に設定された場合は、領域が自動的に解放されます。この新しい名前は、別の SELECT ステートメントの FROM 句でテーブル名の代わりに使用できます。通常、ビューは、複雑な (および最近使用された) データのセットを他の操作で使用できる構造に結合することで、クエリーを単純化するために使用されます。ビューは読み取り専用です。ビューは、DROP VIEW ステートメントを使用してデータベースから削除されます。データベースからは削除されますが、基礎となるテーブル内のデータは変更されません。その場合、トリガは、SQLConnection インスタンスのメインデータベース接続が終了すると削除されます。WHEN 句が指定されていない場合、SQL ステートメントはすべての行に対して実行されます。OLD および NEW テーブルの構造は、トリガが作成されるテーブルの構造と一致します。OLD テーブルには、トリガステートメントによって変更または削除された行が、トリガステートメントの操作の前の状態で含まれます。NEW テーブルには、トリガステートメントによって変更または作成された行が、トリガステートメントの操作の後の状態で含まれます。column-name 形式の参照を使用して挿入、削除、または更新される行の値にアクセスできます。ただし、トリガが起動する原因となったステートメントの一部として ON CONFLICT 句が指定されている場合は、その競合処理ポリシーが代わりに使用されます。トリガは INSTEAD OF トリガなので、ビューの基礎となるテーブルは、トリガが起動する原因となったステートメントによって変更されません。ただし、トリガは、基礎となるテーブルに対して変更操作を実行するために使用できます。テーブルまたはビューが削除された場合、そのテーブルまたはビューに関連付けられているすべてのトリガも自動的に削除されます。この関数のシンタックスは次のとおりです。RAISE(IGNORE) が呼び出されると、現在のトリガの残りの部分、トリガが実行される原因となったステートメント、および実行される後続のトリガが中止されます。データベース変更はロールバックされません。トリガが実行される原因となったステートメントがトリガの一部である場合、そのトリガプログラムは次のステップの先頭で実行を再開します。トリガはデータベースから削除されます。トリガは、関連付けられているテーブルが削除されると自動的に削除されます。
特殊なステートメントと句
このセクションでは、実行時に提供される SQL への拡張であるいくつかの句と、多くのステートメント、コメント、および式で使用できる 2 つの言語要素について説明します。このセクションの要素は次のとおりです。BINARY 照合が TEXT 記憶クラスの値で使用されている場合、BINARY 照合は、テキストエンコードを考慮せずに、値を表すメモリのバイト値を比較することによって実行されます。NOCASE 照合を使用すると、大文字と小文字を区別せずに比較されます。2 つの TEXT 値を比較するときは、常に照合シーケンスを使用し、次の規則に従って比較結果が決定されます。バイナリ比較演算子 (=、<、>、<=、および >=) では、一方のオペランドが列である場合、その列のデフォルトの照合タイプによって、比較で使用される照合シーケンスが決まります。両方のオペランドが列である場合は、左のオペランドの照合タイプによって、使用される照合シーケンスが決まります。どちらのオペランドも列でない場合は、BINARY 照合シーケンスが使用されます。AND 演算子も上記の規則に従って照合シーケンスが決定されます。IN 演算子は、使用する照合シーケンスを決定するという点では、= 演算子と同じように動作します。たとえば、x IN (y, z) という式で使用される照合シーケンスは、x が列の場合は x のデフォルトの照合タイプになります。その場合は、明示的に指定した照合シーケンスが常に使用されます。それ以外の場合は、ORDER BY 句によってソートされる式が列の場合には、その列のデフォルトの照合タイプを使用してソート順が決定されます。式が列でない場合は、BINARY 照合シーケンスが使用されます。SQL ステートメントの前に EXPLAIN キーワードを付けると、コマンドを実際に実行する代わりに、EXPLAIN キーワードを指定せずにコマンドを実行した場合に使用される一連の仮想マシン命令が報告されます。この高度な EXPLAIN 機能を使用すると、SQL ステートメントのテキストを調整してパフォーマンスを最適化したり、適切に機能しない SQL ステートメントをデバッグしたりできます。これは他の多くの SQL コマンドで使用できる非標準の句です。キーワードは異なりますが、句の意味はどちらの形式でも同じです。これら 5 種類の競合アルゴリズムについて以下に説明します。トランザクションがアクティブでない場合 (すべてのコマンドについて作成される暗黙的なトランザクションを除く)、このアルゴリズムは ABORT と同様に動作します。ROLLBACK は実行されないので、トランザクション内の前のコマンドで行われた変更はそのまま残ります。ただし、制約違反が発生する前にそのステートメントによってデータベースに加えられた変更は取り消されずにそのまま残ります。たとえば、UPDATE ステートメントの実行時に更新対象の 100 行目で制約違反が発生した場合、それまでの 99 行の変更はそのまま残りますが、100 行目以降の変更は行われません。IGNORE - 制約違反が発生したとき、制約違反を含む 1 行は挿入も変更もされません。行が無視されるという点を除き、コマンドは通常どおり続行されます。制約違反が発生した行の前後の行は通常どおり挿入または更新されます。エラーは返されません。REPLACE - UNIQUE 制約違反が発生すると、制約違反の原因となる既存の行が削除された後で、現在の行が挿入または更新されます。したがって、挿入または更新は常に実行され、コマンドは通常どおり続行されます。エラーは返されません。列にデフォルト値がない場合は、ABORT アルゴリズムが使用されます。この競合解決方法により、制約を満たすために行が削除されたときは、それらの行に対する削除トリガは呼び出されません。REINDEX コマンドは、1 つ以上のインデックスを削除して再作成するときに使用します。このコマンドは、照合シーケンスの定義が変更されたときに便利です。最初の形式では、アタッチされたデータベース内の指定された照合シーケンスを使用するすべてのインデックスが再作成されます。2 番目の形式では、table-name を指定した場合、そのテーブルに関連付けられたすべてのインデックスが再構築されます。index-name を指定した場合は、指定したインデックスのみが削除され、再作成されます。コメントは SQL コマンドではありませんが、SQL クエリの中に記述できます。コメントはランタイムでは空白として扱われます。コメントは、空白が許可される任意の場所 (複数行にわたる式の内部など) に記述できます。単一行のコメントには 2 つのダッシュを使用します。単一行コメントでは、その行の末尾までがコメントになります。ブロックコメントは、任意の行数にわたることも、単一行に埋め込むこともできます。ブロックコメントの終わりを示す区切り記号がない場合は、入力の最後までがブロックコメントになります。これはエラーとして扱われません。新しい SQL ステートメントは、ブロックコメントが終了した後の行から開始できます。ブロックコメントは、空白が許可される任意の場所 (式の内部など) のほか、他の SQL ステートメントの中にも埋め込むことができます。ブロックコメントはネストされません。ブロックコメントの中に単一行コメントを記述しても無視されます。式は他の SQL ブロック内のサブコマンドです。SQL ステートメントで使用する式の有効なシンタックスを次に示します。式とは、単一の値に解決できる値と演算子の任意の組み合わせを指します。式は、ブール値 (true または false) に解決できるか、または非ブール値に解決できるかによって、2 つの一般的な種類に分けられます。この条件を満たす式の種類は次のとおりです。
いくつかの関数
いくつかの演算子 (具体的には比較演算子)
リテラルの数値は、整数または浮動小数点数として記述します。科学的表記法もサポートされます。
小数点には常に
(ピリオド) を使用します。ストリングリテラルを示すときは、ストリングを一重引用符 (') で囲みます。ストリングの中に一重引用符を含めるには、'' のように一重引用符を行で 2 つ重ねます。リテラルブール値は、列のデータ型が Boolean の場合に使用します。リテラル値にはトークン NULL も使用できます。これらの特殊識別子はすべて、各テーブルのすべての行に関連付けられた一意のランダムな整数キー ("行キー") を表します。特殊識別子は、CREATE TABLE ステートメントで同じ名前を持つ実際の列が定義されていない場合のみ、行キーを参照します。行キーは読み取り専用列のように動作します。行キーは通常の列が使用できる場所であればどこでも使用できますが、行キーの値を UPDATE ステートメントまたは INSERT ステートメントで変更することはできません。IN 演算子の右オペランド、スカラ量 (単一の結果値)、または EXISTS 演算子のオペランドとして式を使用するときは、SELECT ステートメントを使用できます。スカラ量または IN 演算子のオペランドとして使用する場合、SELECT ステートメントで返すことができるのは 1 つの列のみです。SELECT 式のどの項も外側のクエリの値を参照しない場合、式は他の処理が実行される前に 1 回だけ評価され、その結果が必要に応じて再利用されます。SELECT 式に外部クエリからの変数が含まれる場合 (これを相関サブクエリと呼びます)、SELECT ステートメントは必要になるたびに再評価されます。SELECT ステートメントが IN 演算子の右オペランドである場合、IN 演算子は、左オペランドの結果が SELECT ステートメントの結果セットに含まれるいずれかの値と等しい場合に TRUE を返します。IN 演算子の前に NOT キーワードを付けると、テストの意味が逆になります。IN 演算子の右オペランド以外の式で SELECT ステートメントを使用する場合は、SELECT ステートメントの結果の 1 行目が値として使用されます。SELECT ステートメントが複数行の結果を返す場合、2 行目以降の行はすべて無視されます。CAST 式は、指定された値のデータ型を別の指定されたデータ型に変更します。指定できるデータ型は、CREATE TABLE ステートメントの列定義でデータ型として使用できる空でない型名です。詳細については、「データ型のサポート」を参照してください。
その他の式のエレメント
以降の節では、式で使用できるその他の SQL エレメントについて説明します。ビルトイン関数は次の 3 種類に大別されます。この関数は、トリガの実行時にエラーを通知するために使用します。SQL のすべてのキーワードと同様に、関数名も大文字と小文字は区別されません。集計関数は、複数行の値に対して演算を実行します。グループ内の NULL でないすべての X の平均値を返します。数値に見えないストリング値および BLOB 値は 0 と見なされます。AVG() の結果は、入力がすべて整数であっても、常に浮動小数点値です。* 引数の付いた 2 番目の形式は、グループ内の行の総数を返します。グループ内のすべての値の最大値を返します。通常のソート順を使用して最大値が決定されます。グループ内のすべての値のうち NULL でない最小の値を返します。通常のソート順を使用して最小値が決定されます。グループ内の NULL でないすべての値の合計を返します。0 を返します。SUM() への入力に整数でも NULL でもない値が含まれている場合、SUM() は浮動小数点値を返しますが、この値は正確な合計の近似値である場合があります。上記の集計関数のうち引数を 1 つ受け取るものはいずれも、その引数の前にキーワード DISTINCT を付けることができます。その場合は、重複したエレメントが除外されてから集計関数に渡されます。スカラ関数は一度に 1 つの行の値に作用します。スカラ関数の一覧を次に示します。引数 X の絶対値を返します。NULL でない最初の引数のコピーを返します。引数は 2 つ以上指定する必要があります。この関数は、X GLOB Y シンタックスを実装するために使用されます。NULL でない最初の引数のコピーを返します。引数は BLOB 格納型の値と解釈されます。その値の内容の 16 進数表現が返されます。X のストリングの長さ (文字数) を返します。オプションの ESCAPE 句を指定すると、3 つの引数を使用して関数が呼び出されます。それ以外の場合は、2 つの引数のみを使用して関数が呼び出されます。ストリング X の、すべての文字が小文字に変換されたコピーを返します。X の左側からスペースを除去したストリングを返します。Y 引数を指定すると、Y に含まれるいずれかの文字が X の左側から除去されます。引数の中の最大値を返します。引数には、数字だけでなくストリングも指定できます。最大値は、定義されたソート順に従って決定されます。MAX() は、引数が 2 個以上ある場合は単純な関数ですが、引数が 1 つだけの場合は集計関数になります。引数の中の最小値を返します。引数には、数字だけでなくストリングも指定できます。最小値は、定義されたソート順に従って決定されます。MIN() は、引数が 2 個以上ある場合は単純な関数ですが、引数が 1 つだけの場合は集計関数になります。引数が異なる場合は最初の引数を返し、それ以外の場合は NULL を返します。このルーチンは、引数の値を別の SQL ステートメントに挿入するのに適した形に変更したストリングを返します。ストリングは一重引用符で囲まれ、必要に応じて内部引用符がエスケープされます。BLOB 記憶クラスは 16 進数のリテラルとしてエンコードされます。この関数は、トリガを記述して元に戻す/繰り返し機能を実装する場合に役立ちます。これは暗号的に強い乱数ではありません。N は正の整数である必要があります。これは暗号的に強いランダム値ではありません。N の値が負の場合は、単一のバイトが返されます。数値 X を小数第 Y 位に四捨五入します。Y 引数を省略すると、0 が使用されます。X の右側からスペースを除去したストリングを返します。Y 引数を指定すると、Y に含まれるいずれかの文字が X の右側から除去されます。入力ストリング X の Y 番目の文字から Z 個の文字を取り出したサブストリングを返します。X の一番左の文字のインデックス位置は 1 です。Y が負の場合は、サブストリングの開始位置が左からではなく右からカウントされます。X の左右両側からスペースを除去したストリングを返します。Y 引数を指定すると、Y に含まれるいずれかの文字が X の左右両側から除去されます。式 X の型を返します。データ型の詳細については、「データ型のサポート」を参照してください。入力ストリング X の、すべての文字が大文字に変換されたコピーを返します。日付/時刻書式設定関数は、書式設定された日付および時刻データの作成に使用するスカラ関数のグループです。これらはストリング値および数値に作用し、ストリング値および数値を返します。DATE データ型に対して使用するものではありません。DATE データ型で宣言された列のデータを使用する場合、これらの関数は期待どおりに動作しません。最初のパラメータ (T) では、「時刻書式」で示された書式の時刻ストリングを指定します。時刻ストリングの後に任意の数の修飾子を指定できます。修飾子については、「修飾子」を参照してください。最初のパラメータ (T) では、「時刻書式」で示された書式の時刻ストリングを指定します。時刻ストリングの後に任意の数の修飾子を指定できます。修飾子については、「修飾子」を参照してください。最初のパラメータ (T) では、「時刻書式」で示された書式の時刻ストリングを指定します。時刻ストリングの後に任意の数の修飾子を指定できます。修飾子については、「修飾子」を参照してください。最初のパラメータ (T) では、「時刻書式」で示された書式の時刻ストリングを指定します。時刻ストリングの後に任意の数の修飾子を指定できます。修飾子については、「修飾子」を参照してください。STRFTIME() ルーチンは、最初の引数 F で指定された書式ストリングに従って書式設定された日付を返します。書式ストリングでは、次の置換がサポートされます。2 番目のパラメータ (T) では、「時刻書式」で示された書式の時刻ストリングを指定します。時刻ストリングの後に任意の数の修飾子を指定できます。修飾子については、「修飾子」を参照してください。時刻ストリングには、次のいずれかの書式を使用できます。
現在の日時 (協定世界時)
上記の書式に含まれる T は、日付と時間を区切るリテラル文字の "T" です。時刻ストリングの後に修飾子を 0 個以上続けることで、日付または日付の解釈を変更できます。使用できる修飾子は次のとおりです。時刻に加算する日数です。時刻に加算する時間数です。時刻に加算する分数です。時刻に加算する秒数およびミリ秒数です。時刻に加算する月数です。時刻に加算する年数です。時刻を月の初めに戻します。時刻を年の初めに戻します。時刻を日の初めに戻します。日付をローカル時間に変換します。日付を協定世界時に変換します。SQL はさまざまな演算子をサポートしています。それには、ほとんどのプログラミング言語に存在する一般的な演算子だけでなく、SQL に固有の演算子も含まれます。
一般的な演算子
次のリストは、SQL ブロックで使用できる二項演算子を優先順位の高い順に並べたものです。次の単項前置演算子がサポートされています。COLLATE 演算子は単項後置演算子と見なすことができます。COLLATE 演算子は優先順位が最も高く、常に他のどの前置単項演算子や二項演算子よりも強く結び付きます。等号演算子と不等号演算子はそれぞれ 2 種類あります。|| はストリングを連結する演算子で、そのオペランドである 2 つのストリングを 1 つにつなげます。% 演算子は、右オペランドを法とする左オペランドの剰余を出力します。二項演算子の結果は数値です。ただし、|| 連結演算子だけは例外で、結果がストリングになります。LIKE 演算子は、パターンマッチングによる比較を行います。LIKE 演算子の右オペランドにはパターンを指定し、左オペランドにはそのパターンと照合するストリングを指定します。パターン内のパーセント記号 (%) はワイルドカード文字で、ストリング内の 0 個以上連続した文字に一致します。パターン内のアンダースコア (_) はストリング内の任意の 1 文字に一致します。その他の文字はすべて、その文字そのものとして、大文字と小文字を区別せずに照合されます(メモ : データベースエンジンでは、7 ビットラテン文字の大文字と小文字のみが理解されます。オプションの ESCAPE 句を指定する場合、ESCAPE キーワードの後に続く式は、1 文字で構成されるストリングに評価される必要があります。この文字は、LIKE パターンの中で、リテラルのパーセントまたはアンダースコア文字を照合するために使用できます。パターン内でエスケープ文字の後にパーセント記号、アンダースコア、またはエスケープ文字自体を記述すると、それらはそれぞれ、ストリング内のリテラルのパーセント記号、アンダースコア、またはエスケープ文字に一致します。GLOB 演算子は LIKE と似ていますが、ワイルドカードとして UNIX のファイルグロビングのシンタックスを使用します。IN 演算子は、左オペランドが、右オペランド (括弧で囲まれた値のセット) 内のいずれかの値と等しいかどうかを計算します。右オペランドには複数のリテラル値をカンマで区切って記述するか、SELECT ステートメントを記述します。IN 演算子の右オペランドとして SELECT ステートメントを使用する際の説明と制限については、「式」の「SELECT ステートメント」を参照してください。
GLOB、LIKE、および IN 演算子の前に NOT キーワードを付けると、テストの意味が逆になります (つまり、値が指定のパターンと一致しないことが確認されます)
パラメータは、式の中でリテラル値を表すためのプレースホルダーを指定します。パラメータは次の 3 つの形式をとります。疑問符はインデックス付きのパラメータを示します。この形式のパラメータには、SQL ステートメントに登場した順に数値インデックス値が割り当てられます。インデックス値は 0 から始まります。コロンの後に識別名が付いた形式は、AAAA という名前の名前付きパラメータ用の場所を保持します。名前付きパラメータにも、SQL ステートメントに登場した順に数値インデックスが付けられます。混乱を避けるために、名前付きパラメータと数値インデックス付きパラメータを混在させないことをお勧めします。
サポートされていない SQL 機能
再帰トリガ (自分自身をトリガするトリガ) はサポートされていません。ネストされたトランザクション - 単一のアクティブトランザクションのみが許可されます。更新可能なビュー - ビューは読み取り専用です。つまり、アクセス許可として適用できるのは、基になるオペレーティングシステムの通常のファイルアクセス許可のみです。COPY : このステートメントはサポートされていません。PRAGMA : このステートメントはサポートされていません。システムテーブルにはアクセスできません。ランタイムには、オブジェクト指向的な方法でスキーマデータにアクセスできるスキーマ API が含まれています。
ステートメントパラメータのインデックス : 多くの実装では、ステートメントパラメータのインデックスは 1 から始まりますが、Adobe AIR の場合、ステートメントパラメータのインデックスは 0 から始まります (最初のパラメータのインデックス値は 0、2 番目のパラメータのインデックス値は 1 というようになります)
OBJECT : Object クラスまたは AMF3 を使用して直列化および非直列化することが可能なすべてのサブクラスに対応します (これには、カスタムクラスを含む多くのクラスが含まれますが、表示オブジェクトまたは表示オブジェクトをプロパティとして持つオブジェクトは含まれません)
データ型のサポート
ほとんどの SQL データベースとは異なり、Adobe AIR の SQL データベースエンジンでは、テーブルの列に特定の型の値を格納する必要はなく、特定の型が強制されることもありません。その代わりに、ランタイムでは記憶クラスと列の類似性という 2 つの概念を使用してデータ型が管理されます。この節では、記憶クラスと列の類似性について説明し、さまざまな条件下でデータ型の違いがどのように解決されるのかを示します。
データ型と比較演算子
データ型と数値演算子
データ型とソート
データ型とグループ化
記憶クラスは、データベースへの値の格納に使用される実際のデータ型を表します。次の記憶クラスが使用できます。SQL ステートメントに埋め込まれたリテラルとしてデータベースに渡される値、またはパラメータを使用して構成済みの SQL ステートメントにバインドされた値はすべて、SQL ステートメントが実行される前に記憶クラスに割り当てられます。SQL ステートメントに含まれるリテラルは、一重引用符または二重引用符で囲まれている場合は記憶クラス TEXT に、引用符で囲まれておらず、小数点または指数のない数字として指定されている場合は INTEGER に、引用符で囲まれておらず、小数点または指数の付いた数字として指定されている場合は REAL に、値が NULL の場合は NULL に、それぞれ割り当てられます。詳細については、「式」の「リテラル値」を参照してください。parameters 結合配列を使用してパラメータとして提供された値は、バインドされたネイティブのデータ型に最も近い記憶クラスに割り当てられます。列の類似性は、その列に格納するデータに推奨される型です。INSERT ステートメントまたは UPDATE ステートメントで値を列に格納すると、ランタイムはその値のデータ型を指定された類似性に変換しようとします。これは、データベースに格納する前にオブジェクトの toString() メソッドを呼び出した場合に相当します。値を指定された類似性に変換できない場合はエラーが発生し、処理は行われません。SELECT ステートメントを使用してデータベースから値を取得すると、格納時に別のデータ型から変換されているかどうかに関係なく、類似性に対応するクラスのインスタンスが返されます。データベースの各列には、次のいずれかの類似性が割り当てられます。数値データを TEXT 類似性の列に挿入すると、データがテキスト形式に変換されてから格納されます。テキストデータを NUMERIC 列に挿入すると、データを格納する前に整数または実数への変換が試みられます。変換できない場合は、エラーが発生します。NUMERIC 列から取得した値は、値に適した最も具体的な数値型のインスタンスとして返されます。つまり、値が正の整数または 0 の場合、uint インスタンスが返され、負の整数の場合、int インスタンスが返されます。また、値に浮動小数点部分 (非整数) がある場合、Number インスタンスが返されます。相違点は、浮動小数点部分のない実数値 (Number インスタンスなど) または浮動小数点部分のない実数値に変換できるテキスト値を挿入した場合に、値が整数に変換され、INTEGER 記憶クラスを使用して格納される点のみです。浮動小数点部分のある実数値を格納しようとすると、エラーが発生します。REAL 類似性または NUMBER 類似性の列も NUMERIC 類似性の列と同じように動作しますが、整数値が強制的に浮動小数点表現に変更される点が異なります。DATE 類似性の列には、日付と時刻の値が格納されます。変換に失敗するとエラーが発生します。コードで Number、int、または uint の値を格納しようとした場合、日付の検証は行われず、有効なユリウス日付値と見なされます。DATE 値は REAL 記憶クラスを使用してユリウス日付値として格納されるので、ソート操作や比較操作も期待どおりに動作します。値を有効な XML に変換できない場合、エラーが発生します。無効な値を格納した場合、その値の取得時に空の XML オブジェクトが返されます。値の取得時に AMF3 形式から非直列化され、格納されていたクラスのインスタンスとして返されます。表示オブジェクトなど一部の ActionScript クラスは、元のデータ型のインスタンスとして非直列化できません。
カスタムクラスインスタンスの場合、格納する前に flash
また、このデータを取得する前に、クラスに対して同じエイリアスを登録する必要があります。本質的に非直列化できないクラスであるため、あるいはクラスのエイリアスが未指定または不一致であるために適切に非直列化できないデータは、格納されている元のインスタンスに対応するプロパティと値を持つ匿名オブジェクト (Object クラスインスタンス) として返されます。NONE 類似性の列には、優先される記憶クラスはありません。データを挿入する前にデータの変換は行われません。
類似性の決定
列の類似性の型は、CREATE TABLE ステートメントで列に対して宣言された型によって決まります。類似性の型を決定する際は、次の規則が適用されます。列のデータ型にストリング "BLOB" が含まれている場合、またはデータ型が指定されていない場合、NONE 類似性になります。ステートメントを使用してテーブルを作成する場合は、どの列にもデータ型が指定されていないので、すべての列が NONE 類似性になります。
データ型と比較演算子
= がサポートされています。また、複数の値のいずれかに一致するかどうかをチェックする IN 演算子と、三項比較演算子の BETWEEN も使用できます。これらの演算子の詳細については、「演算子」を参照してください。比較の結果は、比較する 2 つの値の記憶クラスによって異なります。2 つの値を比較するときは、次の規則が適用されます。2 つの TEXT 値を比較するときは、二項比較が行われます。2 つの BLOB 値を比較した結果は、常に二項比較を使用して決定されます。数値記憶クラスとテキスト記憶クラスの間で二項比較を行うとき、データベースで比較が実行される前に必要に応じて値の変換が試みられます。数値記憶クラスとテキスト記憶クラスを比較するときは、次の規則が適用されます (メモ : 次の規則で使用されている「式」という用語には、列値以外の SQL スカラ式やリテラルも含まれます。
Z は式と見なされます)
列の値を式の結果と比較する場合は、比較が行われる前に、その列の類似性が式の結果に適用されます。2 つの式の結果を比較するときには、変換は行われません。結果がそのまま比較されます。ストリングと数値を比較する場合は、常に数値がストリングより小さくなります。三項演算子 BETWEEN は常に、同等の二項式として再構成されます。この処理は、この式を評価するために必要なそれぞれの比較において a に異なる類似性が適用される場合でも変わりません。) という形式の式も、上記の二項比較に関する 3 つの規則に従って (つまり、a = b と同じように) 処理されます。たとえば、b が列の値で a が式の場合は、比較が行われる前に、b の類似性が a に適用されます。IN 演算子の左の値が列の場合は、その列の類似性が使用されます。左の値が式の場合は、変換は行われません。また、COLLATE 句を使用して比較方法を変更することもできます。
データ型と数値演算子
サポートされている各数値演算子 (*、/、%、+、および -) のいずれを使用するときも、式を評価する前に各オペランドに数値の類似性が適用されます。連結演算子 || を使用するときは、式が評価される前に各オペランドが TEXT 記憶クラスに変換されます。どのオペランドも TEXT 記憶クラスに変換できない場合、その式の結果は NULL になります。このように、値を変換できない状況は次の 2 つの場合に起こります。
データ型とソート
ソートの前に記憶クラスの変換は行われません。
データ型とグループ化
GROUP BY 句を使用して値をグループ化するとき、記憶クラスの異なる値は別のものと見なされます。GROUP BY 句の結果として、値に類似性が適用されることはありません。これらの比較が行われる前に、それぞれの値に類似性が適用される場合があります。可能であれば、複合 SELECT ステートメントの結果セットの 1 つの列で返されるすべての値に同じ類似性が適用されます。適用される類似性は、その位置に (他の種類の式ではなく) 列値を持つ最初のコンポーネントである SELECT ステートメントによって返される列の類似性です。特定の複合 SELECT 列について、どの SELECT ステートメントのコンポーネントも列値を返さない場合、その列では類似性を適用せずに値の比較が行われます。
このドキュメントで使用する表記規則
このドキュメントに記載された SQL ステートメントの定義では、次の表記規則を使用しています。
テキストの大文字と小文字
lower case - プレースホルダーの項または句の名前はすべて小文字で表記されています。::= - 句またはステートメントの定義を示します。
グループおよび置換可能を示す文字
| - パイプ文字は置換可能なオプションの間で使用されており、"または" に読み替えることができます。[] - 角括弧で囲まれた項目はオプション項目です。角括弧の中には、単一の項目、または互いに置換可能な複数の項目を記載できます。() - 置換可能な複数の項目 (パイプ文字で区切られた項目) が丸括弧で囲まれている場合は、必須の項目グループ (つまり、単一の必須項目に対して有効な値となる複数の項目) を示します。
繰り返し制御文字
+ - 丸括弧で囲まれた項目の後にプラス文字が付いている場合は、前の項目を 1 回以上繰り返すことができることを示します。* - 角括弧で囲まれた項目の後にアスタリスク文字が付いている場合は、前の (角括弧で囲まれた) 項目を 0 回以上繰り返すことができることを示します。* - 列名、または関数名の後の丸括弧の中でアスタリスク文字が使用されている場合は、"0 回以上" の繰り返しではなく、リテラルのアスタリスク文字を示します。- ピリオド文字はリテラルのピリオドを表します。, - カンマ文字はリテラルのカンマを表します。() - 単一の句または項目を囲む 1 組の丸括弧は、その丸括弧が必須のリテラルの丸括弧文字であることを示します。その他の文字 - 特に記載されていない限り、その他の文字はそのリテラル文字を表します。
0 言語およびコンポーネントリファレンス
ステートメントとは、実行時のアクションを実行または指定する言語エレメントです。例えば、return ステートメントは、実行された関数の結果の値を返します。if ステートメントは、条件を評価して、次に行うべき処理を判定します。属性キーワードは定義の意味を変更します。また、クラス、変数、関数、および名前空間の定義に適用できます。定義キーワードは、変数、関数、クラス、およびインターフェイスなどのエンティティを定義する場合に使用します。プライマリ式のキーワードはリテラル値を表します。0 のプログラミング』を参照してください。ディレクティブにはステートメントと定義が含まれ、コンパイル時または実行時に適用できます。次の表では、ステートメントおよび定義以外のディレクティブは、ディレクティブとしてラベルされています。または、switch ステートメント内の特定のケースと関連するステートメントのブロック内でも使用します。switch ステートメントのジャンプターゲットを定義します。ループの終わりまで制御が通過したかのように、最も内側のループ内の残りのステートメントをすべてスキップして、ループの次の反復を開始します。switch ステートメントのデフォルトケースを定義します。while ループに似ていますが、条件の最初の評価に先立ってステートメントが実行される点が異なります。if ステートメントの条件が false を返したときに実行するステートメントを指定します。init (初期化) 式を 1 回だけ評価してから、ループシーケンスを開始します。オブジェクトの動的プロパティまたは配列のエレメントに対して反復処理を行い、各プロパティまたはエレメントに対して statement を実行します。コレクションのアイテムに対して反復処理を行い、各アイテムに対して statement を実行します。条件を評価して、次のステートメントを実行するかどうかを判定します。実行を呼び出し元の関数に直ちに返します。メソッドやコンストラクタのスーパークラスまたは親バージョンを呼び出します。式の値に応じて、ステートメントへの転送を制御します。エラーが発生する可能性のあるコードブロックを囲み、そのエラーに対処します。条件を評価して、条件の評価結果が true になる場合はステートメントを実行します。その後、ループの先頭に戻り、再び条件を評価します。ステートメントの実行に使用するデフォルトのオブジェクトを設定します。記述するコードの量を減らすことができます。実行時に追加された dynamic プロパティをクラスのインスタンスで保有するよう指定します。メソッドのオーバーライドまたはクラスの拡張を制限します。クラス、変数、定数、または関数に同じパッケージ内のすべての呼び出し元からアクセスできるよう指定します。Flash Player がネイティブコードで関数またはメソッドを実装するよう指定します。メソッドで継承したメソッドを置き換えるよう指定します。変数、定数、メソッド、または名前空間を定義したクラスからのみアクセスできるよう指定します。変数、定数、メソッド、または名前空間を定義したクラスとそのサブクラスからのみアクセスできるよう指定します。クラス、変数、定数、またはメソッドにすべての呼び出し元からアクセスできるよう指定します。変数、定数、またはメソッドがクラスのインスタンスではなくクラスに属するよう指定します。関数が任意の数のカンマ区切りの引数を取るよう指定します。独自で定義したメソッドとプロパティを共有するオブジェクトをインスタンス化できるクラスを定義します。定数 (値を 1 回だけ割り当てることができる変数) を指定します。他のクラスのサブクラスとするクラスを定義します。特定のタスクを実行するよう定義した一連のステートメントで構成されます。プロパティと同じように読み取り可能なメソッドである getter を定義します。クラスでインターフェイスを実装するかどうかを指定します。インターフェイスを定義します。定義の可視性を制御できます。他のスクリプトから読み込んだ個別のグループにコードを分類できます。パブリックインターフェイスでプロパティとして表示されるメソッドである setter を定義します。変数を指定します。外部で定義されたクラスおよびパッケージをコードで使用できるようにします。指定したファイル内のコマンドを呼び出し元のスクリプトにインクルードし、そのスクリプトの一部であるかのように扱います。指定した名前空間をオープンな名前空間のセットに追加します。プロトタイププロパティの代わりに固定プロパティとして使用する、ActionScript コアクラスのメソッドおよびプロパティを定義します。Proxy クラスのメソッドを定義します。プロトタイププロパティの代わりに固定プロパティとして使用する、Flash Player 10 クラスのメソッドおよびプロパティを定義します。変数に割り当てることができる特別な値、またはデータがない場合に関数から返される特殊な値です。メソッドに含まれるオブジェクトへの参照です。関数が任意の数のカンマ区切りの引数を取るよう指定します。引数のリストは配列となり、関数本体を介してアクセスできます。配列の名前をパラメータ宣言にある。文字の後に指定します。パラメータには、予約語ではない名前を指定することができます。
他のパラメータと共に使用する場合は、最後のパラメータとして
(rest) パラメータ宣言を指定する必要があります。(rest) パラメータ配列は、関数に渡された引数の数が他のパラメータの数より多い場合のみ作成されます。カンマ区切りリストの引数は、それぞれ配列のエレメントとして配置されます。
Array クラスのインスタンスを渡す場合は、配列全体が
このパラメータを使用すると、arguments オブジェクトにアクセスできなくなります。rest:* — 関数に渡される引数の配列名を表す識別子です。このパラメータの名前を rest とする必要はありません。キーワード以外の任意の名前を付けることができます。(rest) パラメータのデータ型を Array と指定することはできますが、混乱の原因となる場合があります。パラメータはカンマ区切りの値のリストを受け付けますが、Array クラスのインスタンスとは異なります。
次の例では、2 番目の関数のパラメータには別の名前 args を使用しています。プロトタイププロパティの代わりに固定プロパティとして使用する、ActionScript コアクラスのメソッドおよびプロパティを定義します。つまり、コアクラスのインスタンスでは、クラスのプロトタイプオブジェクトに割り当てられた同じプロパティおよびメソッドのバージョンの代わりに、固定プロパティおよびメソッドを使用します。または、switch ステートメント内の特定のケースと関連するステートメントのブロック内でも使用します。break ステートメントをループ内で使用すると、ループ本体の残りの部分をスキップし、繰り返し処理を停止して、ループステートメントの次のステートメントを実行します。break ステートメントを switch 内で使用すると、case ブロック内の残りのステートメントをスキップし、囲んでいる switch ステートメントに続く最初のステートメントにジャンプします。ネストされているループ内では、break は、そのループの残りの部分をスキップするだけで、ネストされている一連のループは終了しません。break ステートメントには、オプションのラベルを指定できますが、このラベルは外側のステートメントのラベルと一致している必要があります。外側のステートメントのラベルと一致しないラベルを使用すると、シンタックスエラーが発生します。ラベル付きの break ステートメントを使用すると、ネストされたループステートメント、switch ステートメント、または block ステートメントの複数のレベルを終了できます。例については、label ステートメントの項目を参照してください。次の例では、break を使用して無限ループから抜け出します。switch ステートメントのジャンプターゲットを定義します。case ステートメントを switch ステートメントの外側で使用すると、エラーが発生し、スクリプトはコンパイルされません。
// ここにクラス定義を記述
独自で定義したメソッドとプロパティを共有するオブジェクトをインスタンス化できるクラスを定義します。例えば、送り状追跡システムを作成する場合に、送り状クラスを定義して、各送り状で必要になるすべてのメソッドとプロパティを定義します。ActionScript ソースファイルごとに、他のソースファイルやスクリプトから可視なクラスを 1 つ指定できます。外部から可視のクラスは、パブリッククラスまたは内部クラスで、パッケージステートメント内で定義する必要があります。同じファイルに他のクラスを指定する場合、それらのクラスは、パッケージステートメントの外部でファイルの末尾に配置する必要があります。外部から可視のクラスの名前は、そのクラスが格納された ActionScript ソースファイルの名前と一致している必要があります。
ソースファイルの名前は、クラス名にファイル拡張子
as を付けた名前である必要があります。クラス定義はネストできません。つまり、クラス定義内に別のクラスを定義することはできません。クラスの新しいインスタンスの作成時にいつも実行されるメソッドである、コンストラクタメソッドを定義できます。コンストラクタメソッドの名前はクラス名と同じにする必要があります。コンストラクタメソッドを定義しない場合、デフォルトのコンストラクタが自動的に作成されます。実行時にオブジェクトがダイナミックプロパティを追加したり、ダイナミックプロパティにアクセスしたりできるようにする場合は、クラスステートメントの前に dynamic キーワードを付加します。インターフェイスを実装するクラスを宣言するには、implements キーワードを使用します。クラスのサブクラスを作成するには、extends キーワードを使用します。クラスは 1 つしか拡張できませんが、インターフェイスは複数実装することができます。次の例では、Plant という名前のクラスを作成しています。Plant コンストラクタは 2 つのパラメータを受け取ります。定数 (値を 1 回だけ割り当てることができる変数) を指定します。データ型の後にコロン (:) を付けて、厳密に定数を型指定できます。次の例では、値を複数回定数に割り当てようとすると、エラーが発生することを示しています。ただし、新しい配列リテラルを割り当てることはできません。ループの終わりまで制御が通過したかのように、最も内側のループ内の残りのステートメントをすべてスキップして、ループの次の反復を開始します。continue ステートメントはループの外部では作用しません。ネストされたループでは、オプションの label パラメータを使用すると、最も内側のループ以外もスキップできます。continue ステートメントには、オプションのラベルを指定できますが、このラベルは外側のステートメントのラベルと一致している必要があります。外側のステートメントのラベルと一致しないラベルを使用すると、シンタックスエラーが発生します。ラベル付きの continue ステートメントを使用すると、ネストされたループステートメントの複数のレベルをスキップできます。次の while ループでは、continue ステートメントを使用して、3 の倍数が検出されたときにループ本体の残りをスキップして、ループの上端にジャンプし、条件を再度評価します。switch ステートメントのデフォルトケースを定義します。default ケースステートメントは、リストの最後に置く必要はありません。default ステートメントを switch ステートメントの外側で使用すると、エラーが発生し、スクリプトはコンパイルされません。次の例では、曜日が土曜日または日曜日の場合、すべての case ステートメントが適用されず、default ステートメントが実行されます。2 番目の XML オブジェクト (x2) は、x2 で自身のデフォルトの名前空間を定義しているため、この設定を使用しません。while ループに似ていますが、条件の最初の評価に先立ってステートメントが実行される点が異なります。その後、ステートメントは、条件が true と評価された場合にのみ実行されます。while ループの場合、ループ内のコードは少なくとも 1 回は必ず実行されます。
while ループを使用して、実行するステートメントのコピーを while ループの開始前に配置することで同じ操作を実現できますが、多くのプログラマは do
while ループの方が読みやすいと考えています。while ループは無限ループになります。無限ループに陥ると、Flash Player に問題が発生し、警告メッセージが出力されたり、プレーヤーがクラッシュすることがあります。ループの回数がわかっている場合は、できる限り for ループを使用してください。
for ループは読みやすくデバッグも簡単ですが、あらゆる状況で do
while ループの代わりとして使用できるわけではありません。実行時に追加された dynamic プロパティをクラスのインスタンスで保有するよう指定します。クラスで dynamic 属性を使用する場合は、実行時にクラスのインスタンスにプロパティを追加できます。sealed クラスのインスタンスには、プロパティを追加できません。クラスが dynamic ではなく sealed の場合、クラスインスタンスでプロパティを取得または設定しようとすると、結果はエラーとなります。コンパイラを strict モードに設定し、インスタンスを作成するときにデータ型を指定する場合は、プロパティを sealed オブジェクトに追加しようとすると、コンパイルエラーまたはランタイムエラーが発生します。メモ : このキーワードは、外部スクリプトファイルで使用する場合にのみサポートされ、[アクション] パネルに記述するスクリプトではサポートされません。次の例では、2 つのクラスを作成します。これらのクラスは後の例でも使用します。次のコードは、Expando クラスのインスタンスを作成し、このインスタンスにプロパティを追加できることを示しています。次のコードは、Sealed クラスのインスタンスを作成し、プロパティを追加しようとすると、結果がエラーとなることを示しています。if ステートメントの条件が false を返したときに実行するステートメントを指定します。実行するステートメントが 1 つしかない場合、else ステートメントで実行するステートメントを囲む中括弧 ({}) は必要ありません。次の例では、else ステートメントに続くステートメントが 1 つだけなので、中括弧 ({}) は必要ありません。他のクラスのサブクラスとするクラスを定義します。サブクラスは、スーパークラスで定義されているメソッド、プロパティ、関数などをすべて継承します。final とマークされたクラスは拡張できません。extends キーワードを使用して、インターフェイスを拡張することもできます。他のインターフェイスを拡張したインターフェイスには、元のインターフェイスのメソッド宣言がすべて含まれます。このキーワードは、外部スクリプトファイルで使用する場合にのみサポートされ、[アクション] パネルに記述するスクリプトではサポートされません。スクリプトで Car オブジェクトをインスタンス化すると、Car クラスのメソッドと Vehicle クラスのメソッドの両方を使用できます。as" ファイルの内容を示します。このクラスは Vehicle クラスを拡張したクラスで、次のような 3 つの変更を行っています。Car クラスでは、最初に車オブジェクトにフルサイズのスペアタイヤが装着されているかどうかを追跡するための変数 fullSizeSpare を追加しています。3 番目に、Car クラスでは停車の際にアンチロックブレーキシステムを使用することを示すために、stop() 関数が上書きされています。サブクラスがスーパークラスのコンストラクタへのアクセスに使用する super ステートメントを使用して、Vehicle クラスのサブクラスを記述することもできます。自動的な型指定により false を数値に変換すると、その結果は 0 となります。次の例では、自動的な型指定によって false がどのような数値やストリングに変換されるかを示します。
// ここにステートメントを記述
メソッドのオーバーライドまたはクラスの拡張を制限します。final と指定されたメソッドのオーバーライドや、クラスの拡張を試行すると、結果はエラーとなります。Proxy クラスのメソッドを定義します。Proxy クラスメソッドは自身の名前空間内にあり、Proxy クラスメソッド名と一致するインスタンスメソッド名が Proxy サブクラスに含まれる場合に、名前が競合しないようになっています。プロトタイププロパティの代わりに固定プロパティとして使用する、Flash Player 10 クラスのメソッドおよびプロパティを定義します。init (初期化) 式を 1 回だけ評価してから、ループシーケンスを開始します。その後、condition 式の評価からループシーケンスが再び開始されます。実行するステートメントが 1 つしかない場合、for ステートメントで実行するステートメントブロックを囲む中括弧 ({}) は必要ありません。init — ループの開始前に評価される任意の式です。通常は代入式です。このパラメータに対して、var ステートメントを実行することもできます。通常は比較式です。式の評価結果が true の場合、for ステートメントに関連付けられているステートメントが実行されます。next — ループシーケンスの後に評価される任意の式です。通常はインクリメント式またはデクリメント式です。次の例では、for を使用して配列のエレメントを追加します。次の例では、for を使用して同じアクションを繰り返し実行します。次の例では、実行するステートメントが 1 つしかない場合は、中括弧 ({}) を付ける必要がないことを示しています。オブジェクトの動的プロパティまたは配列のエレメントに対して反復処理を行い、各プロパティまたはエレメントに対して statement を実行します。オブジェクトのプロパティは特定の順序で保持されないため、プロパティは外見上ランダムな順序で表示されます。in ステートメントでは、クラスに定義された変数やメソッドなどの固定プロパティは列挙されません。
固定プロパティのリストを取得するには、flash
in を使用してオブジェクトのプロパティに対して反復処理を行います。in で typeof 演算子を使用して、特定の型の子に対して反復処理を行います。コレクションのアイテムに対して反復処理を行い、各アイテムに対して statement を実行します。in ステートメントは、XML オブジェクトだけでなくオブジェクトや配列にも使用できます。in ステートメントは、固定プロパティではなくオブジェクトの動的プロパティを介してのみ反復処理を行います。固定プロパティは、クラス定義の一部として定義されるプロパティです。in ステートメントを使用するには、クラスの属性を dynamic と宣言する必要があります。in ステートメントは、プロパティ名ではなくオブジェクトのプロパティの値に対して反復処理を行います。コレクションは、XML オブジェクト、汎用オブジェクト、または配列とすることができます。in を使用して、オブジェクトのプロパティで保持される値に対して反復処理を行います。in を使用して、配列のエレメントに対して反復処理を行います。in で is 演算子を使用して、特定の型の子に対して反復処理を行います。p) に対して反復処理を行います。特定のタスクを実行するよう定義した一連のステートメントで構成されます。ある位置で関数を定義し、SWF ファイルの異なるスクリプトからその関数を呼び出すことができます。関数を定義する場合、その関数のパラメータも指定できます。パラメータは、関数が処理する値のプレースホルダです。関数を呼び出すたびに異なるパラメータを渡すことができます。これにより、1 つの関数を異なる状況で再利用できます。シンタックス 1: function キーワードを使用して、関数名、パラメータ、およびステートメントを指定した関数を定義できます。スクリプトによって関数が呼び出されると、関数定義内のステートメントが実行されます。関数は前方参照が許されます。つまり、同じスクリプト内では、関数を呼び出す箇所よりも後に関数を宣言できます。関数定義は、同じ関数の以前の定義を置き換えます。ステートメントが許されている場所であれば、どこでもこのシンタックスを使用できます。シンタックス 2: function を使用して、匿名関数を作成し、この関数への参照を返すこともできます。このシンタックスは式の中で使用され、特にオブジェクト内にメソッドを組み込む場合に便利です。一般に、arguments オブジェクトは、可変数のパラメータを受け取る関数や再帰的な匿名関数を作成する場合に使用します。次の例では、平方数の値を返す関数 sqr を定義します。同じスクリプト内で関数を定義して使用する場合は、関数の使用箇所の後に関数定義を記述することができます。
// ここにステートメントを記述
プロパティと同じように読み取り可能なメソッドである getter を定義します。他のメソッドとは異なり、getter の呼び出しには括弧 (()) を使用しないため、変数のように見えます。getter では、プライベートプロパティにパブリックインターフェイスを作成して、非表示の情報の規則を適用できます。情報を非表示にすると、基になるプライベートプロパティの実装が変更された場合でも、パブリックインターフェイスを変更する必要がないというメリットがあります。getter には、サブクラス内でオーバーライドできるというメリットもあります。var または const で宣言されたプロパティはオーバーライドできません。このキーワードは、外部スクリプトファイルで使用する場合にのみサポートされ、[アクション] パネルに記述するスクリプトではサポートされません。この値は対応する set コマンドで使用される値と同じである必要があります。次の例では、Team クラスを定義しています。スクリプトに次のコードを入力します。name をトレースする際に、getter メソッドを使用してプロパティの値を返しています。条件を評価して、次のステートメントを実行するかどうかを判定します。条件が true の場合は、条件に続く中括弧 ({}) 内のステートメントが実行されます。条件が false の場合は、中括弧内のステートメントをスキップし、中括弧の後のステートメントが実行されます。スクリプト内に分岐処理を作成するには、if ステートメントと else ステートメントを組み合わせます。実行するステートメントが 1 つしかない場合、if ステートメントで実行するステートメントを囲む中括弧 ({}) は必要ありません。クラスでインターフェイスを実装するかどうかを指定します。クラスでインターフェイスを実装する場合、インターフェイスで宣言されているすべてのメソッドをクラスで定義する必要があります。インターフェイスを実装するクラスのインスタンスは、インターフェイスが定義するデータ型のメンバーと見なされます。このため、is 演算子は、最初のオペランドがクラスインスタンスで、次のオペランドがインターフェイスとなっており、さらに、データ型の強制型変換がインターフェイス操作で定義されている場合に true を返します。このキーワードは、外部スクリプトファイルで使用する場合にのみサポートされ、[アクション] パネルに記述するスクリプトではサポートされません。外部で定義されたクラスおよびパッケージをコードで使用できるようにします。Sprite クラスを使用する場合は、これを読み込む必要があります。import ディレクティブを使用した後は、パッケージ名を含む完全なクラス名かクラス名のみのいずれかを使用できます。アクセス対象のクラスがパッケージ内に複数存在する場合は、次の例に示すように、1 つのステートメントですべてのクラスを読み込むことができます。import ディレクティブは、読み込んだパッケージの最上位レベルにあるクラス、関数、および変数のみを読み込みます。ネストされたパッケージは明示的に読み込む必要があります。読み込んだクラスをスクリプト内で使用しない場合、そのクラスは SWF ファイルには出力されません。したがって、SWF ファイルのサイズを気にすることなく、大きなパッケージを読み込むことができます。クラスに関連付けられたバイトコードは、実際に使用された場合のみ、SWF ファイルに含められます。必要のないクラスを読み込むと、名前の競合が起こりやすくなるというデメリットがあります。import ディレクティブは、それを呼び出している全タイムラインに適用されます。そのフレーム、またはタイムライン上の後続のフレームでは、そのパッケージ内のクラスを簡単な名前で参照できます。指定したファイル内のコマンドを呼び出し元のスクリプトにインクルードし、そのスクリプトの一部であるかのように扱います。include ディレクティブは、コンパイル時に呼び出されます。このため、インクルードファイルに何らかの変更を行った場合は、ファイルを保存し、ファイルを使用する SWF ファイルを再コンパイルする必要があります。インターフェイスを定義します。インターフェイスとは、メソッドのセットを定義するデータ型です。このメソッドは、インターフェイスを実装するすべてのクラスで定義される必要があります。インターフェイスはクラスに似ていますが、次に示す重要な違いがあります。インターフェイスにはメソッドの宣言だけが含まれます。メソッド実装は含まれません。つまり、インターフェイスを実装するすべてのクラスは、インターフェイスで宣言されている各メソッドの実装を定義する必要があります。インターフェイスメソッドの定義では、public または private などの属性を指定できませんが、実装されたメソッドはインターフェイスを実装するクラスの定義で public と指定する必要があります。extends ステートメントまたは implements ステートメントを介したクラスを使用して、インターフェイスで複数のインターフェイスを継承することができます。このキーワードは、外部スクリプトファイルで使用する場合にのみサポートされ、[アクション] パネルに記述するスクリプトではサポートされません。
// ここにステートメントを記述
クラス、変数、定数、または関数に同じパッケージ内のすべての呼び出し元からアクセスできるよう指定します。デフォルトでは、クラス、プロパティ、およびメソッドは internal 名前空間に属します。internal 属性は、変数がクラスの一部かどうかに関わらず適用できます。internal 属性は、定数がクラスの一部かどうかに関わらず適用できます。internal 属性は、関数がクラスの一部かどうかに関わらず適用できます。internal 属性は、名前空間がクラスの一部かどうかに関わらず適用できます。ネストされたループでは、ラベルを参照しない break または continue ステートメントは、そのループの残りの部分のみスキップし、一連のループはスキップしません。ただし、一連のループを定義するステートメントに関連付けられたラベルがある場合、break または continue ステートメントはこのラベルを参照することにより、一連のループをスキップできます。また、ラベルによりブロックステートメントを終了することもできます。ブロックステートメントがループの一部である場合以外は、ラベルを参照しない break ステートメントをブロックステートメント内に配置することはできません。ブロックステートメントに関連付けられたラベルがある場合は、このラベルを参照する break ステートメントをブロックステートメント内に配置できます。次の例では、ネストされたループでラベルを使用して、一連のループを終了する方法を示します。コードは、ネストされたループを使用して、0 から 99 までの数値のリストを生成します。break ステートメントはカウントが 80 に到達する直前で発生します。次の例では、ブロックステートメントでのラベルの使用方法を示します。ブロックステートメントには foo ラベルが付けられ、break ステートメントはブロック内の最後のステートメントをスキップできます。定義の可視性を制御できます。次に、名前空間を作成、適用、参照する手順を示します。次に、プロパティまたはメソッドの宣言でカスタム名前空間を使用して、プロパティまたはメソッドに名前空間を適用します。次に、use キーワードを使用するか、接頭辞として識別子に名前空間を付けて、名前空間を参照します。有効な識別子を使用できます。このパラメータはオプションです。Flash Player がネイティブコードで関数またはメソッドを実装するよう指定します。このキーワードは、独自に作成するコードでは使用できません。変数に割り当てることができる特別な値、またはデータがない場合に関数から返される特殊な値です。null は、存在しない、または定義されていないデータ型を表す値として使用されます。次の例では、インデックスの付いた配列の最初の 6 つの値をチェックし、値が指定されていない (value == null) 場合は、メッセージを出力します。ObjectProxy クラスメソッドは自身の名前空間内にあり、Proxy クラスメソッド名と一致するインスタンスメソッド名が Proxy サブクラスに含まれる場合に、名前が競合しないようになっています。
// ここにステートメントを記述
メソッドで継承したメソッドを置き換えるよう指定します。継承したメソッドをオーバーライドするには、override 属性を使用する必要があります。名前、数値、パラメータの型、および戻り値の型は完全に一致する必要があります。override 属性を使用せずにメソッドをオーバーライドしようとするとエラーが発生します。同様に、メソッドに一致する継承されたメソッドがない場合に、override 属性を使用するとエラーが発生します。
継承されたものでないメソッド
インターフェイスメソッドを実装するメソッド
スーパークラスで final と指定されている継承されたメソッド
var または const で宣言されたプロパティをオーバーライドすることはできませんが、基本クラスのプロパティを getter-setter とし、get および set で定義されたメソッドをオーバーライドすることで、同様の機能を実現することができます。他のスクリプトから読み込んだ個別のグループにコードを分類できます。クラスがパッケージのメンバーであることを示すには、package キーワードを使用する必要があります。
// ここにステートメントを記述
変数、定数、またはメソッドを宣言または定義したクラスからのみアクセスできるよう指定します。さらに、private ではコンパイル時および実行時の両方でアクセスが制限されます。デフォルトでは、同じパッケージにある呼び出し元は変数または関数にアクセスできます。このキーワードは、変数や関数へのアクセスを制限する場合に使用します。このキーワードは、クラス定義でのみ使用できます。インターフェイス定義では使用できません。private は、クラスまたはその他のすべてのパッケージレベルの定義には適用できません。private 属性は、変数がクラス内にある場合のみ適用できます。private 属性は、定数がクラス内にある場合のみ適用できます。private 属性は、メソッドがクラス内にある場合のみ適用できます。private 属性は、名前空間がクラス内にある場合のみ適用できます。次の例では、private キーワードを使用して、クラス内の特定のプロパティを非表示にする方法について説明します。alpha はプライベート変数であるため、A クラスの外部やサブクラス B からもアクセスできません。プライベート変数にアクセスしようとすると、エラーが発生します。
// ここにステートメントを記述
変数、定数、メソッド、または名前空間を定義したクラスとそのサブクラスからのみアクセスできるよう指定します。デフォルトでは、同じパッケージにある呼び出し元は変数または関数にアクセスできます。このキーワードは、変数や関数へのアクセスを制限する場合に使用します。このキーワードは、クラス定義でのみ使用できます。インターフェイス定義では使用できません。private は、クラスまたは他のすべてのパッケージレベルの定義には適用できません。0 では Base の拡張クラスのみが保護されたプロパティにアクセスできます。Java では、Base と同じパッケージにあるすべてのクラスが保護されたプロパティにアクセスでき、Base のサブクラスでない場合も同様です。次の例では、クラス A で保護されたクラス変数を作成し、クラス A のサブクラスであるクラス B からその変数に正常にアクセスしています。
// ここにステートメントを記述
クラス、変数、定数、またはメソッドにすべての呼び出し元からアクセスできるよう指定します。クラス、変数、およびメソッドはデフォルトでは内部クラスです。つまり、現在のパッケージ内にのみ表示されます。クラス、変数、またはメソッドにすべての呼び出し元からアクセスできるようにするには、public 属性を使用する必要があります。public 属性は、変数がクラスの一部かどうかに関わらず適用できます。public 属性は、定数がクラスの一部かどうかに関わらず適用できます。public 属性は、関数がクラスの一部かどうかに関わらず適用できます。public 属性は、名前空間がクラスの一部かどうかに関わらず適用できます。次の例では、クラスファイルでパブリック変数を使用する方法を示します。User クラスのいずれかのパブリック変数をプライベート変数に変更した場合、User クラスの外から変数にアクセスしようとすると、コンパイル時エラーが生成されます。実行を呼び出し元の関数に直ちに返します。return ステートメントの後に式が続く場合は、式が評価されて結果が返されます。関数の定義に戻り値の型が含まれている場合は、return ステートメントの後に式を続ける必要があります。複数の値を取得することはできません。複数の値を取得しようとした場合は、最後の値だけが返されます。次の例では、c が返されます。複数の値を取得する必要がある場合は、代わりに配列またはオブジェクトを使用します。このパラメータはオプションです。
// ここにステートメントを記述
パブリックインターフェイスでプロパティとして表示されるメソッドである setter を定義します。setter は特別なメソッドで、var キーワードで宣言されたプロパティの値を設定します。他のメソッドとは異なり、setter の呼び出しには括弧 (()) を使用しないため、変数のように見えます。setter では、プライベートプロパティにパブリックインターフェイスを作成して、非表示の情報の規則を適用できます。情報を非表示にすると、基になるプライベートプロパティの実装が変更された場合でも、パブリックインターフェイスを変更する必要がないというメリットがあります。setter には、サブクラス内でオーバーライドできるというメリットもあります。var で宣言されたプロパティはオーバーライドできません。メモ : このキーワードは、外部スクリプトファイルで使用する場合にのみサポートされ、[アクション] パネルに記述するスクリプトではサポートされません。この値は対応する get コマンドで使用される値と同じである必要があります。スクリプトに次のコードを入力します。
// ここにステートメントを記述
変数、定数、またはメソッドがクラスのインスタンスではなくクラスに属するよう指定します。静的クラスメンバーにアクセスするには、インスタンス名の代わりにクラス名を使用します。例えば、Date クラスにある parse() という名前の静的メソッドは、次のシンタックスでのみ呼び出すことができます。例えば、次のコードではエラーが発生します。インターフェイス定義では使用できません。静的クラスメンバーは継承されません。Java や C++ のように、サブクラス名を使用して静的クラスメンバーを参照することはできません。ただし、修飾子を使用せずに、クラスまたはサブクラス内の静的変数またはメソッドを参照できます。次の例を参照してください。静的メソッド内では、super ステートメントまたは this キーワードは使用できません。メモ : このキーワードは、外部スクリプトファイルで使用する場合にのみサポートされ、[アクション] パネルに記述するスクリプトではサポートされません。次の例では、static キーワードを使用して、作成されたクラスのインスタンス数を追跡するカウンタを作成する方法を示します。スクリプトに次のコードを入力します。次の例では、Users クラスを拡張して、静的変数およびメソッドは継承されないものの、サブクラスで参照できることを示しています。メソッドやコンストラクタのスーパークラスまたは親バージョンを呼び出します。クラスコンストラクタの本体内で使用する場合、super() ステートメントはコンストラクタのスーパークラスバージョンを呼び出します。スーパークラスコンストラクタの呼び出しには、正しい数の引数が指定されている必要があります。スーパークラスコンストラクタは、明示的に呼び出すかどうかに関わらず、必ず呼び出されます。明示的に呼び出さない場合、呼び出しは引数なしでサブクラスのコンストラクタ本体の最初のステートメントの前に自動的に挿入されます。つまり、サブクラスでコンストラクタ関数を定義し、スーパークラスコンストラクタが引数を取る場合は、正しい数の引数を指定してスーパークラスコンストラクタを明示的に呼び出す必要があります。そうでない場合は、エラーが発生します。0 とは異なり、スーパークラスコンストラクタへの呼び出しは、サブクラスコンストラクタの最初のステートメントである必要はありません。
インスタンスメソッドの本体で使用する場合は、super をドット () パラメータと共に使用して、メソッドのスーパークラスバージョンを呼び出すことができます。
また、オプションとしてスーパークラスメソッドに引数 (arg1
このスタイルは、スーパークラスのメソッドにビヘイビアを追加するだけでなく、そのメソッドを使用して元のビヘイビアを実行するようなサブクラスメソッドを作成する場合に便利です。静的メソッドで super ステートメントを使用することはできません。argN:* — メソッドのスーパークラスバージョンまたはスーパークラスのコンストラクタ関数に渡すオプションのパラメータです。式の値に応じて、ステートメントへの転送を制御します。switch ステートメントには、どの case ステートメントも式に一致しない場合に実行するデフォルトケースを指定する必要があります。それぞれの case ステートメントは、break ステートメントで終了する必要があります。これにより、フォールスルーエラーを回避できます。フォールスルーエラーが発生すると、ケースがテスト式に一致しない場合でも、次の case ステートメントのコードが実行されます。次の例では、デフォルトケースにフォールスルーする switch ステートメントを定義します。メソッドに含まれるオブジェクトへの参照です。スクリプトの実行時には、this キーワードはそのスクリプトを含むオブジェクトを参照します。メソッド本体内では、this キーワードは呼び出されたメソッドを含むクラスインスタンスを参照します。ダイナミッククラスで定義された関数を呼び出すには、this を使用して適切なスコープで関数を呼び出す必要があります。スクリプトに次のコードを追加します。as" を使用するとシンタックスエラーが発生し、上記の例ではコメントアウトされます。catch ブロックが例外をキャッチしない場合は、スローされた値のストリング表現が [出力] パネルに表示されます。一般には、Error クラスまたはそのサブクラスのインスタンスをスローします。「例」を参照してください。この例の checkEmail() 関数は、受け取ったストリングが正しい形式の電子メールアドレスかどうかを確認します。ストリングに "@" 記号が含まれていない場合は、エラーをスローします。e-mail ストリングに有効な電子メールアドレスが含まれていない場合は、trace ステートメントでエラーメッセージが出力されます。次の例では、Error クラスのサブクラスをスローします。スクリプトに次のコードを入力します。自動的な型指定により true を数値に変換すると、その結果は 1 となります。次の例では、自動的な型指定によって true を数値 1 に変換する方法を示しています。エラーが発生する可能性のあるコードブロックを囲み、そのエラーに対処します。0 でランタイムエラーの条件処理に使用される主要なメカニズムです。次に、最初にアクセス可能な catch ブロックにエラーオブジェクトをパス (スロー) します。アクセス可能な catch ブロックがない場合、例外は不明な例外と見なされます。不明な例外が発生すると、スクリプトは終了します。throw ステートメントを使用して、コードで例外を明示的にスローすることができます。任意の値をスローできますが、柔軟性があり Flash Player のビヘイビアに一致するオブジェクトをスローすることが推奨されます。例外をキャッチするには、Flash Player または作成したコードでスローするかに関わらず、例外をスローするコードを try ブロックに配置します。try ブロック内のコードが例外をスローすると、制御は catch ブロックがある場合はこれに移動し、次に finally ブロックがある場合はこれに移動します。finally ブロックは、例外がスローされたかどうかに関わらず、必ず実行されます。try ブロック内のコードが例外をスローしなかった場合 (try ブロックが正常終了した場合)、catch ブロック内のコードは無視されますが、finally ブロック内のコードは実行されます。try ブロックは、必要なだけ何レベルでもネストできます。パラメータの型を指定することもできます。複数の catch ブロックを使用する場合は、型指定したパラメータを使用することで、1 つの try ブロックからスローされた複数の型のエラーオブジェクトをキャッチできます。スローした例外がオブジェクトである場合、スローしたオブジェクトが指定した型のサブクラスであれば、型が一致します。特定の型のエラーがスローされた場合は、対応するエラーを処理する catch ブロックが実行されます。指定した型ではない例外がスローされた場合、catch ブロックは実行されず、try ブロックからそのエラーに一致する catch ハンドラに対して例外が自動的にスローされます。関数の内部でエラーがスローされ、その関数に catch ハンドラが含まれていない場合、その関数は終了します。catch ブロックが見つからない限り、呼び出し元の関数もすべて終了します。このプロセスの間に、すべてのレベルの finally ハンドラが呼び出されます。通常は Error クラスまたはそのサブクラスのインスタンスです。catch ステートメントの使用例を示します。try ブロック内のコードで無効な操作が指定されています。スプライトは自身を子として追加することはできません。次に例を示します。指定した名前空間をオープンな名前空間のセットに追加します。指定した名前空間は、現在のコードブロックが終了すると、オープンな名前空間のセットから削除されます。use namespace ディレクティブは、プログラム、パッケージ定義、またはクラス定義の最上位のレベルに表示できます。変数を指定します。関数内で変数を宣言した場合、その変数はローカルです。変数はその関数用に定義され、関数呼び出しの終了時にスコープから外れます。関数外で変数を宣言した場合、その変数は、そのステートメントが含まれるタイムライン全体で使用できます。別のオブジェクトのスコープ内の変数をローカル変数として宣言することはできません。データ型の後にコロンを付けて、変数にデータ型を割り当てることができます。カンマで宣言を区切ることにより、1 つのステートメントで複数の変数を宣言できます。ただし、このシンタックスを使用すると、コードが読みにくくなる場合があります。push を使用して、配列の末尾にエレメントを追加します。条件を評価して、条件の評価結果が true になる場合はステートメントを実行します。その後、ループの先頭に戻り、再び条件を評価します。条件の評価結果が false になると、ステートメントはスキップされ、ループは終了します。while ステートメントは、次の手順を実行します。手順 1 ~ 4 の各繰り返しはループの反復と呼ばれます。次の手順に示すように、条件は各反復の始めにテストされます。それ以外の場合は、while ステートメントが完了し、while ループの直後のステートメントから実行が再開されます。continue ステートメントが検出された場合は、残りのステートメントをスキップし、手順 1 に進みます。break ステートメントが検出された場合は、while ステートメントを終了し、while ループの直後のステートメントから実行が再開されます。手順 1 に進みます。一般にループ処理は、カウンタ変数が指定値より小さい間はアクションを実行するという場合に使用します。各ループの最後で、指定された値に達するまでカウンタがインクリメントされます。実行するステートメントが 1 つしかない場合、while ステートメントで実行するステートメントを囲む中括弧 ({}) は必要ありません。次の例では、while ステートメントを使用して式をテストします。条件が true でなくなると、ループは終了します。ステートメントの実行に使用するデフォルトのオブジェクトを設定します。記述するコードの量を減らすことができます。識別子を解決するために with ステートメントで使用されるスコープチェーンは、次のリストの最初の項目から始まり、最後の項目まで続きます。
Activation オブジェクト (スクリプトが関数内で呼び出されたローカル変数を持つ関数を呼び出すときに自動的に作成されるテンポラリオブジェクト)
実行中のスクリプトを含むオブジェクト
with ステートメント内に変数を設定するには、with ステートメントの外側で変数を宣言しておくか、変数を設定するタイムラインへのフルパスを入力する必要があります。変数を宣言せずに with ステートメントに設定すると、with ステートメントはスコープチェーンに従って値を検索します。変数がまだ存在しない場合、with ステートメントが呼び出されたタイムライン上に新しい値が設定されます。次のコード例では、with ステートメントを使用せずに、上記のコードを記述しています。with ステートメントは、スコープチェーンリスト内の複数の項目に同時にアクセスする場合に便利です。次の例では、ビルトインの Math オブジェクトをスコープチェーンの前に設定します。PI に解決されます。a、x、y、r の各識別子は Math オブジェクトのメソッドやプロパティではありませんが、関数 polar() のオブジェクトアクティベーションスコープ内に存在するので、それぞれ対応するローカル変数として処理されます。
5| お使いのバージョンではない場合
AIR アプリケーションのインストールの防止
信頼されていない AIR アプリケーションのインストールの防止
外部から読み込まれる SWF コンテンツの設定
AIR アプリケーションのインストールの防止
信頼されていない AIR アプリケーションのインストールの防止
これらは、IT 管理者がエンドユーザのシステムを制御する企業など、閉鎖された環境内のみでの使用を想定した設定です。これらの設定を、オープンな環境で配布するためのネイティブインストーラの一部として使用することはできません。
AIR アプリケーションのインストールの防止
設定が存在しないか、値が 0 に設定されている場合、AIR アプリケーションのインストールが許可されます。ただし、アプリケーションの宛先ディレクトリにインストールするユーザは、システム権限が必要です。AIR アプリケーションのインストールが許可される場合でも、次の制限が順守されます。Mac OS では、 アプリケーションをインストールまたはアップデートするには、アプリケーションディレクトリにインストールするための適切なシステム権限(およびアプリケーションが Adobe AIR のアップデートを必要とする場合は管理権限)が必要です。Windows では、ユーザは管理権限を持っている必要があります。
信頼されていない AIR アプリケーションのインストールの防止
設定が存在しないか、値が 0 に設定されている場合、信頼されていない AIR アプリケーションのインストールが許可されます。ただし、アプリケーションの宛先ディレクトリにインストールするユーザは、システム権限が必要です。AIR アプリケーションは、信頼されている証明書で署名されている場合やインストール先のコンピュータで信頼されている証明書に関連付けられている場合に信頼されます。設定が存在しないか、値が 0 に設定されている場合、( アプリケーションで必要になったとき、または)バックグラウンドのアップデートメカニズムでアップデートが利用可能になったときに、AIR ランタイムの自動アップデートが許可されます。ただし、アプリケーションの宛先ディレクトリにインストールするユーザは、システム権限が必要です。この設定により自動アップデートが防止されない場合でも、 ランタイムの自動アップデートを行うユーザは管理権限を持っている必要があります。
外部から読み込まれる SWF コンテンツの設定
アプリケーションの外部から読み込まれたコンテンツは、Web ブラウザで読み込まれたコンテンツと同じセキュリティ規則を順守します。例えば、このようなコンテンツは、ローカルファイルシステムへのアクセスを提供する AIR API を呼び出すことはできません。com に電子メールを送信してください。
5| お使いのバージョンではない場合
0 およびコンポーネント
アプリケーションの配布とアップデート / AIR アプリケーションの配布、インストール、実行
AIR ファイルへの電子署名
コード署名証明書に関する情報
証明書の形式について
証明書の取得
証明書の変更
認定されている証明機関(CA)が発行した証明書を使用して AIR インストールファイルに電子署名すると、インストールしているアプリケーションが誤ってまたは悪意をもって変更されていないことをユーザに確実に保証することができ、署名したユーザは署名者(発行者)と見なされます。