この記事のより新しい版がWSOFTDocsにあります。AliceScriptWikiでは、この記事はもう更新されません。

AliceScriptは、セキュリティと信頼性に関するバグを修正することを目的にして、従来のバージョンのAliceScriptにも更新が提供されることもありますが、それは絶対ではありません。すでにお使いの従来のバージョンのAliceScriptを用いて開発されたアプリケーションを移行する必要はありませんが、新規に開発するアプリケーションについては最新バージョンのAliceScriptを使用することを推奨します。

この記事では、AliceScriptの各バージョンにおける新機能と機能強化について説明します。この記事は、それぞれの新機能の情報を詳しく説明するものではありません。AliceScriptの各機能についてはそれぞれの記事をご覧ください。ダウンロードとインストール手順について詳しくはAliceScriptのダウンロードを参照してください。

AliceScript Golden Masterの新機能 編集

AliceScriptGMは、AliceScriptの初の安定リリースです。AliceScriptGMによって、AliceScriptに次の機能と機能強化が追加されています。 最新のAliceScriptADKはAliceScriptのダウンロードでダウンロードできます。

一部の暗黙的な変換の廃止 編集

AliceScriptGMでは、プログラムミスを減らし、適切に例外を発生させる目的でbool型とnumber型、string型からnumber型への暗黙的な変換は廃止されました。

未定義の変数への代入の禁止 編集

AliceScriptGMからは、varキーワードを使用することでのみ、未定義の変数を定義できます。定義されていない変数にアクセスすることはできない上、同じスコープ内で複数回同じ名前の変数をvarキーワードを使って宣言することはできません。このサイトにある一部の記事はまだ古いままで、変数の定義にvarキーワードを使用していなかったり、型指定修飾子を使用している場合がありますが、これは最新のバージョンのAliceScriptでは正しく動作しません。

関数・変数・定数のスコープ 編集

関数や変数、定数のスコープはAliceScriptGMにおける重要な変更の一つです。 AliceScriptGM以降のバージョンでは、関数や変数、定数はその有効な範囲内で、一意な名前である必要があります。この範囲をスコープと呼びます。スコープの範囲内では、同じ名前のオペランドを定義することはできませんし、反対にスコープの外に出ると、その範囲内で定義したオペランドは使用できません。 AliceScriptでいうところのスコープの範囲は、原則としてそのコードのブロック内です。コードのブロックは、およそそのコードの波括弧の中を指します。次の例を参照してください。

function OutputTen()
 {
     var a = 10;
     print(a);
 }
print(a);//例外発生

整数リテラルの2進表記および16進表記のサポート 編集

AliceScriptGMからは、整数を2進数および16進数で記述できるようになります。整数を2進数で表現する場合は0bプレフィックスを、16進数で表現する場合は0xプレフィックスを使用します。次の例では、すべて10進数で256と等価な数を記述しています。

var decimalNum = 256;
var hexNum = 0x100;
var binaryNum = 0b100000000;

print(decimalNum==hexNum==binaryNum);//出力:True

逐語的文字列リテラル 編集

シングルクォーテーションで囲われた文字列は、逐語的文字列リテラルとして認識します。 逐語的文字列リテラルは、\’などの限定的なものを除き、ほとんどの文字がそのままの意味で解釈されます。 次の例ではどちらも”Hello,World“を表す文字列リテラルです。

‘“Hello,World”’;
“\”Hello,World”\”

AliceScriptRC2の新機能 編集

AliceScriptRC2は、RC1に続くAliceScriptの次のテストリリースです。AliceScriptRC2によって、AliceScriptに次の機能と機能強化が追加されています。 最新のAliceScriptADKはAliceScriptのダウンロードでダウンロードできます。

parmsパラメータ 編集

AliceScriptRC2では、parmsパラメータが導入されています。引数にparamsキーワードを使用すると、可変長個の引数を受け取る引数を指定できます。paramsの型は常にARRAYとなります。 一つの関数内では、paramsキーワードより後に引数を指定することができません。次に例を示します。

function PrintAllArgs(params args)
 {
   foreach(arg in args)
   {
     print(arg);
   }
 }
PrintAllArgs("Hello","World");
//出力:["Hello","World"]

引数の型指定 編集

引数の型指定では、ユーザ定義関数の引数に型を指定することができるようになりました。引数にstringなどの型指定修飾子を指定すると、その型のみを引数として受け入れることができるようになり、予期しない型による呼び出しを防ぐことができます。次に例を示します。

function Add(number a,number b)
{
   return a+b;
}
Add(1,2);//戻り値:3
Add("1","2");//例外発生

デリゲートの簡易呼び出し 編集

デリゲートの簡易呼び出しは、デリゲート型が変数に登録されている場合にInvokeメソッドを呼び出さずに変数名(引数);の形で呼び出しできるようにします。次に例を示します。

var SayHello = delegate()
 {
   print("Hello,World");
 }
SayHello();//出力例:Hello,World
SayHello.Invoke();//出力例:Hello,World

ユーザ定義定数 編集

ユーザ定義定数では、constキーワードを使ってその値が一度のみ定義され変更することができない定数を宣言することができます。次に例を示します。

const Message="Hello,World";
print(Message);//出力例:Hello,World
Message="Bonjur";//例外発生

デバッグ出力 編集

デバッグ出力によって、コードのデバッグのための新しい出力が提供されます。今まで、デバッグのためにprintを用いて出力していたものをdebug_printで 代用することができます。これらの関数はAlice.Interpreter名前空間にあります。例えば、次の例では、デバッグ用の出力と標準出力に別な内容が出力されます。

import "Alice.Interpreter";
print("Hello,Standard");
debug_print("Hello,Debug");
//標準出力:Hello,Standard
//デバッグ出力:Hello,Debug

例外のエラーコード 編集

例外のエラーコードによって、発生した例外に対して一貫してより高度な情報を得ることができるようになります。完全な日本語でのエラー出力によって発生した例外がプログラマだけでなくユーザにも親しみやすくなります。 例外のエラーコード、メッセージ、発生条件などについて詳しく知るには例外を参照してください。

Type型/型比較演算子 編集

type型によって、変数の型に対する新たなアプローチが提供されます。全ての変数はTypeプロパティを実装していて、その変数の型を表す値を取得することができます。stringnumberboolキーワードなどはそれぞれの型の値を表す定数です。また、型一致演算子isを使用することでその型に変数が指定された型かどうかを判断できます。次に例を示します。

var num = 123;
print(num.type);//出力例:NUMBER
var condition = (num is number);
print(condition);//出力例:True

暗黙的な変換の廃止/型変換演算子 編集

まず、従来のAliceScriptに搭載されていた暗黙的な型変換は廃止されました。String型への変換を除くすべての型を変換するには、型変換演算子またはConvert関数が必要です。型変換演算子asを使用することでその型に変数を明示的に変換することができます。次に例を示します。

var num = 123;
print(num.type);//出力例:NUMBER
var str = (num as string);
print(str.type);//出力例:STRING

Activate関数/Convert関数 編集

type.activate関数は、その変数の表す型の変数を新規に作成し返します。variable.convert(type)関数はその変数を指定された型に変換します。次に例を示します。

var num = number.Activate();
print(num.type);//出力例:NUMBER
var str = num.Convert(string);
print(str.Type);//出力例:STRING

Null合体演算子 編集

Null合体演算子は、その変数がnullでない場合、その変数がそのまま返されます。それ以外の場合は、右側のオペランドが評価され、その結果が返されます。 また、その変数がnullである場合にのみ、右側のオペランドの値を左側の変数に割り当てるNull合体割当演算子??=も使用できます。次に例を示します。

var a = null;
a ??= 5;
print(a);//出力例:5
a ??= 3;
print(a);//出力例:5

AlicePackage 編集

AlicePackageによって、スクリプトファイルやリソース、ライブラリを一つにまとめて公開することが可能になりました。詳細についてはAlicePackageを参照してください。

パフォーマンス 編集

WSOFTScriptとのデバッグ互換性維持のために残されていたWSOFTScriptデバッガは、AliceScriptRC2から実装されなくなりました。また、&&||演算子について演算のショートカットが導入され、左辺の評価状況によって右辺を評価すべきか考慮し、不要である場合は評価されなくなりました。従来のような動作が必要な場合には代わりに&演算子や、|演算子を利用できます。 これらの改善により、一部のシナリオでパフォーマンスを向上させることができます。