トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2024-12-12 (Thu) [長年日記]

_ ruby.wasmを使うのをやめた

Ruby Advent Calendar 2024の12日目の記事です。

RubyKaigi 2023のLTで紹介したBINGOアプリケーションだが、去年の忘年会で表示(おそらくruby.wasmのダウンロード)に時間がかかったり、一部動かない人がいたりしたので、ruby.wasmを使うのをやめた

Rubyだとカードの初期化が↓の3行だったのが、

  srand(<%= @seed %>)
  CARD = (1..75).each_slice(15).map { |i| i.sample(5) }.transpose
  CARD[2][2] = ""

Randomクラスの定義を除いても↓くらいになってしまった。

  let rand = new Random(<%= @seed %>);
  let cardValues = Array.from(Array(5).keys()).map(i => 
    Array.from(Array(15).keys(), j => 1 + 15 * i + j)
  ).map(nums => 
    nums.map(i => [rand.next(), i]).sort().map(i => i[1]).slice(0, 5)
  );
  cardValues = cardValues[0].map((col, i) => cardValues.map(row => row[i]));
  cardValues[2][2] = "";

ふだんJavaScriptを書かないので私が下手なだけかもしれないが、ブロックや範囲式があって、Array#sampleやEnumerable#sort_by、Array#transposeなどのコレクションを操作する機能が豊富なRubyは便利だなと改めて思った。 フルセットのRubyがいらない場合はpicoruby.wasmとかあると便利かもしれない。

↓のコメント欄にJavaScriptでもっとかっこよく書けるというスレッドが続く(かも)。

Tags: Ruby