Docs

  • WSOFT Docs
  • あみうは
    • あみうは
    • 新学期が始まりました!
    • 恋の相談
    • プチコン3号で作ったのは?
    • オススメの文庫
    • マクドナルド最高!
    • ios11β レビュー
    • あみうはの歌について
    • ついに自分のソフトウェアのホームページができました。
    • Windowsタブレットをリセットして起動しなくなった人のために
    • PCレスで YouTubeの曲を携帯mp3プレイヤーで聴く(iPhone)
    • 食べられないラズベリーパイを買いました。(1)
    • ラズベリーパイの下ごしらえ(2)
    • 小説始めます~
    • 女子がキュンとくる行動ベスト3!!
    • MacとWindowsについてあまり知られていない事
    • macでできる裏技
    • ドコモの格安スマホ「MONO」買っちゃいました☆いい所をいくつか
    • 『レビュー』iPhone6sを1年間使い続けて思ったこと
    • iPhoneの拡大鏡に関するバクを発見しました。
    • iPhoneで圧縮ファイルを作成したり解凍する方法
    • Obscura2が今だけ無料!使い方まとめ
    • Windowsタブレットがブルースクリーンになった時のメモ
    • お知らせ
      • あみうはからのお知らせ
      • あみうは ブログ始めました。
      • 予告 web ページの更新について 🇯🇵ver 2.0.0.jp Deep Space 🇺🇸ver 2.0.0 Deep Space
      • あみうはショップから大切なお知らせ
      • みんなの投稿サービス終了のお知らせ
      • あけましておめでとうございます
      • あみうはホームページをアップデートしました。
      • あみうは はついに1周年を迎えました!!1年間を振り返ります!
      • あみうはダウンロードの閉鎖について
      • 特定商取引法に基づく表記
      • あみうは系サイトの閉鎖について
  • ブログ
    • ブログ
    • WSOFT AdventWeek 2022のお知らせ
    • DiscordのBotは多重人格の夢を見るか?
    • WSOFTのアイコンを入手する
    • WSOFTDocs へようこそ
    • WSOFTの製品の一覧
    • wsoft.wsへのドメイン移行に関する情報
    • WSOFTのロゴ変更に関する情報
    • WSOFTのドキュメントの WSOFT Docs への移行に関する情報
    • Raspberry Pi初代やZeroでAliceScriptを実行する
    • Losetta0.9.16に更新した後のエラーを直す
    • WSOFT AdventWeekへようこそ
  • 共同作成ガイド
    • 概要
    • コントリビュータ行動規範
    • リンクの使い方
    • Markdownリファレンス
    • メタデータ
    • テキストの書式設定に関する指針
  • 法的資料
    • 法的資料
    • Alice-EULA-R
    • WSOFT-EULA
    • WSTube エンドユーザー利用規約
    • あみうは利用規約
    • WSOFTダウンロードセンター利用規約
    • 使用条件
  • 製品
    • 製品
    • PCMX
      • ブートローダーメニューの使い方
    • WSOFTアカウント
      • WSOFTアカウントの概要
      • WebからWSOFTアカウントにログインする
      • WindowsアプリからWSOFTアカウントにログインする
      • WSOFTオンライン手続きの概要
    • AliceScript
      • AliceScript
      • 謝辞
      • ダウンロード
      • Alice(キャラクター)
      • AliceScriptのツアー
      • Wikiの概要
      • APIブラウザー
        • APIブラウザー
        • Alice
          • delay
          • exit
          • function
          • import
          • include
          • lock
          • print
          • string_format
          • using
          • write
          • Environment
            • env_commandLine
            • env_commandLineArgs
            • env_set_exitCode
            • env_hasshutdownstarted
            • env_Is64BitOperatingSystem
            • env_Is64BitProcess
            • env_MachineName
            • env_NewLine
            • env_os_platform
            • env_os_version
          • Exception
            • Exception
            • ErrorCode
            • Message
            • ToString
          • Interpreter
            • Type
              • Type
              • Activate
              • Base
              • IsObject
              • Namespace
              • ToNativeProperty
              • ToString
          • Math
            • math_abs
            • math_acos
            • math_acosh
            • math_atan
            • math_atan2
            • math_atanh
            • math_bitdecrement
            • math_bitincrement
            • math_cbrt
            • math_celling
            • math_clamp
            • math_copysign
            • math_cos
            • math_cosh
            • math_e
            • math_exp
            • math_floor
            • math_fusedmultiplyadd
            • math_isprime
            • math_max
            • math_min
            • math_pi
            • math_pow
            • math_round
            • math_sin
            • math_sinh
            • math_sqrt
            • math_tan
            • math_tanh
            • math_tau
            • math_truncate
          • Net
            • web_download_file
            • web_download_file
            • web_download_text
            • web_htmldecode
            • web_htmlencode
            • web_send_ping
            • web_upload_data
            • web_upload_file
            • web_upload_text
            • web_urldecode
            • web_urlencode
          • Security
            • password_hash
            • password_hash_data
            • password_salt
            • password_verify
            • password_verify_data
          • Threading
            • signal
            • signal_wait
            • task_run
            • thread_id
            • thread_queue
        • Array
          • array
          • Add
          • AddRange
          • All
          • Any
          • Contains
          • Distinct
          • Except
          • First
          • Flatten
          • Foreach
          • IndexOf
          • Insert
          • InsertRange
          • Intersect
          • Last
          • Length
          • Merge
          • OfType
          • OrderBy
          • OrderByDescending
          • Remove
          • RemoveAt
          • RemoveRange
          • Reverse
          • Select
          • SequenceEqual
          • Size
          • Skip
          • SkipWhile
          • Sort
          • Take
          • TakeWhile
          • Union
          • Where
        • Bool
          • bool
        • Bytes
          • bytes
        • Delegate
          • delegate
          • BeginInvoke
          • Invoke
        • None
          • none
        • Number
          • number
        • String
          • string
          • CompareTo
          • Contains
          • EndsWith
          • Format
          • IndexOf
          • Insert
          • IsEmptyOrNull
          • IsEmptyOrWhite
          • IsNormalized
          • Join
          • LastIndexOf
          • Normalize
          • PadLeft
          • PadRight
          • Remove
          • RemoveAt
          • Replace
          • Split
          • StartsWith
          • SubString
          • ToLower
          • ToLowerInvariant
          • ToUpper
          • ToUpperInvariant
          • Trim
          • Trim
          • TrimStart
        • Variable
          • variable
          • Clone
          • Convert
          • DeepClone
          • Dispose
          • Equals
          • Properties
          • ToString
          • Type
      • 変更履歴
        • 新機能の一覧
        • AliceScript GoldenMasterの新機能
        • AliceScript 2.1の新機能
        • AliceScript 2.2の新機能
        • 互換性に影響を与える変更点
        • Nightyビルドの変更履歴
        • AliceScript RC2の新機能
        • Losetta
          • Losettaの更新履歴
          • Losetta 0.9.15
          • Losetta 0.9.16
          • Losetta 0.9.17
          • Losetta 0.9.18
          • Losetta 0.9.19
          • Losetta 0.9.20
      • 基本
        • 基本
        • AliceScript ADK
        • AlicePackage
        • AliceSister
        • AliceSister
        • AliceScriptのコーディング規約
        • イベント
        • 例外
        • 式
        • 前処理指令
        • AliceModel
        • 変数
      • Alice in Discord
        • Alice in Discordの紹介
        • Alice in Discordの基礎
        • Alice in Discord コミュニティガイドライン
        • Alice in Discordに関連するプロジェクトの一覧
      • 相互運用
        • 基本的なAliceScriptライブラリの開発
      • チュートリアル
        • チュートリアル
        • 初めてのAliceScript
        • パッケージのビルド
        • 数値型の計算誤差
        • 自分自身の関数を取得する
        • AlicePackageの関連付け
        • WSOFTScriptからの移行
        • AliceScriptで安全にパスワードを保存する
        • Losettaを更新する
    • ダウンロードセンター
      • WSOFTダウンロードセンターの概要
      • API
      • 検索
      • マネージャー
        • WSOFTダウンロードセンターマネージャーの概要
        • 更新履歴
          • WSOFTダウンロードセンター管理端末の更新情報
          • バージョン50
          • バージョン53
    • ほめて.ws
      • ほめて.wsの概要
    • アイコンメーカー
      • アイコンメーカーの概要
    • WSOFTScript
      • WSOFTScript
      • WSOFTScript 0.07 R3
      • WSOFTScript 0.07 R4
      • WSOFTScript 2020 LTSの情報
      • WSOFTScriptのライフサイクル
      • 使用されているLosettaのバージョンを確認する
      • WSOFTScript Pocket 2020 Beta
      • Shangri-la 0.07 R4
      • Shangri-la 2020 LTS
    • Unidet
      • Unidetへようこそ
    • WebSailing
      • WebSailing
      • 謝辞
      • APIブラウザー
      • 更新履歴
        • WebSailingNXの更新情報
        • NX 83
        • NX 104.1
        • NX 105
        • NX 105.1
        • NX 106
        • NX 106.1
        • NX 106.2
        • NX 107
        • NX 107.1
        • NX 107.2
        • NX 108
        • NX 109
        • NX 110
        • NX 110.1
        • NX 110.2
        • NX 110.3
        • NX 111
      • GL
        • WebSailingの仕様について(GL系のみ)
        • 更新履歴
          • WebSailingGLの更新情報
          • 1.5.01
          • 1.5.02
          • 1.5.03
          • 1.5.04
          • 1.5.05
          • 1.5.06
          • 2.0
          • 2.1
          • 3.0
          • 20Edition
        • ガイド
          • WebSailingGLプロンプトリファレンス
          • エラーコードE001
          • エラーコードE002
          • エラーコードE003
          • エラーコードU001
          • エラーコードU002
          • WebSailingGLで特定のUrlをブロックする方法
          • WebSailingを更新する方法
          • WebSailingヘルプ
          • WebSailingのコンポーネント変更についてのお知らせ
          • WebSailingプロンプトを極める!その1 API を極める
      • NX(レガシー)
        • WebSailingNX(レガシー)
        • 更新履歴
        • 開発者向け
          • サービス終了後も拡張機能を実行する方法
          • プラグインからSafeBrowsingAPIを呼び出す
          • プラグインガードの概要
        • ガイド
          • WebSailingNXターミナルリファレンス
          • PlusLibraryでライブラリエラー500が発生する場合
          • 認識エラーM300が発生する場合
          • WebSailingのキャッシュを削除する
          • 全画面表示を使う方法
          • WebSailingヘルプ
          • WIWで、NXツールを使う
          • おまけ
          • 捕捉されなかった例外が発生しましたと表示される場合
        • PlusLibrary
          • WSTubeMOD
          • 携帯電話モード
          • 郵便番号検索
      • チュートリアル
        • チュートリアル
        • 起動時に使用される設定を構成する
        • 設定が原因で起動できないと考えられる場合の対処方法
        • WebSailingのWindows7/8.1 Server2012/R2のサポート終了に関するお知らせ
        • AliceScriptを使ってWebSailingを制御する
    • WSNET
      • WSNET
      • WSNETの概要
      • ニュース
        • ニュース
        • WSNET/WAN DHCP機能提供開始
        • WSOFTダウンロードセンターマネージャー v42リリース
        • WSNETDocs提供開始
        • WSOFTダウンロードセンターマネージャーのWSOFTダウンロードセンターマネージャーDocsへの移行に関するお知らせ
      • チュートリアル
        • チュートリアル
        • SoftEtherを使用してWSWANに接続する
        • OpenVPNを使用してWSWANに接続する
        • 証明書のインストール
    • WSTodon
      • WSTodonの概要
      • よくある質問と回答
    • WSTube
      • WSTubeの紹介
      • クレジット
      • WSTube ユーザーガイド
      • お知らせ
        • WSTube NEXTの紹介
        • WSTube NEXT Procyonの紹介
        • WSTube NEXT October’2019の紹介
    • Lantana
  • 生存報告
    • 生存報告
    • 22年度1学期
      • 生存報告
      • イントロダクション
      • おやすみ。
      • 生存報告
      • つながり
      • 生存報告論
      • その一言で、
      • 信じるということ
      • またね。
    • 22年度2学期
      • やさしさ
      • 心の城
      • 勤労感謝の日
      • 自分のことを助けられるのは自分しかいない
      • 大丈夫は大丈夫じゃない
      • おしごと
      • 大きなものは無視できない
      • 石ころの唄
      • 表裏一体
目次
  • はじめに
  • AliceScriptを使用するための準備
  • 初めてのAliceScriptアプリケーションの作成
  • 関数とフラグ
  • 変数
  • 繰り返し構造の違い
  • 型の違い
    • Bool型
    • Type型

WSOFTScriptからの移行

  1. WSOFTDocs
  2. 製品
  3. AliceScript
  4. チュートリアル
  5. WSOFTScriptからの移行

この記事では、AliceScriptによる開発と従来のWSOFTScriptによる開発の類似点と相違点について説明します。


たい | 2021-12-25

Warning

WSOFTScriptバージョン2020LTS及び0.07R4以降、新たなバージョンのWSOFTScriptの開発は行われません。WSOFTは、2022年6月18日に、全てのWSOFTScriptおよびWSOFTScript.XならびにWSOFTScript.Pocketの各バージョンのサポートを終了します。

今後のWSOFTScriptのサポートについてはWSOFTScriptのライフサイクルを参照してください。

この記事では、AliceScriptによる開発に関心があるWSOFTScript開発者を対象に、WSOFTScriptとAliceScriptの開発の違いを解説しています。 WSOFTScriptについて詳しく知るにはWSOFTScriptのサイトを参照してください。

はじめに

AliceScriptが登場するまで、簡易的なコンソールアプリケーションとShangri-laによるデスクトップアプリケーションの開発は、WSOFTScriptを用いて行われて来ました。まず第一に、WSOFTScriptのメインライブラリは複雑で、サイズも大きなものでした。また、組み込みの例外処理やデバッグ支援機能はまだ未成熟で、信頼性の高いアプリケーションを開発するには脆弱でもありました。

AliceScriptが登場し、従来のWSOFTScriptはAliceScriptへと進化しました。AliceScriptのさまざまな改良により、ライブラリは小さくまとまり、組み込みの例外処理やデバッグ支援機能も実装され、信頼性の高いアプリケーションを開発することができるようになりました。しかしその一方で、WSOFTScriptに実装されていた一部の機能は実装されていなかったり、多くの組み込み機能を使用するためにAlice.Runtime.dllが必要になるなど、設計思想に起因するいくつかの根本的な違いも残っています。

この記事では、まず最初にAliceScriptで開発を始めるために必要な作業を確認します。(すでにAliceScriptを使用している場合はこのセクションを飛ばしても構いません)。次に、AliceScriptを使って簡単なコンソールアプリケーションを例として作成し、WSOFTScriptとAliceScriptの機能の類似点や相違点を実際に見てみます。

AliceScriptを使用するための準備

AliceScriptを使用したアプリケーションの開発についての説明の前に、まず、Losettaを実行できるコンピュータを用意する必要があります。Losettaを実行するために追加で必要なランタイムなどはありません。Losettaのランタイムは自己完結型で機能します。

自分のコンピュータでAliceScriptを実行する場合は、AliceScriptをコンピュータにインストールする必要があります。AliceScriptをインストールする方法については初めてのAliceScriptを参照してください。

初めてのAliceScriptアプリケーションの作成

AliceScriptアプリケーションは、WSOFTScriptアプリケーションと同じように、任意のテキストエディタで作成できます。

それでは早速、簡単なコンソールアプリケーションをAliceScriptで作成して、AliceScriptアプリケーションの作成方法のWSOFTScriptとの違いについて実際に見てみましょう。任意のテキストエディタで次のコードを入力してください。

main.alice
print("Hello,World!");

ファイルを保存したら、次のコマンドを入力して実行します。

コマンドライン
alice {ファイル名}

Hello,World!と表示されれば成功です。

ここまでの作業を通じて、AliceScriptとWSOFTScriptとの大きな違いは見当たりません。これは、print関数がWSOFTScriptと同じようにAliceScriptに組み込まれているからです。しかし、XML操作や正規表現など、WSOFTScriptには組みこまれていたがAliceScriptには組み込まれていない関数を使用する場合に注意が必要です。

AliceScriptのライブラリには、AliceScript.dllに加えて、Alice.Runitime.dllがあります。これは、AliceScript.dllと同じディレクトリに配置されているときにデフォルトで読み込まれる、AliceScriptのライブラリ群です。ここに、ファイル操作などのよく使う関数やクラスが実装されています。Aliceに所属しない名前空間の関数やクラスを使用するためには、using指令を使用して事前に使用することを宣言する必要があります。

main.alice
using {読み込みたい名前空間の名前};

次の例では、まずWSOFTScriptを使用してHello,Worldをテキストファイルに書き込みます。

write_helloworkd.wss
file_write_text("test.txt","Hello,World");

このコードと同じ動作をするAliceScriptのコードは以下の通りです。

write_helloworkd.alice
using Alice.IO;
file_write_text("test.txt","Hello,World");

注目すべき唯一の違いは、関数の呼出前にusing関数が呼び出されていることです。using関数は特別な関数で、指定した名前空間から関数群を読み込むことを事前に宣言します。これが、WSOFTScriptでも関数表現import("WSOFTScript.Shangrila");や、フラグ表現[Import:"WSOFTScript.Shangrila"]と決定的に異なる点は、usingがファイルを読み込むのではなく、すでに読み込まれたライブラリから名前空間を使用可能なように読み込む点です。AliceScriptでも、ファイルを読み込む際にはimport("ファイル名");が必要です。

関数とフラグ

ところで、AliceScriptにはWSOFTScriptに実装されているようなフラグ機能はありません。インタプリタに事前に報告すべき情報がある場合は、前処理指令を使用します。例えば、次のフラグの機能を、AliceScriptで表現することを考えます。

load.wss
print("Hello,World!");
[Print:"Executing..."]
// 出力例 : Executing...
//          Hello,World!

AliceScriptには対応する指令として、#print指令があります。具体的には次のコードは、WSOFTScriptの上のコードと等価になります。

load.alice
print("Hello,World!");
#print Executing...

また、WSOFTScriptでは.NETライブラリを読み込む際に[DllImport]を使用していました。しかし、AliceScriptではそれぞれのスクリプトでimport関数を呼び出します。

disable_output.alice
import("ファイル名");

さらに、AliceScriptの関数には、オーバーライドという概念が導入されています。この概念によって原則同じ関数を複数回定義することはできません。同じ関数を複数回定義されることが予想される場合は事前にvirtual属性を付与することを検討してください。また、属性の付与された関数を上書きする場合には、override属性を付与します。次に例を示します。

override_sample.alice
function virtual Func()
    {
        print("Hello");
    }
Func();//出力:Hello
function override Func()
    {
        print("World");
    }
Func();//出力:World

また、AliceScriptの関数は可変長個の引数を受け取ることができる、paramsパラメータをサポートしています。これは、その関数に幾つでも引数を渡すことが可能であることを表しています。次に例を示します。

override_sample.alice
function Func(parms args)
    {
        print(args);
    }
Func("A","B","C");//出力:["A","B","C"]

この時、argsは自動的に配列型になります。引数は省略することもできます。 関数について詳しくは、関数も参照してください。

変数

変数に関する重要な変更についても注意が必要です。まず、WSOFTScriptとは違い、AliceScriptでは、未定義の変数を宣言するときにvarキーワードが必須になりました。また、一度宣言された変数にvarキーワードを使うことはできません。

スコープは、その変数が有効な範囲です。WSOFTScriptでは、すべての変数はグローバル変数として定義されていました。AliceScriptでは、通常の変数(これをローカル変数と呼ぶことにします)は、そのスコープとそれ以下のスコープの範囲に限られます。AliceScriptでグローバル変数を宣言するには、varキーワードの後にpublic修飾子をつけます。次に例を示します。

define_variable.alice
public var abc = "ABC";

定数は、AliceScriptで導入された新しい機能です。定数は、一度のみ宣言でき、一度定義するとそれに再度代入することはできません。宣言するにはvarキーワードの代わりにconstキーワードを使用します。定数にもやはりローカル定数とグローバル定数が存在します。次の例では、ローカル定数lconstとgconstをそれぞれ定義します。

define_const.alice
const lconst a = 1;
public const gconst b = 2;

変数について詳しく知るには、変数を参照してください。

繰り返し構造の違い

AliceScriptでは、WSOFTScriptとは異なり完全なfor文とforeach文の分離が図られました。AliceScriptでは配列から一つ一つ取り出して実行するためにfor文を使用することはできません。また、foreach(item as array)や、foreach(item : array)の形は使用できなくなりました。foreach(item in array)を使用することを検討してください。また、array.Foreach(delegate(item));の形も使用できます。次の例を参照してください。

sample_loop.alice
var ary = ["a","b","c"];
ary.Foreach(item=>
 {
    print(item);
 });
 //出力:a
 //    b
 //    c

さらに、Alice2.2からは高度な配列操作が導入されました。例えば、重複している可能性のある数値に変換できる文字列と数字を含む2つの配列を一つにまとめ、なおかつ重複を除くには以下のような複雑なコードが必要でした。

sample_array.wss
import("WSOFTScript.IO");

var ary1 = [0,1,"2",4,2];
var ary2 = [5,"3",5,"6"];

// ひとつにまとまった配列を作成
var ary = list_merge(ary1,ary2);
// 結果となる新しい配列を作成する
var result = [];

// ひとつづつ配列を読み出す
foreach(item in ary)
{
    var true_item = item;
    if(item.type=="STRING")
    {
        // 文字列の場合、number型への変換が必要
        // そのため一度ファイルに書き込んでそれを実行し結果とする。
        file_write_text("tmp","return "+item+";");
        true_item = include("tmp");
    }
    // 結果の配列にない要素であれば追加する
    if(!result.Contains(true_item))
    {
        result.Add(true_item);
    }
}

// 結果を出力
print(result);
// 出力例 : [0,1,2,3,4,5,6]

これをAlice2.2を使って書き直すと以下のようになります。

AliceScript
var ary1 = [0,1,"2",4,2];
var ary2 = [5,"3",5,"6"];

var result = ary1.Select(item=>item as number).Union(ary2.Select(item=>item as number));

ちなみに、分解して解説すると次のようになります。

AliceScript
var ary1 = [0,1,"2",4,2];
var ary2 = [5,"3",5,"6"];

// それぞれの配列のすべての要素を数値型に変換
var num_ary1 = ary1.Select(item=>item as number);
var num_ary2 = ary2.Select(item=>item as number);

// 二つの配列の和集合を求める(重複は含まれない)
var result = num_ary1.Union(num_ary2);

ここでは、array.Selectメソッドとarray.Unionメソッドを使用しました。もっと詳しく知るにはそれぞれの説明を参照してください。

AliceScriptでは終了条件までループするuntil文は廃止されました。しかし、while(!bool)で代用することができます。

型の違い

AliceScriptではWSOFTScriptからいくつかの型が追加または変更されました。次にそれらの型を示します。

Bool型

WSOFTScriptではif文やwhile文のように条件をとるステートメントには、number型の0を偽とし、非0を真としていました。trueやfalseキーワードはそれぞれ1や0を返していました。 AliceScriptでは、真または偽のいずれかを表現することのできるbool型が導入され、bool型を厳格に求めるような場面が頻繁にあります。これは、比較式が必要な場面で代入式も使用できてしまい、混乱を招く恐れがあったためです。 AliceScriptでは、trueやfalseキーワードはそれぞれbool型のtrueやfalseを返します。次に例を示します。

sample_condition.alice
var condition = (1 == 1);
print(condition.type);//出力例:BOOLEAN

Type型

AliceScriptには変数の型を表現するtype型が存在します。全ての変数はTypeプロパティを実装していて、その変数の型を表す値を取得することができます。これはWSOFTScriptのTypeプロパティに似ています。しかし、WSOFTScriptのTypeプロパティはtype型ではなくstring型でその値を表す文字列表現を返します。string、number、boolキーワードなどはそれぞれの型の値を表す定数です。また、型変換演算子asを使用することでその型に変数を明示的に変換することができます。次に例を示します。

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

検索
No results found