Snap!9
NBUゆるゆるかれんだー Advent Calendar 2023
8日目の記事です。
Scratchの派生のSnap!がVer.9になっていました。
あらためてScratchから拡張されたところを紹介しておきます。
並び順に無関係に計算可能な演算ブロックは拡張可能になっています。※
A+B+C を (A+B)+C の様に入れ子にせずに済みます。
※- や / は拡張できません。(A-B)-CとA-(B-C)とでは結果が異なるので。
ゲームなどで方向の判定に便利なatan2が有りました。座標から方向を計算する際に便利です。スプライトの向きで代用する工夫も不要になります。
C言語のローカル変数の様にブロックの実行中にだけ使用できる変数が有ります。大域変数を用意する手間が省けて変数の誤用も減らせます。
制御変数付きの繰り返しブロックが有ります。ローカル変数です。変数をクリックして名前の変更が可能です。
関数のifと拡張可能なifブロックが有ります。ifの階層の見た目を浅くできます。
空白の項目を持つ演算子は部分関数になります。演算の連鎖をpipeブロックを利用して階層を深くせずに記述できます。
ブロックを作成できたり自身のコードを調査できるブロックが有りました。リフレクションなどメタプログラミングも可能。まだ使ったことは無いのでよく分かりません。
コード実行時のブロックの継続(continuation)を変数に保存しておいて実行することで制御ブロックを自作できると思います。
関数オブジェクトが有ります。関数オブジェクトは変数に代入できます。
コードブロックのオブジェクト(クロージャ)があります。クロージャ生成時の変数の値も保持されます。
下の画像で大域変数aが未定義でもbを実行すると90度回転します。
入れ子構造が可能なリストがあります。2重リストはテーブルとして表示されます。どんな値もリストの要素にできます。
コスチュームの画像やスプライト自身もオブジェクトの値として利用できます。
リスト処理のブロックと関数があります。ZIP関数もライブラリを追加して利用できます。
リストに対してUnityのC#のVector3のようにベクトル演算ができます。
カスタムブロック定義ではブロックや関数(モニター)の引数と引数の型を指定することができます。
ラムダ型引数はコードブロックの実行部分を格納します。
ブロックの引数の型の例。左から順に
数値 真偽値 リスト 参照渡し 初期値付き引数 ラムダ式(ブロックの実行部分) 可変長引数
をブロックエディタのヘッダ部分で指定できます。
値の型チェックも可能です。
プロックエディタで作成したブロックは
ラムダ式 コードブロック(C型)
可変長引数リスト ▲…▼
の様に表示されます。引数のデフォルト値はスロットに最初から入っています。
ラムダ式を引数に表示することもできます。オブジェクトを引数に指定したり、コスチュームやサウンドも引数で指定できます。
ブロックエディタの変数定義の設定メニューから
マルチラインテキストの文字列型や、
メニュー(ピアノ鍵盤、角度ダイヤルなど、カスタマイズも可能)
も設定できます。
メッセージ送信でデータを付随できます。
プロジェクト内に個別のシーンを作成できます。
シーンごとに個別にスプライト、ステージ、コードを用意できます。
シーンを切り替えるブロックがあります。
送信対象を指定したコマンド実行やメッセージ送信ができます。
Snap!では、かなり複雑なコードでも書けそうですね。
あとは優秀なエディタの登場とChatGPTなどがサポートしてくれるようになるのを期待してます。