実行環境について
※注意
これは、ウミヘビの本体開発者向けの文書です。クリエイター向けのウミヘビの説明についてはこちらをご覧ください。
関数
いくつかの値(引数)を受け取って、処理を行い、値を返したり返さなかったりするもの。
次は0.3.0で追加:
関数名(仮引数名:引数の型, 仮引数名:引数の型=初期値, ...):戻り値(返す値)の型
このシグネチャを複数持つ関数もあるので、この文書ではそのような関数を「関数名(...)」と表し、シグネチャをあとで箇条書きで記述する。
関数名<型引数, ...>(仮引数名:引数の型, 仮引数名:引数の型=初期値, ...):戻り値(返す値)の型
-
※シグネチャなどは0.3.0で追加
-
表示(メッセージ:文字列型):なし型
UUID: 2919B826-2761-4D3A-970E-797DEEEBFECE
ID(0.6.0で追加): print
概要: 標準出力(大体はコンソールの画面)にメッセージを出力する。
引数:- メッセージ: 表示する文字列。
(以降は0.3.0で追加)
-
表示して改行(メッセージ:文字列型=「」):なし型
UUID: 48CAE38C-F5D1-4629-9266-A9445E87E84D
ID(0.6.0で追加): println
概要: 標準出力(大体はコンソールの画面)にメッセージを出力し、改行する。
引数:- メッセージ: 表示する文字列。
-
質問(プロンプト:文字列型):文字列型
UUID: 14551C35-A20A-4D1D-88B8-E924A83A1FF0
ID(0.6.0で追加): ask
概要: 標準出力(大体はコンソールの画面)にプロンプトを出力し、標準入力(大体はコンソールの画面)から、文字列を一行分読み取る。
引数:- プロンプト: 質問をする際に表示する文字列。
-
+(...)
UUID: CA271D0A-19B1-4304-98BE-E1EDFD839879
ID(0.6.0で追加): *add
シグネチャ:- +(左:整数型, 右:整数型):整数型
- +(左:小数型, 右:小数型):小数型
引数:- 左: 足される数
- 右: 足す数
-
-(...)
UUID: B476CD40-AC2B-4B25-B864-F2FB1CD83B68
ID(0.6.0で追加): *sub
シグネチャ:- -(左:整数型, 右:整数型):整数型
- -(左:小数型, 右:小数型):小数型
引数:- 左: 引かれる数
- 右: 引く数
-
×(...)
UUID: 67EF715B-2C7E-478E-AF05-FC2B0FFB6268
ID(0.6.0で追加): *mlt
シグネチャ:- ×(左:整数型, 右:整数型):整数型
- ×(左:小数型, 右:小数型):小数型
引数:- 左: かけられる数
- 右: かける数
-
÷(...)
UUID: 47596903-0544-4A39-A430-DBBCBBE46E12
ID(0.6.0で追加): *div
シグネチャ:- ÷(左:整数型, 右:整数型):整数型(0.4.0で削除)
- ÷(左:小数型, 右:小数型):小数型
引数:- 左: わられる数。
- 右: わる数。0だとエラー。
-
=(左:すべて型, 右:すべて型):真偽値型
UUID: 1F4388B8-4DA8-4467-9389-E29629D13E4C
ID(0.6.0で追加): *eq
概要: 2つの値が等しいか調べる。
引数:- 左: 比較される値(1)
- 右: 比較される値(2)
なお、基本的に型が異なる二つの値は等しくないが、例外的に、ある整数は、それと全く同じ数を表す小数と等しくなる。 -
≠(左:すべて型, 右:すべて型):真偽値型
UUID: E96B8A8C-AA6B-472D-AB71-C69518D8E101
ID(0.6.0で追加): *ne
概要: 2つの値が異なっているか調べる。
引数:- 左: 比較される値(1)
- 右: 比較される値(2)
-
>(...)
UUID: D9DFE9CF-E1B3-44B4-A307-6A8E896F36C3
ID(0.6.0で追加): *gt
シグネチャ:- >(左:整数型, 右:整数型):真偽値型
- >(左:小数型, 右:小数型):真偽値型
引数:- 左: 比較される値(1)
- 右: 比較される値(2)
-
<(...)
UUID: 51F39280-0FF1-4C57-8500-964D63670A7B
ID(0.6.0で追加): *lt
シグネチャ:- <(左:整数型, 右:整数型):真偽値型
- <(左:小数型, 右:小数型):真偽値型
引数:- 左: 比較される値(1)
- 右: 比較される値(2)
-
≧(...)
UUID: 1384CDEB-AA4C-4BC0-B2D6-811C8E79C76E
ID(0.6.0で追加): *ge
シグネチャ:- ≧(左:整数型, 右:整数型):真偽値型
- ≧(左:小数型, 右:小数型):真偽値型
引数:- 左: 比較される値(1)
- 右: 比較される値(2)
-
≦(...)
UUID: BF1AC06F-E6AC-4027-88BC-25ACC24A3B53
ID(0.6.0で追加): *le
シグネチャ:- ≦(左:整数型, 右:整数型):真偽値型
- ≦(左:小数型, 右:小数型):真偽値型
引数:- 左: 比較される値(1)
- 右: 比較される値(2)
-
結合(左:文字列型, 右:文字列型):文字列型
UUID: 965E9299-2620-415A-846D-9B9A86AE49BC
ID(0.6.0で追加): concat
概要: 文字列を結合する。
戻り値: 左と右を結合したもの。
例えば、左が「あいう」、右が「かきく」の時は「あいうかきく」になる。 -
ずらす(...)
UUID: 7F96C8FC-E917-49CB-A184-F4D4B4269361
ID(0.6.0で追加): *index
シグネチャ:-
ずらす(元:文字列型, ずれ:整数型):文字列型
概要: 文字列から、文字を抜き出す。
引数:- 元: 抜き出す元の文字列。
-
ずれ: 抜き出す文字の先頭からのずれ。
文字列「あかさたな」の「あ」のずれは「あ」が先頭なので0で、「た」のずれは「た」が先頭の文字の3個後ろなので3。
例えば、元が文字列「あいう」、ずれが1の場合、戻り値は文字列「い」となるが、これは「あいう」の「い」のずれが1だからである。 -
ずらす(元:文字列型, 開始ずれ:整数型, 終了ずれ:整数型):文字列型
概要: 文字列から一部を抜き出す。
引数:- 元: 抜き出す元の文字列。
- 開始ずれ: 抜き出す部分の最初の文字のずれ。
- 終了ずれ: 抜き出す部分の最後の文字の次の文字のずれ。
例えば、元が文字列「あかさたなはまやらわ」、開始ずれが3、終了ずれが8の場合、戻り値は文字列「たなはまや」となる。文字列「さたなはま」でも、文字列「たなはまやら」でもないので注意すること。
非常に難解なので、補足説明をする。
ずれとは、先頭の文字から何文字後ろにあるかを表すものである。
よって、文字列「あいうえおかきくけこ」をずれ付きで書くと、以下のようになる:
ずれ 0 1 2 3 4 5 6 7 8 9 文字列 あ い う え お か き く け こ
また、「えおか」を抜き出すとき、「え」のずれは3番、「か」の次のずれは6番なので、開始ずれを3、終了ずれを6とすればよい:
ずれ 0 1 2 3 4 5 6 7 8 9 文字列 あ い う え お か き く け こ
また、「くけこ」を抜き出すとき、「く」のずれは7番、「こ」の次のずれは10番となり、ずれが10の文字は存在しないが、関係なく、開始ずれを7、終了ずれを10とすればよい:
ずれ 0 1 2 3 4 5 6 7 8 9 10 文字列 あ い う え お か き く け こ /
-
ずらす(元:文字列型, ずれ:整数型):文字列型
-
擬似乱整数(最小:整数型, 上限:整数型):整数型
UUID: 88EA19A6-1C44-4753-BA0D-8DDAB52089FD
ID(0.6.0で追加): randint
概要: ランダムな整数を取得をする。
引数:- 最小: 乱数の最小値
- 上限: 乱数の上限。これは含まない。
-
擬似乱小数(最小:小数型, 上限:小数型):小数型
UUID: B3D6BF5E-3E17-4B62-9FC4-14B65CEE8377
ID(0.6.0で追加): randf
概要: ランダムな小数を取得をする。
引数:- 最小: 乱数の最小値
- 上限: 乱数の上限。これは含まない。
(以降は0.3.1で追加)
-
~番目(...)
UUID: DCDD483D-D6C4-4340-9882-CE7A3AE80889
ID(0.6.0で追加): nth
シグネチャ:-
~番目(元:文字列型, 番号:整数型):文字列型
概要: 文字列から、ある番号の文字を抜き出す。
引数:- 元: 抜き出す元の文字列。
-
ずれ: 抜き出す文字の番号。普通に一番から始まる。
文字列「あかさたな」の「あ」の番号は1番で、「た」の番号は3番である。
例えば、元が文字列「あいう」、番号が1の場合、戻り値は文字列「い」となる。 -
~番目(元:文字列型, 開始番号:整数型, 終了番号:整数型):文字列型
概要: 文字列から一部を抜き出す。
引数:- 元: 抜き出す元の文字列。
- 開始番号: 抜き出す部分の最初の文字の番号。
- 終了番号: 抜き出す部分の最後の文字の番号。
例えば、元が文字列「あかさたなはまやらわ」、開始番号が3、終了番号が8の場合、戻り値は文字列「さたなはまや」となる。
以前のものは「ずらす」と名前が変わっており、この関数とはあまり関係がない。 -
~番目(元:文字列型, 番号:整数型):文字列型
イベント
起きた際にブロックを実行させることができる様々な「瞬間」。
次は0.3.0で追加: また、関数と同じように、値(引数)を受け取るイベントもある。
なお、イベントの際にやることを追加することをイベント購読、
取り消すことをイベント解除という。
組み込みイベントとそのIDなどは次のとおり:
-
プログラムが始まった時(): (0.8.0で削除)
UUID: BE9BADA0-030E-4AC8-8664-E5129DE50B6C
ID(0.6.0で追加): OnStarted
概要: プログラムが開始され、準備が整ったとき。
(以下は0.3.0で追加)
参照
値の場所を示すもの。
また、そこにある値を得ることを間接参照、
そこに新たな値を置いたり、そこの値を新しい値で置き換えたりすることを代入という。
変数
プログラムでよく使われる、変数をおいておく場所。
いろいろ種類があり、定義されているスコープブロックの中からしか見えない変数をローカル変数、
どこでも使える変数をグローバル変数という。
定数
名前を付けられた値。
いろいろ種類があり、定義されているスコープブロックの中からしか見えない定数をローカル変数、
どこでも使える定数をグローバル変数という。
スコープブロック
プログラムの塊。
この中で変数や関数などを定義すると、他のところからは見えない変数や関数を作ることができるので、
よく使われる名前の変数や関数(例えば、「x」や「f」など)を気兼ねなく使うことができる。
型
値の種類。
また、値の型を変えるすることをキャストといい、キャスト式を用いて明記なくてはいけない明示的なキャスト、明記しなくても勝手に行われるキャストを暗黙的なキャストという。
なお、型には抽象型と、具体型の二種類がある。
抽象型は、漠然と値の性質などをあらわす一方で、
具体型は、実際のデータと密接にかかわっている。
組み込み型とそのIDなどは次のとおり:
-
数型(抽象型):
UUID: F0EC4639-5918-4A0E-BC27-1CFA530659DF
ID(0.6.0で追加): number
概要: すべての数がこの型の値である。 -
文字列型(具体型):
UUID: 4CB0AE0D-8131-447E-9213-31A3826967A0
ID(0.6.0で追加): string
概要: すべての文字列がこの型の値である。 -
整数型(具体型):
UUID: 96A7FEC6-970D-4814-82ED-4FCF4B227F0A
ID(0.6.0で追加): int
概要: この型の値は整数を表す。 -
小数型(具体型):
UUID: 6171FD74-1A1E-42E9-9933-C55A70EB5DF1
ID(0.6.0で追加): float
概要: この型の値は小数を表す。
たとえ、その表す数が整数だったとしても、整数型の値とは本質的に別物として扱われているので、注意が必要である。 -
真偽型(具体型):
UUID: D7A3CC7B-3C5E-405D-BB6D-7092A1A5D5D0
ID(0.6.0で追加): bool
概要: この型の値は真偽(あっているか、間違っているか)を表す。
この型の値は、次の二つしかない:- はい: 正しいことを表す。
- いいえ: 間違っていることを表す。
-
なし型(具体型):
UUID: 4636E2A6-1C73-4DE9-B7E7-FD7F98EB4C12
ID(0.6.0で追加): NoneT
概要: この型の値は値がないことを表す。
この型の値は、「なし」一つしかない。
(以降は0.5.0で削除)
-
すべて型(抽象型):
UUID: BF838FA8-705F-4246-8C22-C9B9ADDB6793
概要: すべての値がこの型の値である。
-
文字列型⇔整数型:
整数の十進数表記と整数を交換します。
整数の十進数表記でない文字列を書けるとエラーになります。 -
文字列型⇔小数型:
小数の十進数表記と小数を交換します。
小数の十進数表記でない文字列を書けるとエラーになります。
指数表記(「仮数e指数」と書いて、仮数×10指数を表す表記)も使えます。 -
小数型⇔整数型: (⇐方向だけ暗黙的)
小数を整数に変換する際、ゼロに近い側に切り捨てます。 -
真偽型⇔整数型&小数型: (⇒方向だけ暗黙的)
先ほどいった通り、「はい」は1、「いいえ」は0になります。 また、0は「いいえ」、それ以外のすべての数は「はい」になります。 -
真偽型⇒文字列型:
「はい」は、文字列「はい」、「いいえ」は文字列「いいえ」になります。 -
なし型⇒真偽型&整数型&小数型&文字列型:
「なし」は「いいえ」、0、もしくは、文字列「なし」になります。 - 型なし参照型⇔任意の参照型: (⇐方向だけ暗黙的)
名前空間
プログラムの複数の要素をまとめたもので値。
関数や変数を入れられる。
後述する継承も行うことができる。
また、使われる前や使われた後に関数を実行することもでき、
それぞれ、構築子、破棄子と呼ばれる。
クラス
名前空間の設計図のようなものであり、型の役割も果たす。
その設計図に従って名前空間を作ることができ、そのようにしてできた名前空間を、あるクラスの実体という。
クラスは、別のクラスが提供する機能をすべて備え、自らの実体がそのクラスの実体として扱えるようにすることができ、これを実装という。
また、クラスは、ほかのクラスを基にして作ることもでき、これを継承という。
またこの時、暗黙的にそのクラスを実装している。
特殊関数
名前空間の中で特殊な役割を果たす関数であり、すべて「なし」を返さなければならない。
コンストラクタ、デストラクタ、エントリポイントの三種類が存在する。
コンストラクタ
名前空間が使われ始めるときに一回だけ呼び出される。
変数の初期値の設定などをこの中で行う。
デストラクタ
名前空間が破棄されるときに一回だけ呼び出される。
リソースの開放などをこの中で行う。
エントリポイント
名前空間が実行されるときに呼び出される。複数回呼び出されることがある。
プログラムの実行時に行う処理などをこの中で行う。
また、名前空間が関数として呼び出された場合は、その名前空間のエントリポイントのその引数が渡されて実行される。
変更履歴
- 2023/09/26: 初めて公開しました。(0.2.0)
- 2023/10/30: 変数や関数、型などを追加しました。(0.3.0)
- 2023/11/14: UUIDの重複を解決しました。
- 2023/11/20: 既存の「~番目」を「ずれ」と改名し、新たに「~番目」を追加して解説を改善しました。(0.3.1)
-
2023/11/24:
いくつかの破壊的な変更を行いました。(0.4.0)
一覧はこちら: - 2023/12/03: 誤字などを修正し、すべて型を削除し、型無し参照を追加しました。(0.5.0)
- 2024/02/20: 仮引数ノードのプロパティの名前を変更しました。(0.6.0)
- 2024/02/28: ミスを修正しました。
- 2024/03/16: 「プログラムが始まった時」を削除しました。(0.8.0)
- 2024/03/16: 誤字を修正しました。(0.9.0)
作成 ski.com