LoginSignup
19
10

More than 5 years have passed since last update.

Rubyがむずかしい話

Posted at
1 / 15

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


まとめ

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

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

19
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
10