【自分用】Rubyの基礎を振り返る。①

# はじめに
今回はRubyに関して簡単にまとめていきます。
自分の復習用。自分で見て分かるようにまとめてあります。

# Ruby
プログラミング言語の１つ。記述がシンプルで分かりやすい。
## Rubyの特徴
① Webアプリケーションの開発に特化している。
② データベースとの連携が容易。
③ 世界で幅広く使用されている。
④ 文法が覚えやすい。

# Rubyのあれこれ
### rubyコマンド
Rubyに関するさまざまな操作が実行できる。
```
ruby sample.rb
```

### irb
ターミナルから直接rubyを実行できる。

### 文字列
プログラミングの中で文字を扱うための値。
`"ダブルクォーテーション"`か`'シングルクォーテーション'`で囲む。
文字列を連結する場合は"Hello" + "World"

### 数値
```
# 整数
10

# 負の値
-10

# 小数
3.14
```
クォーテーションで囲まない。

### メソッド
プログラミングにおける何らかの処理をまとめたもの。

### lengthレングスメソッド
文字列をカウント。
後に記述する配列にも使える。
```
### 文字列の文字数を出す
irb(main):001:0> "Hello World".length
=> 11
```

### 代数演算子
| 演算子 | 意味 |
|:-:|:-:|
| + | 足し算  |
| - | 引き算  |
| * | かけ算  |
| / | 割り算  |
| % | 割り算の余り  |

### to_sメソッド
数値が持つメソッド。数値を文字列に変換する。
```
# 数値「20」にto_sメソッドをつけて実行
irb(main):001:0> 20.to_s
=> "20"
```
文字列として連結する際などに使用する。

### 式展開
文字列の中に式を入れる。
文字列中で#{式}とする。
```
# 式展開で文字列に式を含む
irb(main):001:0> "今日で#{20}歳になりました"
=> "今日で20歳になりました"
```
※**シングルクォーテーションでは式展開されない**

### 変数
値を入れるもの。`変数名`として名前をつけることが出来る。
`number = 1`
この場合numberは宣言（変数名）、1は定義。
`=`は代入を意味する。代入演算子とも呼ばれる。
puts numberで1を出力する。

### 再代入
```
# 変数に代入
irb(main):001:0> number = 1
=> 1

# 変数を出力
irb(main):002:0> number
=> 1

# 変数に再代入
irb(main):003:0> number = 2
=> 2

# 変数を出力
irb(main):004:0> number
=> 2
```

### 自己代入演算子
| 演算子 | 意味 |
|:-:|:-:|
| += | 足した値を自身に代入 |
| -= | 引いた値を自身に代入 |
| *= | かけた値を自身に代入 |
| /= | 割った値を自身に代入 |

### 変数の命名規則
1, 変数の中身がなにか分かる
2, 小文字で始める
3, _で始めない
4, 数字で始めない
5, 日本語を使わない
6, スペースを含めない
7, 予約語を使用しない

### puts
putsに続けて値を記述すると、その値をターミナルに出力する。

### getsメソッド
ターミナルに値の入力機能を起動するメソッド。
```
# 入力機能が起動、入力された値が文字列として返る
name = gets

puts name
```

### chompメソッド
文字列が使用できるメソッド。
```
input = gets.chomp

puts "入力した値は#{input}です"
```

### 配列
１つの変数で複数の値を持つことのできる値。複数の値を入れることができる。
要素の塊。要素は配列の中のデータのこと。
例えばnameという配列があれば、なかの太郎、花子、一郎などが要素。
```
name = ["太郎", "花子", "一郎"]
```

### 配列演算子(<<)
```
name = ["太郎", "花子", "一郎"]
name << "二郎"
# 出力
puts name
```

### 添字
配列に割り振られた番号。
```
name = ["太郎", "花子", "一郎"]
name << "二郎"

puts name
puts name[1]
```
[]は0から入力でき、[1]には花子が出力される。
```
name = ["太郎", "花子", "一郎"]
name << "二郎"
name[1] = "三郎"

puts name
puts name[1]
```
この場合花子が三郎に変更される。

### ハッシュ
ハッシュは、「データ」とそれに対応する「名前」のセットを要素として持つ値。
データを`バリュー`それに対応する名前を`キー`と呼ぶ。
```
変数 = { キー1 => バリュー1, キー2 => バリュー2, キー3 => バリュー3 }
```
バリューで管理する方式をキーバリューストアと呼ぶ。

### シンボル
コンピューターが処理するときには数値として扱われる値。ハッシュのキーとしてよく用いる。
```
hash = { :name => "Hanako" }
hash = { name: "Hanako" } #常使用
```
出力は配列と同じ形。カッコが違う。
```
teacher[:name] = "Hanako"
puts teacher
```

### 比較演算子
| 演算子 | 意味 |
|:-:|:-:|
|  > | より大きい  |
|  >= | 以上  |
|  < | より小さい  |
|  <= | 以下  |
| == | 等しい  |

### true/false
真偽値。trueかfalseで返す。
```
irb(main):001:0> 1 < 20
=> true

# 5は5以下か？
irb(main):002:0> 5 <= 5
=> true

# 1は20より大きいか？
irb(main):003:0> 1 > 20
=> false

# 5は5以上か？
irb(main):004:0> 5 >= 5
=> true

# 2 × 5は10と等しいか？
irb(main):005:0> 2 * 5 == 10
=> true

# 10は20と等しいか？
irb(main):006:0> 10 == 20
=> false
```

###　論理演算子（not演算子）
値が等しくない場合trueを返す。!を使用。
```
# 2 × 3 は6ではないか？
irb(main):001:0> 2 * 3 != 6
=> false
```

### if文
条件式が正しいかどうかで処理を分岐させる。
```
value = gets.to_i

if value > 0
  puts "値は正です"
elsif value < 0
  puts "値は負です"
else
  puts "値は0です"
end
```
elsifは条件式がfalseだった場合の処理を記述。その後も条件式を追加できる。
elseはそれ以外。

### timersメソッド
指定した数値の回数だけ繰り返し処理を行えるメソッド。
```
3.times do
  # 繰り返す処理
end
```
この場合、3回処理を繰り返す。
ブロック
特定のメソッドを呼び出す際に、処理のまとまりを引数として渡すことができる。
```
数値.times do |ブロック変数|
  # 繰り返す処理
  # 繰り返しの回数を使う場合、ブロック変数を使用する
end
```
### eachメソッド
配列やハッシュの要素1つ1つに対して、要素の数だけ繰り返し処理が行えるメソッド。
```
fruits = { 'りんご' => 150, 'オレンジ' => 200, 'バナナ' => 100, 'パイナップル' => 300 }
fruits.each do |key, value|
  puts "#{key} : #{value}"
end

# 実行結果
#=> りんご : 150
#=> オレンジ : 200
#=> バナナ : 100
#=> パイナップル : 300
```

### メソッドの定義
```
def メソッド名
  # 実行する処理
end

メソッド名 #メソッドの実行
```

### 戻り地
戻り値（もどりち）は、メソッドから呼び出した場所に渡される値。
```
def name
  "一郎"
  "二郎"
  "三郎"         # 最後の行が戻り値
end

puts name   # => 三郎
```

### return
returnを利用した時点で戻り値が決まる。
```
def name
  "一郎"
  "二郎"
  "三郎"
  return "四郎"  # ここで処理が終わる
  "五郎"
  "六郎"
end

puts name   # => 四郎
```

### スコープ
スコープは、定義した変数が使える範囲。
1, メソッド外の変数はメソッド内で使えない。
2, メソッド内で定義された変数はメソッドの外では使えない。

### 引数
メソッドなどに渡すことのできる値。
```
def メソッド名(仮引数)
  # 処理
end

# メソッドの呼び出し
メソッド名(実引数)
```

# 終わりに
ちょっと今日は体力切れ。。
明日はクラスやインスタンス中心にまとめます。