リノシス開発者ブログ

株式会社リノシスのエンジニアブログです。

Ruby 2.7クイズ

技術顧問の野又です。RenoSysでは月に一回社内勉強会を実施しています。

Rubyの新しいバージョンである2.7が昨年末にリリースされており、クイズ形式の勉強会を社内で実施したので資料共有いたします。

スライド

speakerdeck.com

以下補足です

パターンマッチ

case {a: 0, b: 1, c: 2}
in {a: 0, i: 1}
  puts 1
in {a: 0, b: tmp}
  puts 2
  puts tmp
in {a: 0, b: 1, c: tmp}
  puts 3
  puts tmp
in {a: 0, b: 1, c: 2}
  puts 4
end

実験的な機能です。現状では実行すると警告が出ます

warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby!

irbに追加されたのは?

  1. 複数行編集
  2. readlineが不要に
  3. クラス、モジュール、メソッドのリファレンスをその場で確認できるように
  4. inspect結果に色がつくように

個人的にMacのバージョンを上げるとreadlineまわりが壊れてirbが動かなくなるということは今までよくありました。 Ruby 2.7ではreadline相当の機能がRubyで再実装されたため壊れにくくなっています。

キーワード引数として許容されるのは?

  1. def foo(h, **kw); end; foo(key: 42)
  2. def foo(h, key: 42); end; foo(key: 42)
  3. def foo(**kw); end; foo({key: 42})
  4. def foo(h, key: 42); end; foo({key: 42})

Screen Shot 2020-05-26 at 15.13.49.png

今までキーワード引数とハッシュがごっちゃになっていたところが将来のバージョンでは分離される予定です。 現状は警告のみ。

Ruby 2.7をコンパイルするのに必要なのは?

  1. C90
  2. C99
  3. C11
  4. C17

C99は例えば変数宣言がブロックの先頭だけでなく適宜宣言可能になっています。

集計メソッド

["a", "b", "c", "b"].xxx
#=> {"a"=>1, "b"=>2, "c"=>1}
  1. count_map
  2. sum_map
  3. pally
  4. tally

英語でtallyは勘定、集計するという意味

番号指定パラメター

[1,4,3].map{puts xxx}
# =>
1
4
3
  1. _0
  2. _1
  3. $0
  4. $1

個人的には配列と同じで0はじまりが好きですが仕様上そうはなっていないようです。

参考

https://www.ruby-lang.org/ja/news/2019/12/25/ruby-2-7-0-released/

宣伝

RenoSysでは現状Ruby 2.7に移行できていませんが今後対応予定です。

RubyRailsのバージョンアップしてくれるエンジニアを随時募集中です。

https://en-gage.net/renosys/