LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

Rubyショートコーディング入門

Last updated at Posted at 2017-12-13

Rubyショートコーディング入門

この記事はIS17erアドベントカレンダー14日目の記事として書かれました。

主にRubyに特有なショートコーディングを載せていきたいと思います。

書いている途中に気づきましたが、こちらの記事に無限に有益情報が載っていたので、ぜひ読んでみてください。

ループ

n.times

他の言語で、for (int i = 0; i < n; i++)に続けて書く作業を

n.times{}

と書くことができます。

n.times{|i| ... }

とするとインデックスをとれます(cookiesさんありがとうございます)。

a..b, a...b

(0...n).each{|i| do_something}

ではiが0からn-1まで動きます。一方

(0..n).each{|i| do_something}

では0からnまで動きます。

loop

while 1
  do_something(gets)
end

の代わりに

loop{do_something}

が使えます。

標準入出力編

$<

標準入力の各行について処理を行うときなどに

$<.map{|l|do_something}

みたいにかけて便利です。

$><<hoge

print hogeの代わりに使用できます。printと同様文末に改行は入りません。

`dd`

標準入力から取り込みます。getsと違う点は、EOFまで読み込む点です。

print *array

配列の中身を連結して出力します。

print *[1,2,3]

123となります。

オプション

-n

while 1
  do_something(gets)
end

の形をしたプログラムは以下のように書くことができます。

#!ruby -n
do_something($_)

上述したように、loop{}が使えるので、while 1と書く機会はまずありません。

また、この場合だけに限りませんが$_~/hoge/の代わりに~/hoge/と書くことができます。

-p

-nとほぼ同じですが、処理が終了すると、$_の値を出力します。

-a

-naもしくは-paのように使用します。読み込んだ各行をスペースでsplitした配列が$Fに格納されます。

その他

?

?a'a'と同じです。?1'1'となります。1文字の文字を宣言するときはこちらのほうが1byte短くなります。

これを利用して、ある文字が文章に含まれているかを短く判定することができます。
'hoge'[?h]'hoge'=~/h/よりも短いです。

:hoge

シンボルは文字列として出力されます。

puts hoge ?:Yes: :No

とかけます。

puts hoge ?'Yes':'No'

より1byte短くなります。

d[n]

d[n]は整数dを2進数として見た場合の、n桁目(ただし、1の位を0桁目とする)の値を返します。

eval

evalは多くの使いみちがあります。たとえば、何度も使用する処理を文字列として書いておき、それを毎回evalすることで、コードを短くすることができます。

また、gets.to_iよりも

eval`dd`

のほうが短いです。

p

pは出力のときによく使用するやつです。数字を出力するときにはputsではなくpを使用しましょう。また、pnilを返すので、hoge=nilとする代わりにhoge=pと短縮できます。

true, false

ご存知だと思いますが、Rubyでは、1, 0がtrue, falseを表しません。trueはTrueClass, falseはFalseClassのオブジェクトです。このため、trueを表したいときは!p, falseを短く表したいときは!0とします。

a.*b+c

a*(b+c)はこのように書くことで括弧を省略でき、1byte短くなります。

array.uniq

array.uniqarray|[]と書くことができます。

組み込みメソッド

組み込みメソッドは書くとキリがないのでよく使うものだけ幾つか紹介します。詳しく知りたい人は公式のを読んで下さい。

s.chars

文字列sを一文字ずつ分解するときはs.charsが便利です。

i.to_s(n)

整数iをn進数表記した文字列にします。

さいごに

多分まだまだあると思うんですが、もう十分でしょという気分になりました。

1

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