-
Notifications
You must be signed in to change notification settings - Fork 1
Language
Smalruby は Ruby のサブセット言語であり、Scratch 3.0 のブロックプログラミングと 1 対 1 で対応するように設計されています。実行時には Opal を用いて JavaScript に変換されますが、エディタ上ではブロックと相互に変換可能な Ruby コードとして扱われます。
以下の Ruby 予約語が字句解析の対象となります(ただし、すべての予約語が特定のブロックに対応しているわけではありません)。
begin, break, case, class, def, else, elsif, end, ensure, false, for, if, in, module, next, nil, not, or, redo, rescue, retry, return, self, super, then, true, undef, unless, until, when, while, yield
ブロックの「もし〜なら」「もし〜なら〜でなければ」に対応します。
if 条件
# 処理
end
if 条件
# 処理1
else
# 処理2
endブロックの「ずっと」「〜回繰り返す」「〜まで繰り返す」に対応します。
# ずっと
loop do
# 処理
end
# 指定回数繰り返す (2通りの書き方)
repeat(10) do
# 処理
end
10.times do
# 処理
end
# 〜まで繰り返す
until 条件
# 処理
endScratch の「定義」ブロックに対応します。
def メソッド名(引数1, 引数2)
# 処理
endSmalruby では以下の基本型を扱います。
-
数値 (Integer, Float):
10,3.14 -
文字列 (String):
"Hello",'World' -
真偽値 (Boolean):
true,false -
配列 (Array):
[1, 2, 3](リストブロックに対応) -
範囲 (Range):
1..10(乱数生成などに使用) -
Nil:
nil
ブロックの「演算」カテゴリの各ブロックに対応します。
| 演算子 | 内容 | 対応ブロック |
|---|---|---|
+, -, *, /, %
|
四則演算・余り |
() + (), () - (), etc. |
>, <, ==
|
比較 |
() > (), () < (), () = ()
|
&&, ` |
, !` |
変数の種類(スコープ)は接頭辞で区別されます。
-
ローカル変数:
name(メソッド内やブロック内でのみ有効、Rubyレベルの変数) -
インスタンス変数:
@name(「このスプライトのみ」の変数) -
グローバル変数:
$name(「すべてのスプライト用」の変数)
Smalruby のメソッドは、多くの場合 Scratch のブロックに対応する命令です。
move(10)-
turn_right(15),turn_left(15) -
go_to("mouse"),go_to([0, 0]) -
self.x = 0,self.y = 0 self.direction = 90
-
say("こんにちは"),think("うーん") switch_costume("costume1")
next_costume
-
show,hide
touching?("mouse")key_pressed?("space")-
mouse_x,mouse_y answer
when_flag_clickedwhen_key_pressed("space")when_receive("message1")broadcast("message1")
play_sound_until_done("meow")stop_all_sounds
ブロックでは表現できない、または Ruby らしい記述が提供されています。
- self: 現在のスプライト自身を指します。
-
sprite("スプライト名"): 他のスプライトを参照し、そのプロパティを取得する際に使用します(例:
sprite("Sprite1").x)。 -
wait:
sleepメソッドと同様に待機します。
注: ここに記載されている仕様は ruby-to-blocks-converter の実装に基づいています。実装されていない Ruby の機能(複雑なクラス定義、メタプログラミングなど)は、ブロックに変換できず ruby_statement として扱われるか、エラーになります。