Ruby silver合格までにやったこと

①チェリー本を改めて1周した
②RExを9割以上になるまでやる
<li>https://rex.libertyfish.co.jp/</li>
③ネットにある問題はやっておく
<li>https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0</li>
<li>http://www.minituku.net/courses/1049510743/contents/775230600.html</li>
④問題を解いている中でわからないORしらないものは片っ端からGoogle先生にお世話になる。＆常にirbやエディタでコードを動かして挙動を確かめる。

なんとなく気になるところを自分なりにまとめていたものです👇

- マジックコメント
	エンコーディングは`coding: エンコーディング名`の前後に任意の文字を入れても良い＆大文字・小文字どちらでも可
- `0x`でスタートする数値は**16進数リテラル**
- `p [].size`は0になる。**nil**じゃない。
- `p [].to_i(to_sも)`は0ではなく**エラー**が起きる。
- `定数PI`はMathモジュールに定義されているもの
- `sprintf関数`は書式を揃えるときに使う。第1引数にはフォーマットを指定する。第2引数にフォーマットしたい値を指定する。
- Rubyでは**メソッド内**で**定数**を定義することができない。
- `Hash({})`で空のHashオブジェクトを生成できる
- Stringクラスに`to_h`、`to_a`のメソッドはない
- 例外処理　`StandardError`を継承しないクラスのインスタンスを`raiseメソッド`の引数に指定すると、`TypeError`が発生する
- `<=>`では**文字列**と**数値**は比較できない
- - メソッドと変数の探索順位は**変数**が先
- **abs**はIntegerクラスSelfの絶対値を返す　正・負の方向に関係なく考えた時の値　`-3`は`3`

- `require`
	- `require`するとファイルが評価される
		- 読み込んだものが`class`の場合、そのまま使える
		- 読み込んだものが`module`の場合、`include`しないと使えない
- `extend` (モジュール)
  
	- extend Module_name とすると、特異クラスにモジュールのメソッドが追加される

 do ... endと{ ... }を比べた場合、{ ... }の方が結合度が強い
-
```ruby
p [1,2,3,4].map do |e| e * e end
do ... endの結合度が弱いため、p([1, 2, 3, 4].map)が評価されます。
```

Time系
-
||||
|----|-----|-----|----|
| %x　| 日付(%m/%d/%y) | 01/05/15 |
| %D | 日付(%m/%d/%y) | 01/05/15 |
| %F | 日付(%Y-%m-%d) | 2021-11-01 |
|%r|時分秒とAM or PM(12時間制)|12:00:00 AM|
|%T|時分秒(24時間制)|03:46:11|
|%Y|西暦を表す数(9999)|2015|
|%y|西暦の下2桁(00-99)|15|
|%m|月を表す数字(01-12)|01|
|%d|日(01-31)|05|
|%-d|日(1-31)|2|
|%R|時分(24時間制)|03:46|
|%M|分(00-59)|00|
|%p|午前または午後(大文字)|AM|
|%P|午前または午後(小文字)|am|

![識別子・予約語.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/9074b327-b4be-ab38-93bc-fb32f37f267b.png)

![優先順位.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/b093b822-0cf5-982e-59ad-ec8b8a40e0e2.png)

判定式　＝＝　＝＝＝　eql? equal?違い
-
```ruby
a = 2
b = 2.0

p a == b      # => true
p a === b     # => true
p a.eql? b    # => false
nil.eql?(NilClass) #=> false
p a.equal? b  # => false
```

目についたメソッドまとめ
-
![表1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/fdcbfa5b-853d-4d00-ef7d-2265381159ec.png)
![表2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/3c22d5b7-a669-3c2b-fb1a-4b07ad2936d3.png)
![表3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/52d30249-ef20-6840-0c97-ead9ed3ae12d.png)
![表4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/f375bd4b-2774-eff9-2fa5-0fbcc5862fb8.png)
![表5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/179df625-7ddd-0253-2d8b-12543b2cf1a3.png)
![表6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/1786b80e-8ba0-fc7c-fb36-1cd5d5f07745.png)
![表7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/e6dff595-8d6a-d58a-0286-4912612f3dbe.png)
![表8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/9eccbcb7-a7b4-fef7-4fd9-8deae96d6e4d.png)
![表9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/f9d23be3-1c40-2f11-b5b8-0e995f5d025a.png)


gsub!とreplaceの違い
-
**gsub!**
`gsub(pattern, replace) -> String`
文字列中で pattern にマッチする部分全てを文字列 replace で置き換えた文字列を生成して返す。
replace:置き換える文字列のパターンを表す文字列か正規表現

```ruby
str = "aaabbb"
str = str.gsub!("a","c")
puts str　　　#=> cccbbb
```
**replace**
シーバーの値を新しい値に置き換えてしまうのはgsub!メソッドと同じ
gsub!メソッドのように部分的に一致する文字列を変更するということはできない。
**文字列全部**を新しい文字列全部に変更できる。

```ruby
str = "aaabbb"
str = str.replace("c")
puts str    # => c
```

%記法
-
| | | |
|--|--|--|
|％、％Q|ダブルクオートで囲う場合と同等|変数・定数の展開可能|
|％q|シングルクオートで囲う場合と同等|変数・定数の展開不可|
|％W|配列を作る|式の展開がされる|
|％w|配列を作る。配列の要素はスペース区切りで指定する。|式の展開はされない|
|％I|要素がシンボルの配列を作る。|式の展開がされる|
|％i|要素がシンボルの配列を作る。|式の展開がされない|
|％x|コマンド出力を行う。バッククオートで囲った場合と同等|
|％s|シンボル。|式の展開がされない|

メタ文字
-
- . 改行以外の任意の1文字にマッチする。ただしオプションmの指定によって複数行モードの場合は改行にもマッチする。
- [] []内のいずれかの1文字
- [^..] どの文字でもない
- a-z 英字にマッチする
- \w 英数字とアンダースコアにマッチする
- \W 英数字とアンダースコアではない文字にマッチする。(\w以外の1文字にマッチする)
- \s 空白文字にマッチする。(スペース、タブ、改行、復帰、垂直タブ)
- \S 空白文字ではない文字とマッチする。(\s以外の1文字)
- \d 0から9までの数字1文字にマッチする。
- \D 0から9までの数字ではない文字にマッチする。(\d以外の1文字)
- \A 文字列の先頭にマッチする。^とは違い改行の直後の文字ではない文字にマッチする。
- \z 文字列の末尾にマッチする。(改行含む)
- \Z 文字列の末尾にマッチする。(改行を含まない)

#Procクラス
ブロックを持ち運び便利なオブジェクトにしたもの
Proc.newで生成可能。作成されたProcオブジェクトはCallで呼び出し可能。
Procオブジェクトは変数は共有されない

仮引数を設定する事が可能

```ruby
proc1 = Proc.new { |par1| p par1 }
proc1.call("arg") #=> "arg"
```
**lambda**
Procオブジェクトを作る方法の一つ
Proc.newで作成されたオブジェクトと違う点

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447987/894e40bb-0fb8-6570-ed3f-eba5ed7784a3.png)

###＆演算子（積集合「＆」）

重複している要素は取り除かれ、共通する要素を取り出す。
```
a = [1, 2, 3]
b = [1, 3, 5]
a & b #=> [1, 3]
```

###＆＆演算子

&&は a と b がどちらも真のとき、最後に評価された b を出力する
```
a && b #=> [1, 3, 5]
```

#&, &&, |, ||演算子それぞれの動きの違い
###｜演算子（和集合「｜」）

重複している要素は取り除かれ、重複している要素をまとめて出力する。

```ruby
a = [1, 2, 3]
b = [1, 3, 5]
a | b #=> [1, 2, 3, 5]
```

###｜｜演算子

||は a と b がどちらかが真のとき、最初に評価された a を出力する

```ruby
a = [1, 2, 3]
b = [1, 3, 5]
a || b #=> [1, 2, 3]
```
a = nilの場合右辺の処理が行われる

```ruby
a || b #=> [1, 3, 5]
```

よく使われる特殊文字
-

- \n：改行 　LF文字(Line Feed)
- \r：改行　CR文字(Carriage Return)
- \t：タブ　


10進数以外の整数リテラル
-
- 2進数の場合は0b
- 8進数の場合は0
- 16進数の場合は0x


unless文
-
条件式が偽になったときにだけ処理を実行する。unless文でelseは使えるがelsifは使えない。thenも使える。


お世話になった　偉大な記事
<li>https://qiita.com/ffggss/items/0bab2a1e80e941378b49</li>
<li>https://qiita.com/kidach1/items/651b5b5580be40ad047e</li>
<li>https://melborne.github.io/2012/06/18/i-am-inject-lover-too/</li>