スモウルビーがさらに「Rubyらしく」!module、配列、ハッシュ、正規表現など6つの機能に対応しました 🚀 #78
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.
-
スモウルビーのRubyタブで書けるコードが、またまた大幅に進化しました!
今回のアップデートでは
module/include、super、配列、シンボル、ハッシュ、正規表現の6つの機能に新しく対応しています。これで一通り、スモウルビーをより「Rubyらしく」する修正は一段落です。これからは Ruby 拡張機能を追加して、配列の
deleteなど、Ruby 組み込みライブラリのメソッドにも対応していく予定です。🧩 module と include — メソッドの共有
moduleでメソッドをまとめて定義し、includeで複数のスプライトに取り込めるようになりました。同じ処理を何度も書く必要がなくなります。moduleの中にはdefメソッドだけを書きますincludeで取り込むと、そのスプライトでモジュール内のメソッドが使えますincludeできます🔼 super — モジュールのメソッドを呼び出す
includeしたモジュールと同じ名前のメソッドをスプライト側で定義した場合、superでモジュール側のメソッドを呼び出せます。superは引数なしで呼ぶと、元のメソッドの引数をそのまま渡しますsuper(a, b)のように引数を明示することもできます📋 配列 — Rubyと同じ0番目スタート
配列がRubyと同じ書き方で使えるようになりました。インデックスは0番目から始まります。
["a", "b", "c"]で配列をつくりますfruits[0]で0番目の要素を取り出します(Rubyと同じ!)fruits << "ぶどう"で要素を追加できます@)、グローバル変数($)のどれでも使えます💎 シンボル — コロンで始まる名前
Rubyのシンボルリテラル(
:symbol)が使えるようになりました。:redのようにコロンで始まる名前がシンボルです📖 ハッシュ — キーと値のペア
Rubyのハッシュリテラルとブラケットアクセスに対応しました。
{ key: value }の形でハッシュをつくりますprofile[:name]でキーを指定して値を取り出しますprofile[:name] = "イヌ"で値を書き換えることもできます🔍 正規表現 — パターンマッチング
正規表現リテラル(
/pattern/)と=~/!~演算子が使えるようになりました。=~で文字列が正規表現にマッチするか調べます!~でマッチしないかを調べます/ruby/iのようにiフラグを付けると大文字・小文字を区別しません💡 技術的な仕組み(興味がある人向け)
module / include
モジュールに定義されたメソッドは、
includeしたスプライトの命令ブロック(カスタムブロック)として同期コピーされます。あるスプライトでincludeすると、そのモジュール内のdefがスプライトのカスタムブロックとして自動的に追加されます。配列の 0-indexed 変換
Ruby は配列のインデックスが 0 から始まりますが、Scratch のリストは 1 から始まります。スモウルビーでは内部的に
index + 1の変換を行い、コード上は Ruby と同じ 0 始まりで書けるようにしています。シンボルとハッシュの内部表現
シンボルは
$_symbols_というグローバルリストで管理し、ハッシュは_hash_<名前>_keys_/_hash_<名前>_values_という2つのリストで キーと値を対応づけて保存しています。正規表現
=~/!~演算子は Scratch のoperator_containsブロックに変換されます。operator_containsブロックの STRING2 に/pattern/flags形式の文字列が入っている場合、VM 側で正規表現として解釈するように拡張しました。🔗 スモウルビーを試してみよう
今回追加された module、配列、ハッシュ、正規表現などの新機能をぜひ試してみてください!Rubyの教科書で見かける構文が、そのままスモウルビーで使えるようになっています。
👉 https://smalruby.app
📚 詳細情報
実装の詳細や技術的な議論については、以下の PR をご覧ください:
/!演算子をサポート #332これで一通り、スモウルビーをより「Rubyらしく」する修正は一段落です。今後は Ruby 拡張機能として、配列の
deleteなど Ruby 組み込みライブラリのメソッドにも対応していきます。お楽しみに!💬 ご意見・ご質問をお待ちしています
もしスモウルビーを使っていて、これまでと動きが違う、この動きは期待したものと違う、などなど、気になる点があれば 気軽に contact @ smalruby.jp までご連絡ください。
一年に数件しか問い合わせがないので、さみしいくらいの状況ですので、本当に、遠慮なく、ご連絡ください。
⭐ GitHub Starで応援してください
スモウルビーの開発を応援してくださる方は、ぜひGitHubリポジトリにStarをつけてください!
👉 smalruby/smalruby3-editor にアクセスして、右上の「Star」ボタンをクリックするだけです。
皆さまの応援が、開発の大きな励みになります!
Beta Was this translation helpful? Give feedback.
All reactions