1
0

More than 3 years have passed since last update.

初学者的にRubyの書き方で印象に残ったもの

Last updated at Posted at 2020-10-03

Rubyでポートフォリオを作る傍で、
Rubyの基礎と往復している際に印象に残った
Rubyの書き方やルールについてまとめます。

あくまでも自分用に、随時更新で。

変数はスネークケースで書く
special_price = 200
式展開を使用する場合は ” ” ダブルクォート
puts "#{special_price}"
文字列の中でシングル(ダブル)クォートを使う場合
puts "\"Hello\""
#=> "Hello"
数値の_は無視される
1_000_000_000
#=> 1000000000
整数同士の割り算は解も整数
1 / 2 #=>0
1.0 / 2 #=>0.5
++は構文としては無効
n += 1 #=>2
n *= 3 #=>6
n /= 2 #=>3
n **= 2 #=>9
有理数
0.1 * 3.0 == 0.3 #=>false
0.1 * 3.0 <= 0.3 #=>false
Rationalクラスを使うと少数でなく3/10
0.1r * 3.0r #=>(3/10)
&&は||より優先

if文は最後に評価された式を戻り値とする
greeting =
    if

    elsif

    else

    end
if thenでコードを1行化できる
if (処理) then (戻り値)
%記法
%q!! #=> ' '
%Q!! #=> " "
%!! #=> " "
ヒアドキュメント
a = <<TEXT
    文字列
TEXT
フォーマット文字列
'%0.3f' % 1.2 #=>"1.200"
指数表現
2e-3 #=> 0.002
#2×10^-3
条件演算子(三項演算子)
message = n > 10 ? 'true' : 'false'
GC(ガベージコレクション)

使用されなくなったオブジェクトを回収し、
自動的にメモリ解放する


エイリアスメソッド

名前が異なるだけで同じ実装のメソッド


dvimodは商と余りを配列で返す
14.divmod(3) #=> [4,2]
ブロック引数は不要なら省略
numbers.each do
    sum += 1
end
ブロック内にrubyのコードを書ける
numbers = [1,2,3,4]
sum = 0

numbers.each do |number|
    sum_value = n.even? ? n * 10 : n #条件演算子
    sum += sum_value #sum_valueはブロック内のみ有効
end

sum #=> 64

ちなみに、プロが書くと、こんなに簡潔に、、、!!!
@scivolaさん、勉強になります。

numbers = [1,2,3,4]
sum = numbers.sum{ |n| n.even? ? n * 10 : n }

参考:Array#sum (Ruby 2.7.0 リファレンスマニュアル)

配列の要素を評価して戻り値を新しい配列にする
numbers = [1,2,3,4]
new_numbers = numbers.map { |n| n * 10 }

new_numbers #=> [10,20,30,40]
たたみ込み演算を行うメソッド
numbers = [1,2,3,4]
sum = numbers.inject(0) { |result, n| result + n }
#1回目 result=>0, n=>1, 0+1=1
#2回目 result=>1, n=>2, 1+2=3

sum #=> 10
&:メソッドでさらに簡潔に
[1,2,3,4].select { |n| n.odd? } #=> [1,3]
[1,2,3,4].select(&:odd?) #=> [1,3]
#1.ブロック引数が一つだけの時
#2.メソッドに引数を持たない時
#3.ブロック引数に対してメソッドが1文の時 の可
#&:演算子はダメ
Rangeは文字列にも使える
('a'...'e').to_a #=>["a","b","c","d"] ...は末尾入らない
数字の桁数を指定する
'0'.rjust(5)        #=> "    0"
'0'.rjust(5, '0')   #=> "00000"
配列の末尾を取得する
a = [1,2,3]
a[-1] #=> 3
配列の要素の置き換え
a = [1,2,3,4,5]
a[1,3] = 100
#=> [1,100,5] んなバカな...
配列の和差積の集合
a = [1,2,3]
b = [3,4,5]

a | b #=> [1,2,3,4,5]
a - b #=> [1,2]
a & b #=> [3]
多重代入で残りの全要素を配列として受け取る
e, f = 100, 200, 300
e #=> 100
f #=> 200

e, *f = 100, 200, 300
e #=> 100
f #=> [200, 300]
配列を合成する
a = [1,2]
b = [3,4]

a.push(b) #=> [1,2,[3,4]]
a.push(*b) #=> [1,2,3,4]
%記法で文字列の配列を簡潔に作る
['apple', 'melon', 'orange']
#=> ['apple', 'melon', 'orange']

%W!apple melon orange!

%W(apple melon orange)

%W(
    apple
    melon
    orange
)
配列の初期値
a = Array.new(5, 'nil')
#=>[nil, nil, nil, nil, nil]
a = Array.new(5){'default'}
#=>["default", "default", "default", "default", "default"]
#=>要素は全てちがうオブジェクト
joinで配列を連結させる
names = ['佐藤', '田中', '浜辺']
honorific = names.map{ |name| "#{name}さん"}
honorific.join('と') #=>"佐藤さんと田中さんと浜辺さん"
catchとthrowで大域脱出
last_names = ['佐藤', '田中', '浜辺']
first_names = ['太郎', '次郎', '美波']
catch :myfavorite do
    last_names.shuffle.each do |last_name|
        first_names.shuffle.each do |first_name|
            puts "#{last_name} #{first_name}さん"
            if last_name == "浜辺" && first_name == "美波"
                throw :myfavorite #シンボル
            end
        end
    end
end
1
0
2

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
1
0