Rails現場に入ってわからなかった文法・メソッドまとめ

#はじめに
独学未経験からRailsの現場に入ってみて、わからなかったRubyの文法・メソッドについてまとめていきます。※Railsのメソッドもあります。
誤り・参考になったなどあれば、コメントいただけると嬉しいです。
わからない文法が見つかり次第、その都度更新していきたいと思います。

#|| (論理演算子)
複数の条件の中で真にになったものを返す。
**ポイント**
・左から順に処理を実行する
・真になった時点で処理を終了する()

```rb
val = 2
val = 1 || 2 || 3 ||
     false true 実行されない
```

# ||=　(代入演算子)
左辺のオブジェクトが`nil`だった場合に、`1`を代入する。

```rb
val ||= 1
```
#**(変数名) (引数)

キーワード引数の書き方の一つ。
定義に存在しない値をハッシュオブジェクトとして受け取ることができる。

```rb
def hoge(a: 0,**num)
 [a,num]
end

p hoge(a: 1,x:10) => [1,{:x=>10}]
```

# : : (クラスの参照)
`::`を使用することで、クラスを参照・呼び出すことができる。


呼び出したいクラス

```rb
class V2::Hoge
end
```
呼び出す時

```rb
def hoge 
 run(V2::Hoge)
end
```


# &.(ぼっち演算子)
Rubyのプログラムは通常、`nil`の場合、エラーを返す。
エラーではなく、そのまま`nil`として、返すようにするのが、`&.`(通称ぼっち演算子)である。

```rb
オブジェクト&.メソッド
```
(例)`user`の`name`が `nil`だった場合、エラーではなく、`nil`を返す。

```rb
user&.name
```
# =~ (マッチする要素のインデックスを取得)
正規表現の一種。
対象のオブジェクトの中で最初にマッチする要素のインデックスを返す。
マッチする要素がないと`nil`を返す。

```rb
"hello" =~ /h/ => 0(hは0番目だから)
"hello" =~ /o/ => 4
"hello" =~ /ll/ => 2
"hello" =~ /a/ => nil
```
#<< (配列に要素を追加する)
配列に要素を追加することが出来る。

```rb
array = []
array << "hello"
p array =>  ["hello"]
array << "world"
p array =>  ["hello","world"]
```
すでに配列の中に要素があった場合、末尾に追加される。

#any?(真偽値を返す)
オブジェクトに対して、一つでもマッチするものがあれば`true`を返し、全て違ければ、`false`を返す。

```rb
 [1,2].any?{|a| a == 2 }
=> true
[1,2].any?{|a| a == 3 }
```

#キーワード引数
キーワード引数を使用することで、値に引数名を指定して、渡すことできる。
今回の例で言うと、キーワード引数は`name`になります。

```rb
def hello(name: )
 name
end

p hello(name: "hello") => hello　#キー・値を指定して、使用する
```
`x`と言う存在しないキーだとしても`**`を使用することで、受け取ることができる。


#attr_reader (インスタンス変数の読み取り)
インスタンス変数読み取り用メソッドが定義できる

このようにインスタンス変数を読み取るだけのメソッドを簡略化できるのが、`attr_reader`

```rb
def name
 @name
end
```
`attr_reader`メソッドを使用したやり方

```rb
attr_reader :name
```
同じ内容の意味になる。

#reject (偽である要素を返す)
各要素やブロックに対して、偽であったものに対して、処理を行い、配列として返す。


>```rb
(1..6).reject {|i| i % 2 == 0 } # => [1, 3, 5]
```
rubyリファレンス

#select (真である要素を返す)
条件を指定して、真を値のみを返すもの。
`reject`と逆の挙動になる。

```rb
(1..6).select {|i| i % 2 == 0 } # => [2, 4, 6]
```

#map(&: ) (省略記法)
よく見る書き方(以下)の省略した書き方になる。

よく見る書き方

```rb
hoge.map{|i| i.length)
```
`map(&:)`を用いた書き方

```rb
hoge.map(&:length)
```
同じ内容の意味になる。

#nonzero (0であれば、nilを返す)
0の時にnilを返しそれ以外の時は、selfを返す。

```rb
0.nonzero? => nil
10.nonzero? => 10
```

#readonly (モデルを読み取る)
読み込み専用としてモデルを取得する。

>```rb
モデル.readonly(値)
```
Railsドキュメント

# fetch (キーを指定して値を取得)
ハッシュに対してキーを指定することで、値を取り出すことができる。

```rb
オブジェクト.fetch(キー)
```
(例)

```rb
hoge = {"age" => 10}
p hoge.fetch("age")
=> 10
```

#result (処理結果を返す)
`オブジェクト.result`とすることで、オブジェクトの処理結果を返すことができる。

>```rb
erb = ERB.new("test <%= test1 %>\ntest <%= test2 %>\n")
test1 = "foo"
test2 = "bar"
puts erb.result
# test foo
# test bar
```
rubyリファレンス

#partition (条件で結果を分割する)
条件にみたすものとそうでないものに分けることが出来る。

```rb
[1,2,3,4,5].partition{|a| a%2 == 0}
=> [[2,4][1,3,5]]
```
・条件に合致するものが左辺に、それ以外が、右辺に分けられる。
・以下のように条件ごとに各変数に代入することもできる。

```rb
ary = [1,2,3,4,5]
match,unmatch = ary.partition {|a| a % 2 == 0}
p match => [2,4]
p unmatch => [1,3,5]
```
#present? (要素があればtrue)
値が存在していれば`true`になる。

```rb
1.present? => true
0.present? => true
nil.present? => false
"".present? => false
[].present? => false
```
`blank?`の逆の挙動になる。



#参考記事
[Ruby on Railsの現場でよく見る書き方【実例あり】](https://qiita.com/ryokky59/items/988f25fa1fb6b9aefa8e)
[Rubyのキーワード引数はシンボルっぽく定義するけど、シンボルそのものではない、という話](https://qiita.com/jnchito/items/74e0930c54df90f9704c)
[Ruby 3.0.0 リファレンスマニュアル ](https://docs.ruby-lang.org/ja/latest/doc/index.html)
[Railsドキュメント](https://railsdoc.com/)