Rails Tutorial 第4章 早見表

[Rails Tutorial 第4章（Ruby基礎編）](https://railstutorial.jp/chapters/rails_flavored_ruby?version=5.1#cha-rails_flavored_ruby)で学んだ内容を備忘録のためアウトプットして行きます。
一度Tutorialを読んだ人が簡単に振り返れればと思います。

##Rubyならではの使い方
- Rubyはあらゆるものがオブジェクト。
    - nilですらオブジェクト
- 後続if
    - `puts "x is not empty" if !x.empty?`
- 後続unless
    - `puts "x is not empty" unless x.empty?`
- オブジェクト.to_s.empty?
    - nilも含めて文字列があるかを検証可能
- !!オブジェクト
    - nilも含めてあらゆるオブジェクトを強制的に論理値に変換可能。
- return
    - メソッド内に明示的に記載がない場合は、最後に置かれた式を返り値とする。
- メソッド.nil?
    - メソッドが返り値を返しているかどうかを判定するメソッドチェーン。
- Rubyは改行と空白を区別していない。
- 0..9
範囲指定

# 超基礎
- #{変数}
    - 変数の中身をそのまま展開できる。
    - 例） `puts "My name is #{name}"`
- puts
    - 出力（改行あり）
- print
    - 出力（改行なし）
- if elsif end
    - 条件文

###▼ 全オブジェクトに利用可能
- .empty?
    - 空かどうか
- .nil?
    - nilかどうか
- .include?()
    - 含まれているかどうか

###▼ Stringオブジェクト
- .length
    - 文字列オブジェクトから文字数取得
- .reverse
    - 文字列オブジェクトを反対にする
- .split('区切り文字')
    - 文字列オブジェクトを区切り文字で区切る（デフォルトは空白）
- .join(', ')
    - カッコ内の文字列で文字列を結合できる。

###▼ 論理式
- &&
    - and条件
- ||
    - or条件
- !
    - not条件


###▼ キャスト（型変換）
- to_s
    - 文字列に変換
- to_a
    - 配列に変換 (0..9).to_aとか("a".."z").to_aとか

#モジュール
- `module モジュール名`
    - 関連したメソッドをまとめることができる。
- `include`
    - メソッドを使うとモジュールを呼び出せる。

※ ヘルパーモジュールに関しては、自動的に全てのビューで利用できるようになっている。

## 配列
~~~~
a = [42, 8, 17]
a[0]
=> 42
a[-1]
=> 17
a.first
=> 42
a.last
=> 17
a.second
=> 8
a.sort
=> [8, 17, 42]
a.reverse
=> [17, 8, 42]
a.shuffle
=> [17, 42, 8]
~~~~

上記のメソッドはaの配列の中身自身には影響を与えない。
影響を与える場合は「!」をつける。

~~~~
a.reverse!
a.sort!
a.shuffle!
~~~~

~~~~
a.push(6)
=> [42, 8, 17, 6]
a << 7
=> [42, 8, 17, 6, 7]
a << "foo" << "bar"
=> [42, 8, 17, 6, 7, "foo", "bar"]
~~~~

Rubyでは、配列内で異なる方が共存できる特徴がある。

~~~~
a.join
=> "4281767foobar"
~~~~

~~~~
a.join(',')
=> "42, 8, 17, 6, 7, foo, bar"
~~~~

# ブロック
.eachメソッド

▼ 一行でブロック内容が終わる場合は波括弧
(1..5).each{ |i| puts 2*i }

▼ 複数行にわたって行く場合はdo endを利用する
(1..5).each do |i|
 puts 2*i
end

.timesメソッド
単純な繰り返しメソッド。
>>3.times { puts "hello" }
"hello"
"hello"
"hello"

.mapメソッド
ブロック内で宣言した引数に対して効果を適用させて結果を返すメソッド。
(1..5).map { |i| i**2 }
=> [1, 4, 9, 16, 25]

上記の簡単な省略記法も割と一般的。
%w[A B C].map(&:downcase)
=> ["a", "b", "c"]

%w
スペースで区切られた文字列を配列にする
%w[1 2 3]
=> ["1", "2", "3"]

# ハッシュ（連想配列）
配列と異なるのは、並び順がないということ。

▼ パターン１
user = { "first_name" => "Michael", "last_name" => "Hartl" }
=> {"last_name"=>"Hartl", "first_name"=>"Michael"}

▼ パターン２
user = {}
=> {}
user["first_name"] = "Michael"
=> "Michael"
user["last_name"] = "Hartl"
=> "Hartl"

▼ パターン３（二番人気）
user = { :name => "Michael Hartl", :email => "michael@example.com" }
=> {:name=>"Michael Hartl", :email=>"michael@example.com"}

▼ パターン４（一番人気）
user = { name: "Michael Hartl", email: "michael@example.com" }
=> {:name=>"Michael Hartl", :email=>"michael@example.com"}

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180679/e91ceacc-c9f2-52a0-555a-0dacd44dc132.png)

↑ハッシュの中のハッシュという表現もかなり使われる手法

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180679/2f5a790a-54c9-a81f-e308-650a31c4b2e0.png)

↑ハッシュのeachメソッドでは一つの「キーと値のペア」ごとに処理が繰り返される。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180679/a0072108-66b3-7095-1ce6-6192f2945613.png)

ハッシュ.merge(ハッシュ）
とすることで統合することができる。
ハッシュキーが同じ場合は上書きされる。

# クラス
Rubyはオブジェクト指向なので、
クラス（設計図）を使ってオブジェクトのインスタンスを作成できる。

なお、クラスに対してメソッドが呼び出される場合はクラスメソッド、
インスタンスに対して呼び出されるメソッドはインスタンスメソッドと呼ばれる。

.class
オブジェクトのクラスを調べる
.superclass
クラスのスーパークラスを調べる
一番上の階層はBasicObject。

# 組み込みクラスの変更
基本クラスの拡張が可能で、クラスに自由にメソッドを追加できる。
ただ、基本的には無作法とされているため、
よほど基本クラスに追加する必要のある場合でなければやらない。

initializeメソッド
これはインスタンスを作成するとき（newするとき）に自動的に呼び出されるメソッド。

attr_accessor （変数やシンボル）
データを取り出すメソッドと代入するメソッドをそれぞれ定義してくれる。