そら豆スクリプト:文法と書き方
Category: Programming
※「catch.jp-wiki」から移動したページです。
現在のそら豆スクリプト(SoraMame.ps.js)は、コードをProcessing.jsに変換して実行します。
コマンドリファレンスは、こちらにあります。
主な機能
- Webブラウザで動作するビジュアルデザイン用のプログラミング言語
- 覚えやすい簡単な文法
- オブジェクト指向をサポート
- WebGLによる3D表示
文字の種類
そら豆スクリプトでは、コードを書くための文字を次のように分類しています。
助詞
以下の文字は、助詞として特別扱いします。
と、に、を、の、で
は
とくに、「は」はデータ型の宣言に使います。
これらの文字は、変数名や関数名に使用できません。
読点
「、」(全角-読点)は、オブジェクトのメソッド呼び出しに使います。
数字
10進表記
124 , 3.14 , -2.3
- 半角数字
- 全角数字
- ".""."で小数点以下を表現します
16進表記
カラー型のデータなどを16進表記で記述できます。
#FF00 , #2234
- 先頭は「#」
- 数値は、0-9, a-f, A-F
- すべて半角
記号
次の記号は、そら豆スクリプトで特別な役割を持っています。
= + - * / % ^ ( ) [ ] { } . , : @ ! & | < > #
= + - × * ÷ / % ^( ) [ ] { } . 。 : @ ! & | < > 「」『』 #
これ以外の記号は、ふつうの文字として自由に利用できます。
「、」(全角-読点)は、特別な記号として扱っています。
文字列
文字列(もじれつ)とは、プログラム中の文字によるデータのことです。
文字列は、次の2つのどちらかのカッコのペアで、はさみます。
- 「 ~ 」
- 『 ~ 』
基本的なこと
文末
文末は、次のどちらかで判断します。
- 改行
- 。(句点)
言葉と言葉の区切り
日本語では、ほとんどの場合、言葉と言葉の間に空白をおきません。
そのために、プログラムとして言葉の判別が難しくなっています。
そこで、そら豆スクリプトでは、文中の言葉の区切りを、
「助詞」、「数字」、「記号」、「文字列」で判別します。
変数名と命令語名(関数・メソッド)に使える文字
全角文字と半角文字のほとんど。
ただし、以下をのぞきます
- 助詞
- 記号
- もともと登録済みの変数名と関数名
- 数字(1文字目のみ)
とくに、最初の1文字に数字は使えません。
文法1 - データ
変数の名前
変数は、名前の前に'@'を記述します。
@マウスX
@幅
@点数
@のあとには、日本語や英語をそのまま使えます。2文字目以降には数字も使えます。
定数とキーワード
値が変化しないデータは、定数にします。また、システム上で指定が必要な単語や定数は、キーワードとなります。
定数とキーワードは、名前の前に'$'を記述します。
$P3D
$PI
@のあとには、日本語や英語をそのまま使えます。2文字目以降には数字も使えます。
データ型
変数名のあとには、次のように助詞(は)で、データ型を宣言できます。
@点数は整数型
@メッセージは文字型
変数名のデータ型を指定した直後に、初期値を代入することもできます。
@点数は整数型 = 0
@メッセージは文字型 =「あ」
基本データ型
次のデータ型は、基本データ型としてデータ型の宣言なしで利用できます。
整数型
実数型
文字型
正否型
カラー型
組み込みデータ型
「組み込みデータ型」とは、より高度な機能をもったデータ型で、基本データ型と少し使い方が違います。
「組み込みデータ型」は、ひとつのデータ型で複数の値をまとめたり、値に対する特別な機能や操作(メソッド)を備えています(オブジェクト指向の組み込みオブジェクトに相当します)。
このようなデータ型を使うには、変数名のあとには、次のように助詞(は)で、データ型を宣言します。 ここは、先ほどと同じ。
@vはPベクトル型
変数名に、初期値を入力するには、次のように「新しい」命令を使います。
@vはPベクトル型
@v = 新しい{x:10, y:20, z:40}のPベクトル型
これは、次のようにひとつにまとめることもできます。
@vはPベクトル型 = 新しい{x:10, y:20, z:40}のPベクトル型
個々の値は、次のようにして利用できます。
@vの@x = 100
また、データ型に対する特別な操作は、次のように呼び出します。
@v、{x:100, y:200, z:400}に設定する
配列
配列は、複数のデータを番号をつけて扱う機能です。
次のように、記述します。
@プレイヤー[1] = 7
@プレイヤー[2] = 34
@プレイヤー[3] = 240
配列を使うには、次のように宣言します。
@(配列名)は(データ型)[]
あらかじめ配列の個数を宣言したい場合には、次のように書きます。
@(配列名)は(データ型)[] = 新しい(データ型)[(個数)]
ちょっと特別な書き方ですが、先ほどの組み込みデータ型や、あとで出てくる独自データ型と同じスタイルになっています。
文法2 - 式
とりあえず、数式、論理式(条件式)が使えます。
詳しくは、コマンドリファレンスの「算術記号」「比較記号」「論理演算記号」を参照ください。
文法3 - 構文
コメント文
先頭また文中に、「//」を書くと、以降はコメント文になり、プログラムの実行時に無視されます。
//これ以降は、コメント文
ブロックコメントは、準備中。
実行文
実行文は、引数の並びに続いて、命令語をおきます。
例
{幅:250, 高さ:250}のサイズ
{x:マウスX, y:マウスY}に{幅:10, 高さ:10}のマル
この例で命令語にあたるのは、「サイズ」「マル」です。
引数
引数は、「引数名」と「値」の2つを組み合わせ、それを「{}」で囲んで、助詞でつなぎます。
- {引数名:値,・・・}
- 次の4つの助詞(と、に、を、の、で)
引数は、記述した順番に(実は)依存します。
引数名と助詞の種類・順番は、無視されます。
さきほどの例で、引数にあたるのは
{幅:250, 高さ:250}の
{x:マウスX, y:マウスY}に{幅:10, 高さ:10}の
です。
代入文
次のように記述して、代入先の変数に、代入元の値を入れます。
(代入先) = (代入元)
@点数 = 0
代入元には式(数式、論理式)を利用できます。
@点数 = 3 + 2
データ型のところで説明したように、データ型の宣言に続いて、初期値を代入することもできます。
@点数は整数型 = 0
@メッセージは文字型 =「あ」
組み込みデータ型のところで説明したように、「新しい」命令とセットで使うこともできます。
@vはPベクトル型 = 新しい{x:10, y:20, z:40}のPベクトル型
また、代入演算子も使えます。
@点数 += 10
詳しくは、コマンドリファレンスの「代入記号」を参照ください。
もし文
次の2つの書き方があります。
もし{条件:条件式}ならば
{//ここを実行}
もし{条件:条件式}ならば
{//ここを実行}
ちがえば
{//ここを実行}
条件式については、コマンドリファレンスの「比較記号」「論理演算記号」を参照ください。
くり返し文
指定した値から指定した条件まで、処理をくり返します。
次のように書きます。
{開始:@iは整数型 = 0 , 条件:@i < 100 ,変化:@i += 1}のくりかえし{
{x:@i, y:@i}に{幅:30, 高さ:30}のマル
}
あいだ文
特定の条件の間、処理をくり返します。
次のように書きます。
@yは整数型 = 0
{条件:@y < @高さ}のあいだ{
{x:50, y:@y}に{幅:30, 高さ:30}のマル
@y += 20
}
自分なりの命令語を追加する
自分なりの命令語を定義しておくと、ほかの場所から自由に呼び出すことができます。
特定の処理をまとめておいたり、プログラムを分かりやすくするために使います。
命令語の定義
命令語を定義すると、関数やメソッドとして利用できます。
また、「初期設定する」や「くり返し描画する」のように、あらかじめ決められた命令語をプログラム中で定義すると、プログラムの実行環境から呼び出される場合もあります。
命令語の定義には、次の4種類の書き方があります。
---(命令語名){//ここを実行}
---(命令語名)は(戻り値データ型){//ここを実行}
---{引数名1:値1, ...}(助詞){引数名2:値2, ...}(助詞)(命令語名){//ここを実行}
---{引数名1:値1, ...}(助詞){引数名2:値2, ...}(助詞)(命令語名)は(データ型){//ここを実行}
最後の(戻り値データ型)を指定している場合は、戻り値のデータ型を指定します。
戻り値なしの場合は省略します(void)。
以下、サンプル
---実行する{
//ここを実行
}
---実行するは整数型{
//ここを実行
{戻り値:100}でもどる
}
---{引数:@xは整数型}で実行する{
//ここを実行
}
---{引数:@xは整数型}で実行するは実数型{
//ここを実行
{戻り値:10.2}でもどる
}
型(クラス)の利用
「型」は、自分なりのデータ型を作成する機能です。ひとつの型に複数のデータをまとめたり、データと命令を組み合わせておくことができます。作成した型は、データ型と同じように使うことができます。
型の定義
次のように書きます。
===(型名) {
//ここに型定義を書く
(型が持つデータ)
+++(初期命令){
}
---(独自命令){
}
}
初期命令は、その型をもったデータを作るとき、最初に呼び出す命令です。型名と同じ名前にします。引数を指定でき、戻り値は省略します。
独自命令は、そのデータ型の専用命令です(オブジェクト指向のメソッドにあたります)。さきほど説明した、独自命令の定義と書き方は同じです。
型の利用
定義した型を利用するには、まず型を代入する変数を定義します。それから「新しい」命令といっしょに呼び出して、変数に代入します。このとき、引数を指定して初期値を代入できます。初期命令と型名は同じ名前になっています。
@(変数名)は(型名)
@(変数名)=新しい(初期命令) #「新しく」も使えます
型が持つ独自命令を呼び出すには、次のようにします。
@(変数名)、(独自命令)
@(変数名)、(引数)(独自命令)
型が持つ独自データを呼び出すには、次のようにします。
@(変数名)の@(独自データ)
Processing.jsのメソッドやプロパティを追加する方法
そら豆スクリプト(soramame.ps.js)は、日本語っぽいコードをProcessing.jsのコードに変換して実行します。
そら豆スクリプトの命令や環境変数を、Processing.jsのどのメソッドやプロパティに対応付けるかは、あらかじめ設定してあります。
この設定を追加することで、新しい命令や変数をサポートできます。
設定ファイル
設定を追加するには、「lib_command.js」ファイルを編集します。
下記は、「lib_command.js」の一部です。
//変換候補データ - 命令
//元データ : 変換先データ
this.commands = {
//Structure
サイズ : 'size',
初期設定する : 'setup',
くり返し描画する : 'draw',
もどる : 'return',
このファイルに、次のような形式で、変換前の単語(そら豆)と変換後の単語(Processing)を対応付けます。
末尾の「,」(コンマ)を忘れないようにしましょう。
(そら豆) : '(Processing)',
ファイル変更後にやること
このファイルを書き換えたら、Webブラウザをリロードするだけ
設定ファイルの内容
「lib_command.js」には、次の4つの種類を記述できます。
命令
命令語をメソッドに変換します。
引数を持つことができます。
- 例: テン : 'point',
- 例: セン: 'line',
環境変数・定数
環境変数や定数名に変換します。
そら豆スクリプトのコード内で記述するときには、 環境変数には先頭に「@」を付けます。
- 例: 幅 : 'width',
- 例: 高さ : 'height',
- 例: マウスX : 'mouseX',
- 例: マウスY : 'mouseY',
定数には先頭に「$」を付けます。
- 例: PI : 'PI',
- 例: HALF_PI : 'HALF_PI',
データ型名(基本データ型と組み込みデータ型)
データ型名やクラス名に変換します。
そら豆スクリプトのコード内で記述するときには、
「変数名は(データ型名)」と記述します。
- 例: 整数型 : 'int',
- 例: 実数型 : 'float',
- 例: Pイメージ型 : 'PImage',
- 例: Pベクトル型 : 'PVector',
- 例: Pフォント型 : 'PFont',
プロパティ名・メソッド名
特定のクラスに属するプロパティ名・メソッド名に変換します。
そら豆スクリプト側は、属するクラス名(変換後)と、プロパティ名・メソッド名(変換前)を
"_"(アンダーバー)でつなぎます。
- 例: PVector_x : 'x',
- 例: PVector_y : 'y',
- 例: PVector_z : 'z',
- 例: PVector_取りだし : 'get',
- 例: PVector_設定する : 'set',
さらに詳しく
そら豆スクリプトは、C言語やJava・Rubyといった、広く普及しているALGOL系プログラミング言語と同じような文法を備えています。
とくに、基本的な考え方は、Javaによく似ています。
とゆーか、Processing/Processing.jsに変換しているだけなので、その文法とほぼ同じです。