Rubyタブがもっと便利に!ローカル変数とgetsメソッドに対応しました 🎉 #53
takaokouji
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
スモウルビーのRubyタブに、待望の新機能が追加されました!
ローカル変数と
getsメソッド が命令ブロックと相互に変換できるようになり、より本格的なRubyプログラミングが楽しめます。🚀 さっそく試してみよう!
getsで入力を受け取る
Rubyの標準的な入力メソッド
getsが使えるようになりました。ユーザーからの入力を受け取って、変数に保存できます。このコードを命令ブロックに変換すると...
「聞いて待つ」ブロックと「答え」ブロックが自動的に配置されます!
もっとシンプルな例も
入力をそのまま表示することもできます:
1行のRubyコードから2つの命令ブロックが生成される、というのがポイントです。これまでRubyと命令ブロックは1対1で対応していましたが、今回の機能拡張により、より柔軟な変換が可能になりました。
ローカル変数で安全にプログラミング
Rubyのローカル変数が使えるようになったので、変数のスコープを意識したプログラミングができます。
このコードを命令ブロックに変換すると:
Rubyコードでは同じ名前
textを使っていますが、命令ブロックでは異なる変数_text_1_と_text_2_に変換されています。これにより何が嬉しいの?
💡 技術的な仕組み(興味がある人向け)
Scratchにはないローカル変数をどう実現した?
Scratch (scratch-vm) には、実はローカル変数という概念がありません。存在するのは:
そこでスモウルビーでは、インスタンス変数に自動生成されたユニークな名前を付けることで、ローカル変数を擬似的に実現しています。
上の例で言うと:
helloメソッド内のtext→_text_1_when_flag_clickedブロック内のtext→_text_2_変数名の末尾に付いている数字は、スコープごとに自動的に割り振られます。これにより、同じ名前のローカル変数が複数のスコープで使われても、命令ブロック上では衝突しないようになっています。
getsの実現方法
getsは、Scratchの「聞いて待つ」ブロックと「答え」ブロックの2つを使って実現しています。1行のRubyコード
text = getsから、以下の2つのブロックが生成されます:この「1つのRuby命令から複数の命令ブロックを生成できる」という発見が、今回の機能実現の鍵となりました。
📚 詳細情報
実装の詳細や技術的な議論については、以下のIssueをご覧ください:
🎯 これからできること
この機能により、以下のようなプログラムが簡単に書けるようになります:
ぜひ新機能を試して、より楽しいプログラミング体験をしてください!
Beta Was this translation helpful? Give feedback.
All reactions