Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@pocke

Rubyがむずかしい話

Rubyがむずかしい話

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

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

10
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
10
Help us understand the problem. What is going on with this article?