Rubyがむずかしい話

  • 17
    いいね
  • 0
    コメント

https://megurorb.connpass.com/event/55107/
Meguro.rb #2 でのLT資料です。


だれこれ :cat:

pocke.png

  • Pocke
  • Actcat inc. / Engineer
  • Twitter: @p_ck_
  • GitHub: @pocke

本題: Ruby はむずかしい :gem:

お前は自分で書いた Ruby コードの構造を理解しているのか? :thinking:


例題1) 何を出力するでしょうか

print(% % %%%%)

(Syntax Highlight に騙されるな!)


こたえ :white_flower:

出力されるのは%

# 等しい構造のコード例
print('%' % '')
# 実際には改行は出力されない
$ ruby -e 'print(% % %%%%)'
%
$ ruby -e "print('%' % '')"
%

Twitter でアンケートを取ったら、サイコロの方が優秀だった :game_die:

人間が Ruby を書くより、鉛筆転がして書いたほうがマシ


例題2) 単純な URL は Ruby のコード :earth_asia:

http://example.com

(Syntax Highlight はウソをついている)

$ ruby -c -e 'http://example.com'
Syntax OK

こたえ :100:

例えば、こんな感じのコードを仕込めば実行できる :runner:

class Symbol
  def /(right)
    "Hello, #{right}!"
  end
end

def example
  Struct.new(:com).new('Ruby')
end

def http(arg)
  p arg
end

http://example.com # => "Hello, Ruby!"

例題3) 実際に RSpec であった例 :muscle:

it 'changes foo' do
  expect { subject }.to change { foo.hoge }
    .and change { foo.fuga }
    .and change { foo.poyo }
    .and change { foo.piyo }
end

スマートに見えるけど、これはどういう構造??

(いい感じに書く方法があったら教えて下さい…)


こたえ) 同じ構造のコード :ok_hand:

expect { subject }.to(
  change { foo.hoge }.and(
    change { foo.fuga }.and(
      change { foo.poyo }.and(
        change { foo.piyo }
      )
    )
  )
)

Ruby はむずかしい!!!

では、むずかしい Ruby と戦うにはどうしたらいいか :punch: :punch: :punch:


Bacon Cannon 🥓 :gun:

An online Ruby parser. Support multiple Ruby versions, and multiple parsers(Ripper and Parser gem).
https://bacon-cannon.herokuapp.com

参考リンク


DEMO

https://bacon-cannon.herokuapp.com/


まとめ

  • Ruby はむずかしい
    • Syntax Highlight に惑わされてはいけない
  • Bacon Cannon を使えばむずかしい Ruby のコードを理解する手助けになる

ご清聴ありがとうございました