「WSOFTScriptからの移行」の版間の差分
編集の要約なし |
編集の要約なし |
||
78行目: | 78行目: | ||
// c | // c | ||
また、AliceScriptでは終了条件までループする<code>until</code>文は廃止されました。しかし、<code>while(!bool)</code>で代用することができます。 | また、AliceScriptでは終了条件までループする<code>until</code>文は廃止されました。しかし、<code>while(!bool)</code>で代用することができます。 | ||
=Bool型= | |||
AliceScriptには<code>true</code>か<code>false</code>のいずれかを表現する<code>bool</code>型が存在し、<code>if</code>文や<code>while</code>文のように条件をとるステートメントには、<code>bool</code>型の式を与える必要があります。 | AliceScriptには<code>true</code>か<code>false</code>のいずれかを表現する<code>bool</code>型が存在し、<code>if</code>文や<code>while</code>文のように条件をとるステートメントには、<code>bool</code>型の式を与える必要があります。 | ||
WSOFTScriptでは、<code>bool</code>型がなく、<code>number</code>型の1を真とし、非1を偽としていました。<code>true</code>や<code>false</code>キーワードはそれぞれ1や0を返していました。 | WSOFTScriptでは、<code>bool</code>型がなく、<code>number</code>型の1を真とし、非1を偽としていました。<code>true</code>や<code>false</code>キーワードはそれぞれ1や0を返していました。 | ||
AliceScriptでは、<code>true</code>や<code>false</code>キーワードはそれぞれ<code>bool</code>型の<code>true</code>や<code>false</code> | AliceScriptでは、<code>true</code>や<code>false</code>キーワードはそれぞれ<code>bool</code>型の<code>true</code>や<code>false</code>を返します。次に例を示します。 | ||
var condition = (1 == 1); | |||
print(condition.type);//出力例:BOOLEAN | |||
=Type型= | |||
AliceScriptには変数の型を表現する<code>type</code>型が存在します。全ての変数は<code>Type</code>プロパティを実装していて、その変数の型を表す値を取得することができます。 |
2021年11月25日 (木) 01:03時点における版
AliceScriptによる開発と従来のWSOFTScriptによる開発の類似点と相違点について説明します。 この記事では、AliceScriptによる開発に関心があるWSOFTScript開発者を対象に、WSOFTScriptとAliceScriptの開発の違いを解説しています。 WSOFTScriptについて詳しく知るにはWSOFTScriptのページを参照してください。[[1]]
はじめに
AliceScriptが登場するまで、簡易的なコンソールアプリケーションとShangri-laによるデスクトップアプリケーションの開発は、WSOFTScriptを用いて行われて来ました。まず第一に、WSOFTScriptのメインライブラリは複雑で、サイズも大きなものでした。また、組み込みの例外処理やデバッグ支援機能はまだ未成熟で、信頼性の高いアプリケーションを開発するには脆弱でもありました。
AliceScriptが登場し、従来のWSOFTScriptはAliceScriptへと進化しました。AliceScriptのさまざまな改良により、ライブラリは小さくまとまり、組み込みの例外処理やデバッグ支援機能も実装され、信頼性の高いアプリケーションを開発することができるようになりました。しかしその一方で、WSOFTScriptに実装されていた一部の機能は実装されていなかったり、多くの組み込み機能を使用するためにAlice.Runtime.dllが必要になるなど、設計思想に起因するいくつかの根本的な違いも残っています。
この記事では、まず最初にAliceScriptで開発を始めるために必要な作業を確認します。(すでにAliceScriptを使用している場合はこのセクションを飛ばしても構いません)。次に、AliceScriptを使って簡単なコンソールアプリケーションを例として作成し、WSOFTScriptとAliceScriptの機能の類似点や相違点を実際に見てみます。
AliceScriptを使用するための準備
AliceScriptを使用したアプリケーションの開発についての説明の前に、まず、AliceScriptを実行できるコンピュータを用意する必要があります。.NETCore3.1がインストールされているコンピュータが必要です。そのようなコンピュータを用意できない場合は、WSOFTScriptと同じ要件で操作するAliceSisterを使用する必要があります。AliceSisterはAliceScriptとほぼ同じ動作をするAliceScriptの別の実装です。
自分のコンピュータでAliceScriptを実行する場合は、次のソフトウェアをインストールする必要があります。
- .NETCore v3.1以上
- AliceScript
.NETCoreのインストールについては、Microsoftの公式ガイドを参照してください。
- Windowsに.NETをインストールする[[2]]
.NETCoreに加えて、AliceScriptもコンピュータにインストールする必要があります。するには、AliceScriptのダウンロードを参照してください。
初めてのAliceScriptアプリケーションの作成
AliceScriptアプリケーションは、WSOFTScriptアプリケーションと同じように、任意のテキストエディタで作成できます。
それでは早速、簡単なコンソールアプリケーションをAliceScriptで作成して、AliceScriptアプリケーションの作成方法のWSOFTScriptとの違いについて実際に見てみましょう。任意のテキストエディタで次のコードを入力してください。
print(“Hello,World!”);
ファイルを保存したら、次のコマンドを入力して実行します。
alice -r {ファイル名}
Hello,World!と表示されれば成功です。
ここまでの作業を通じて、AliceScriptとWSOFTScriptとの大きな違いは見当たりません。これは、Print関数がWSOFTScriptと同じようにAliceScriptに組み込まれているからです。しかし、ファイル操作や正規表現など、WSOFTScriptには組みこまれていたがAliceScriptには組み込まれていない関数を使用する場合に注意が必要です。
AliceScriptのライブラリには、AliceScript.dllに加えて、Alice.Runitime.dllがあります。これは、AliceScript.dllと同じディレクトリに配置されているときにデフォルトで読み込まれる、AliceScriptのライブラリ群です。ここに、ファイル操作などのよく使う関数やクラスが実装されています。Alice.Runtimeに実装されている関数のうち、名前空間がAlice(名前空間)でないものは関数の使用前に次のようなコードが必要です。
import “{読み込みたい名前空間の名前}”;
次の例では、まずWSOFTScriptを使用してHello,Worldをテキストファイルに書き込みます。
file_write_text(“test.txt”,”Hello,World”);
このコードと同じ動作をするAliceScriptのコードは以下の通りです。
import “Alice.IO”; file_write_text(“test.txt”,”Hello,World”);
注目すべき唯一の違いは、関数の呼出前にImport関数が呼び出されていることです。import
は、Alice.IO
名前空間からファイルやディレクトリの入出力についての関数群を読み込むことを事前に宣言します。これが、WSOFTScriptでも関数表現import(“WSOFTScript.Shangrila”);
や、フラグ表現[Import:”WSOFTScript.Shangrila”]
と決定的に異なる点は、import
がファイルを読み込むのではなく、すでに読み込まれたライブラリから名前空間を使用可能なように読み込む点です。
関数とフラグ
ところで、AliceScriptにはWSOFTScriptに実装されているようなフラグ機能はありません。インタプリタに事前に報告すべき情報がある場合は、Alice.Interpreter
名前空間にある関数を呼び出して代用します。例えば、次のフラグの機能を、AliceScriptで表現することを考えます。
[DllImport:”Library.dll”]
このフラグは、AliceScriptで特定の.NETライブラリを読み込むフラグです。これをAliceScriptで表現するには次のコードに置き換えます。
Dllimport(“Library.dll”);
また、標準出力から発生する出力を抑制したいとき、WSOFTScriptではCanPrintフラグを使用していました。これと同じように動作するコードをAliceScriptで表現すると、次のようになります。
import “Alice.Interpreter”; Interpreter_AllowOutput(false);
さらに、AliceScriptの関数には、オーバーライドという概念が導入されています。この概念によって原則同じ関数を複数回定義することはできません。同じ関数を複数回定義されることが予想される場合は事前にvirtual
属性を付与することを検討してください。また、属性の付与された関数を上書きする場合には、override
属性を付与します。次に例を示します。
function virtual Func() { print(“Hello”); } Func();//出力:Hello function override Func() { print(“World”); } Func();//出力:World
また、AliceScriptの関数は可変長個の引数を受け取ることができる、parms
パラメータをサポートしています。これは、その関数に幾つでも引数を渡すことが可能であることを表しています。次に例を示します。
function Func(parms args) { print(args); } Func(“A”,”B”,”C”);//出力:[“A”,”B”,”C”]
この時、args
は自動的に配列型になります。引数は省略することもできます。
関数について詳しくは、関数も参照してください。
繰り返し構造の違い
AliceScriptでは、WSOFTScriptとは異なり完全なfor
文とforeach
文の分離が図られました。AliceScriptでは配列から一つ一つ取り出して実行するためにfor
文を使用することはできません。また、foreach(item as array)
や、foreach(item : array)
の形は使用できなくなりました。foreach(item in array)
を使用することを検討してください。また、array.Foreach(delegate(item));
の形も使用できます。次の例を参照してください。
var ary = [“a”,”b”,”c”]; ary.Foreach(_(item) { print(item); }); //出力:a // b // c
また、AliceScriptでは終了条件までループするuntil
文は廃止されました。しかし、while(!bool)
で代用することができます。
Bool型
AliceScriptにはtrue
かfalse
のいずれかを表現するbool
型が存在し、if
文やwhile
文のように条件をとるステートメントには、bool
型の式を与える必要があります。
WSOFTScriptでは、bool
型がなく、number
型の1を真とし、非1を偽としていました。true
やfalse
キーワードはそれぞれ1や0を返していました。
AliceScriptでは、true
やfalse
キーワードはそれぞれbool
型のtrue
やfalse
を返します。次に例を示します。
var condition = (1 == 1); print(condition.type);//出力例:BOOLEAN
Type型
AliceScriptには変数の型を表現するtype
型が存在します。全ての変数はType
プロパティを実装していて、その変数の型を表す値を取得することができます。