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

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

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

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

```
###### if文は最後に評価された式を戻り値とする
```.rb
greeting =
    if
        
    elsif
        
    else
        
    end
```
###### if thenでコードを1行化できる
```.rb
if (処理) then (戻り値)
```
###### %記法
```.rb
%q!! #=> ' '
%Q!! #=> " "
%!! #=> " "
```
###### ヒアドキュメント
```.rb
a = <<TEXT
    文字列
TEXT
```
###### フォーマット文字列
```.rb
'%0.3f' % 1.2 #=>"1.200"
```
###### 指数表現
```.rb
2e-3 #=> 0.002
#2×10^-3
```
###### 条件演算子(三項演算子)
```.rb
message = n > 10 ? 'true' : 'false'
```
###### GC(ガベージコレクション)
使用されなくなったオブジェクトを回収し、
自動的にメモリ解放する

```.rb

```
###### エイリアスメソッド
名前が異なるだけで同じ実装のメソッド

```.rb

```
###### dvimodは商と余りを配列で返す
```.rb
14.divmod(3) #=> [4,2]
```
###### ブロック引数は不要なら省略
```.rb
numbers.each do
    sum += 1
end
```
###### ブロック内にrubyのコードを書ける
```.rb
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さん、勉強になります。

```.rb
numbers = [1,2,3,4]
sum = numbers.sum{ |n| n.even? ? n * 10 : n }
```
[参考：Array#sum (Ruby 2.7.0 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/2.7.0/method/Array/i/sum.html)

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

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

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

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

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

%W!apple melon orange!

%W(apple melon orange)

%W(
	apple
	melon
	orange
)
```
###### 配列の初期値
```rb
a = Array.new(5, 'nil')
#=>[nil, nil, nil, nil, nil]
a = Array.new(5){'default'}
#=>["default", "default", "default", "default", "default"]
#=>要素は全てちがうオブジェクト
```
###### joinで配列を連結させる
```rb
names = ['佐藤', '田中', '浜辺']
honorific = names.map{ |name| "#{name}さん"}
honorific.join('と') #=>"佐藤さんと田中さんと浜辺さん"
```
###### catchとthrowで大域脱出
```rb
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
```