LoginSignup
9
3

More than 5 years have passed since last update.

一歩先を行く厨二病Rubyスニペット

Last updated at Posted at 2018-08-11

まえがき

あまり一般的な書き方ではない(かもしれない)けどオシャレなRubyの書き方集です。
場合によっては有用ですが、濫用すると可読性を損なうのでチーム開発等他の人が読む場面では避けたほうがよさそうです。

「そんなの関係ないから俺は俺のオレオレコードを書く」っていう厨二病の人のためのスニペット。

変数代入時のArray#firstをやめる

array = [3, 2, 1]

elm = array.first
p elm # => 3

elm, = array
p elm # => 3

二つ目以降の要素は捨てられる。

elm, _, _ = 3, 2, 1

と同じ

Proc#callをやめる

hoge = ->(str) { str.upcase }

hoge.call('fuga')   # => "FUGA"
hoge.('fuga')       # => "FUGA"
hoge.yield('fuga')  # => "FUGA"
hoge['fuga']        # => "FUGA"
hoge === 'fuga'     # => "FUGA"

.call.()はよく使われるけど、
hoge['fuga']hoge === 'fuga'でprocを呼ぶのは知らないと誤解をうめる。

String#to_symをしない

文字列リテラルの前に :(コロン)でシンボルになる

'hoge'.to_sym # => :hoge
:'hoge' # => :hoge

もちろん変数展開もできる

fuga = 'fuga'
:"hoge_#{fuga}" #=> :hoge_fuga

Array#joinをしない

Array#*で代替できる

['a', 'b', 'c'].join('/') # => "a/b/c" 
['a', 'b', 'c']*'/' # => "a/b/c" 

真偽値をひっくり返すには前置の!ではなくBasicObject#!で

!true # => false
true.! # => false

前置の!と同様にnilかfalseじゃなければfalseが返る

''.! # => false
''.!.!.! # => false

Range#to_aをやめる

配列式の中でrangeを展開する

(1..5).to_a # => [1, 2, 3, 4, 5]
[*(1..5)] # => [1, 2, 3, 4, 5]

String#uptoを使う

○回ループしたい場合に、安易に

3.times { p 'hello' }
# => "hello"
# => "hello" 
# => "hello"

とか

1.upto(3) { p 'hello' }
# => "hello"
# => "hello" 
# => "hello"

せずに、 String#uptoを使う

'a'.upto('c') { p 'hello' }
# => "hello"
# => "hello" 
# => "hello"

もちろん値もとれる

'a'.upto('c') { |char| p char }
# => "a"
# => "b"
# => "c"

#uptoがStringクラスでも使えるのはあまり知られていないかも。
ループごとにレシーバの文字列から String#succが呼ばれる。
100回まわしたいときは 'a'.upto('cv')

文字列中の変数展開を使わない

String#<< を使う。

text = 'hoge'
html = "<span>#{text}</span>" # => "<span>hoge</span>"

↑辟易する↓シブい

text = 'hoge'
html = '<span>'<<text<<'</span>' # => "<span>hoge</span>"

無事読みにくくなった

コード全体をヒアドキュメントにしてevalで実行する

eval(<<-EOS)
  p 'hoge'.upcase
  p 'FUGA'.downcase
EOS

# => "HOGE"
# => "fuga"

意味はない

おわり

みなさんの厨二病スニペットおしえてください

9
3
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
9
3