提供:Japanese Scratch-Wiki
ここでは、プログラミング言語としてのScratchについて説明する。
ファイル形式
Scratchのファイル形式は.sb3であり、これはプロジェクトを構成するさまざまな素材(svg、wavなど)と「project.json」から成る。このjsonファイルにほとんどの情報が格納される。
指示語
Scratchの指示語はブロックであり、これらは以下の分類に分けられる。
- 真偽ブロック - 値ブロックの一分類で、true/falseを返り値とするブロック。
- スタックブロック - 返り値がなく、単独で実行が可能なブロック。
- C型ブロック - 構文制御を行うもの。
また、ブロックの行う内容で分けられる場合もある[1]。
- 動きブロック - スプライトの画面上の座標及び向きの変化に関するもの。
- 見た目ブロック - スプライト及び背景の描画に関するもの。
- 変数ブロック - 変数・リストを扱うもの。
- イベントブロック - イベントハンドラーを扱うもの。
- 制御ブロック - 制御構文やクローンを含むもの。
- 調べるブロック - さまざまな情報を返すもの。
- 演算ブロック - 四則・数学・論理・文字列演算を行うもの。
- ブロック定義 (カテゴリ) - プロシージャを定義するもの。
また、Scratch 3.0には、拡張機能という機能がある。
型
Scratchは動的・静的両方の型付けを行う。(基本ブロックの形状が型である。しかし、ブロックの型を共有する数値・文字列などの型は動的に決まる。)
返り値の型は以下の通り。
- 数値型 - 整数及び実数値。虚数には対応していない。
- 文字列型 - 文字列。
- 真偽型 - 真偽ブロックが返す、true/falseの値。
引数にする場合、これらはキャストの規則に従って型変換される。
- 真偽型を数値型に変換するときは、1と0に変換されるが、互換性保証はされない。
- 真偽型や数値型を文字列型に変換するときは、そのまま変換される。
- 数値型や文字列型を真偽型に変換することはできない。
- 文字列型を数値型にするときは、成功したら数値に、失敗したら0になる。
なお、変数の値を変更するときに、[変数 v]を([12] と [34])ずつ変える
などで設定したときは、変数の値は変わらない[2]。
数値型では指数表記を使うことができ、5e3と5000が同じように扱われる。数値型入力で「8ee8e」などもできるが、これは誤りで、0に等しい。
±Infinityは数値型に分類される場合がほとんど(数値型を返すブロックが返す場合があるため)だが、ほかと性質が異なる。
Infinity | 実数値 | -Infinity | |
---|---|---|---|
Infinity | Infinity | Infinity | NaN |
-Infinity | NaN | -Infinity | -Infinity |
Infinity | 実数値 | -Infinity | |
---|---|---|---|
Infinity | Infinity | ±Infinity(符号は実数値の符号による) | -Infinity |
-Infinity | -Infinity | ±Infinity(符号は実数値の符号による) | Infinity |
例外
型変換できないブロックは引数にはまらないため、例外は起きない。計算結果のオーバーフローや0除算などは「Infinity」「NaN」を返し、スクリプトの実行を止めることはない。メモリー不足なども例外処理されないため、Scratchをクラッシュさせることも可能である。(ただし、クラッシュさせるプログラムの公開は利用規約に反する。)
ポインタ
![]() |
この項目には、最新バージョンのScratchには存在しない機能について書かれています。現在は使うことができないので、注意してください。 |
ポインタは存在しないが、動的変数はJSONハッキングというScratchのバグを使用した手段にて使用できる。ここでは、((変数) \([ステージ v]\)::sensing)
を使用して変数の値を取得する。
変数
変数はグローバルとローカルの2つあり、ローカル変数はスプライト外で値を変更できない。(参照はできる。)変数には文字列型のデータが入る。(ただし、他の値もキャストされて入る。)
リスト
文字列からなる一次元の配列を扱えるものであり、ブロックは変数と同じ場所にある。リストの添え字は1始まりである。
注釈
- ↑ Scratch 3.0において、ペンブロックは拡張機能となった。
- ↑ Scratch 2.0以前はNaNになっていた。