ここでは、VCSSLの標準ライブラリの中から、よく使うものについて説明します。
なお、GUI、Graphics2D、Graphics3D ライブラリについては、規模が大きいためここでは扱いません。別途、以下のガイドをご参照ください:
標準ライブラリとは、あらかじめ用意されていて、標準で使用できるライブラリの事です。
通常、ライブラリを使用するためには、 ユーザーがライブラリを入手し、実行モジュールと同じフォ ルダ(ディレクトリ)内や、 処理系指定のフォルダ内に配置するなどの準備を行う必要があります。 し かし標準ライブラリでは、このような準備は不要で、いつでもすぐに使用できます。
標準ライブラリの役割は、現実的なプログラムを開発する上で、 よく必要とされるような、基本的な機能を提供する事です。
そのような機能を、全てのユーザーが一から自力で作成しなければいけないのは不便ですし、 他人の書いたプログラムを読む際にも、何から何まで人によって全く異なるというのは読み辛くなってしまいます。 従って、そういった機能は標準ライブラリとしてあらかじめ用意されているわけです。
また、グラフィクスや GUI(グラフィカルユーザーインターフェイス)、 オペレーティングシステムや処理系側で処理する必要があるような機能も、 標準ライブラリとして提供されます。
実はこれまでのプログラムでも、標準ライブラリの機能を使用していました。 それは、画面にメセ ージを表示する print 関数などのシステム関数です。 システム関数は、「 System 」という標準ライブラリによって提供されています。 試しに以下のように記述し、実行してみてください:
import System;
System.print("Hello, World !");
ImportSystem.vcssl
これを実行すると、VCSSLコンソールに 「 Hello, World ! 」 と表示されます。 この通り、print 関数がSystemライブラリによって提供されている事が分かります。
VCSSLでは、全てのモジュール を読み込む前に、System ライブラリが自動で読み込まれる決まりになっています。 そのため、 System ライブラリをインポートしなくても、print 関数などを呼び出す事ができたわけです。
インポートすらも不要で使用できるのは、標準ライブラリの中でも System だけです。 System ライブラリは、あまりに基本的な機能を提供し、ほとんどの全ての場面においてインポートする必要が生じるため、 特例的にインポートしなくても使用できるようになっているのです。
System 以外の標準ライブラリは、普通のライブラリと同様、インポートしてから使用する必要があります。 これは、使用するライブラリが多いほど、解釈すべき内容が増え、起動に時間がかかって しまうためです。 また、関数名の競合などの面倒を避けるためでもあります。
ライブラリは基本的に、 そのモジュールで使用するものだけをインポートするのが、実行時でも開発時でも有利です。
VCSSL の各標準ライブラリに関する詳細情報は、下記ページにて参照できます:
主な標準ライブラリの一覧は以下の通りです(他にも存在します)。
これらの中で、(System 以外で)恐らく最も頻繁に使用するのは Math, Text, File, Time ライブラリでしょう。 以下では、実際にそれらを扱ってみます。
Math は、sin や cos など、基本的な数学関数・定数を提供するライブラリです。
実際に使用してみましょう。以下のように記述し、実行してみてください:
import Math; // 標準ライブラリ「 Math 」をインポート
float value = sin(PI / 2.0) ; // sin(π/2) つまり sin(90°) = 1
print(value);
MathSample.vcssl
上のプログラムを実行すると、sin(π/2) の値である
が表示されます。 必要に応じて、 値を数百桁以上の精度で求めるvarfloat 型の関数も使用できます。
Text は、文字列の検索や置き換えなど、基本的なテキスト操作機能を提供するライブラリです。
実際に使用してみましょう。以下のように記述し、実行してみてください:
import Text; // 標準ライブラリ「 Text 」をインポート
// 文字数をカウント
int n = countText("AAA/BBB/CCC");
println(n); // 11 と表示される
// 2番目から(5-1)番目までで文字列を切り取る
string crop = cropText("AAA/BBB/CCC", 2, 5);
println(crop); //「A/B」と表示される
// 文字列「a/a」が初めて出現する位置を取得
int first = findText("aaa/aaa/aaa", "a/a", FIRST);
println(first); // 2 と表示される(先頭から 0,1,2…とカウント)
// 文字列「a/a」が最後に出現する位置を取得
int last = findText("aaa/aaa/aaa", "a/a", LAST) ;
println(last); // 6 と表示される(先頭から 0,1,2…とカウント)
// 文字列「a/a」が出現する位置を全て取得
int all[] = findText("aaa/aaa/aaa", "a/a", ALL) ;
println(all); // 「 2 6 」と表示される
// 正規表現「./.」に一致する位置を全て取得
int patternAll[] = findText("AAA/BBB/CCC", "./.", ALL_PATTERN);
println(patternAll); // 「 2 6 」と表示される
// 正規表現「./.」に一致する部分文字列を全て取得
string ext[] = extractText("AAA/BBB/CCC", "./.", ALL_PATTERN);
println(ext); // 「 A/B B/C 」と表示される
//「/」を全て「@」に置き換え
string repl = replaceText("aaa/aaa/aaa", "a/a", "@", ALL);
println(repl); // aa@a@aa と表示される
TextSample.vcssl
それぞれの処理の結果は、コード内の println 関数横のコメントにある通りです。 このように、文字列に対して基本的な操作を行う事ができます。
File は、ファイルパスを取得したり、ファイル一覧を取得したりするなど、ファイルに関する情報を 提供するライブラリです。
実際に使用してみましょう。以下のように記述し、実行してみてください:
import File; // 標準ライブラリ「 File 」をインポート
// 相対パスの基準(実行モジュールの場所)を取得
string base = getFilePath(".");
println(base); // 実行モジュールのあるフォルダ(ディレクトリ)の絶対パスが表示される
// 親フォルダを取得
string parent = getFilePath("..");
println(parent); // 実行モジュールフォルダの親フォルダの絶対パスが表示される
// ファイルパスを取得
string file = getFilePath("test.txt");
println(file); // 実行モジュールと同じフォルダにある test.txt の絶対パスが表示される
// 相対パスを絶対パスに変換
string rel = getFilePath("./bbb/test.txt", "../aaa");
println(rel); // 「 実行モジュールフォルダの親フォルダの下にある aaa フォルダ 」から見て、「 bbb フォルダの中にある test.text 」の絶対パスが表示される
FileSample.vcssl
こちらも、それぞれの処理の結果は、コード内の println 関数横のコメントにある通りです。
この通り、ファイルの場所を取得するなど、ファイルの基本的な情報を扱う事ができます。 なお、ファイルの指定では、「 / 」をフォルダ(ディレクトリ)の区切りとして使用できます。 また、「 . 」を相対パス基準フォルダ、「 .. 」を親フォルダとして使用できます。
Time は、時間や日付などに関する機能を提供するライブラリです。
以下は時間を計測する例です:
import Time; // 標準ライブラリ「 Time 」をインポート
// この時点の時間を取得
int start = time();
// メセージを表示している間は実行が止まる
alert("時間を計っています...");
// この時点の時間を取得
int end = time();
// 所要時間(end-start)を秒単位に変換
int sec = second(end - start);
// 所要時間を表示
print(sec);
TimeSample1.vcssl
上のプログラムを実行すると、「 時間を計っています... 」というメセージが表示されます。 メセ ージを閉じた時点で、閉じるまでに要した時間が、VCSSL コンソールに秒単位で表示されます。
上の例で使用した time 関数は、プログラムの実行が開始されてからの経過時間を返す関数です。 time 関数が返す時間の単位は、通常はミリ秒(1/1000 秒)ですが、厳密には処理系に依存します。 そのため、得られた結果を任意の単位に変換するための関数も提供されており、 上で用いた second 関数もその一つです。 単位の変換には、millisecond(ミリ秒単位)、second(秒単位)、 minute(分単位)、hour(時間単位)などがあります。
なお、second 関数や minute 関数、hour 関数などは、 引数を省略すると、時計における時刻を 返す機能もあります。 これを用いて、何時何分何秒かを取得する事ができます。 さらに、day で日付 を、month で月を、year で年を取得する事ができます:
import Time; // 標準ライブラリ「 Time 」をインポート
// 年/月/日を表示
println("日付=" + year() + "/" + month() + "/" + day());
// 時間:分:秒を表示
println("時刻=" + hour() + ":" + minute() + ":" + second());
TimeSample2.vcssl
上のプログラムを実行すると、その時点の日付と時刻が表示されます。
なお、month 関は、0 〜 11 では無く、 1 〜 12 までを返すと決まっています。つまり1月であれば 0 では無く 1 を返します。 Day 関数も同様で、(月の始めの)1日であれば 0 ではなく 1 を返します。 他言語では 0 から数えるものも存在するため、混同しないように注意が必要です。