Ruby

Rubyがむずかしい話

More than 1 year has passed since last update.

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 のコードを理解する手助けになる

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