復習　自分用

## はじめに

Rubyの基礎中の基礎を自分用にまとめました。


## 変数とは

変数は、文字列などのオブジェクトを作成したときに、そのオブジェクトにつける名札のようなものです。 変数があることで、複雑なデータでも正しく識別されて簡単に呼び出せるようになります。 変数名には、規約が存在します。
例） name = (代入したいもの)
* 変数名の１文字目は、小文字のアルファベットか_(アンダースコア)のみ使用可能
* 数字始まりはNG（例. 1function）
* 複数の単語をつなげる場合には、スネークケースで記述する （例. first_name）


## 定数とは

定数とは先ほどの変数とは異なり、あらかじめ変更しないことが保証された数値やデータに名札を付けたようなものです。
定数には、始まりが大文字、_区切り(スネークケース)などのルールがあります。
例) LAST_NAME = (代入したいもの)
定数は後から書き換えることができません。記述のしかたは、変数と同様です。


## 変数展開とは

変数の中身を展開することです。
変数展開を用いると、元の変数がどのような型であっても文字列型に変換してくれます。
ただし、変数展開はダブルクォーテーションで囲った場合のみ機能し、
シングルクォーテーションで囲った場合は変数ではなく文字列として認識されてしまいます。
変数展開を用いる際は、ダブルクォーテーションを使わないといけないということは覚えておきましょう。
これを使うと自動的に文字列に変換してくれる。
"#{変数}"

## 配列

配列を使うと、複数のデータをまとめて保存できます。
配列には、どのようなオブジェクトでも代入でき、同じ配列の要素に異なった種類のオブジェクトを代入することも可能です。
つまり、データ型は問われませんので、文字列でも数値でも代入できます。

例)
```ruby:Practice.rb
names = ["Git", "HTML", "CSS"]
puts names[1]
```

実行結果は"HTML"が表示されます。

## ハッシュ

ハッシュは、キーと値をセットで保存できるデータの集合です。 配列では各要素にインデックス番号が割り振られますが、ハッシュでは任意の値（キー）を割り振ることができます。

```ruby:Practice.rb
weight = {"太郎" => 55, "二郎" => 69, "三郎" => 45}
puts weight["二郎"]
```

実行結果は"69"が表示されます。

ハッシュからデータを呼び出すには、出力したい値のキーを指定します。
※注意：ここで使用する括弧は、入力は {} （波括弧）、出力は [] （角括弧）です。注意しましょう。

## 比較演算子

「比較演算子」は、値を比較して判定する際に使います。
比較演算子による演算の結果、trueかfalseが返り値として返ってきます。
下記の4つは、数値の大小を比較する演算子です。
<    右辺の方が大きい
<=  右辺の方が大きい、または等しい
>    左辺の方が大きい
>=  左辺の方が大きい、または等しい
==  右辺と左辺が等しい
!=   右辺と左辺が等しくないとき

## 論理演算子

「論理演算子」は、2つ以上の条件を判定する際に使います。
論理演算子による演算の結果、真または偽の値が返り値として返ってきます。
!       否定
&&  どちらの条件も正しければtrue (〜かつ〜)
||      どちらかの条件が正しければtrue(〜または〜）

if文

```ruby:Practice.rb
if 条件式1
  処理1  # 条件式1の返り値が真だったら処理1を行う
elsif 条件式2
  処理2  # 条件式1の返り値が偽、かつ条件式2の返り値が真だったら処理2を行う
elsif 条件式3
  処理3  # 条件式1と条件式2の返り値が偽、かつ条件式3の返り値が真だったら処理3を行う
# ...(中略)...
elsif 条件式n
  処理n  # 条件式1～条件式n-1の返り値が全て偽、かつ条件式nの返り値が真だったら処理nを行う
else
  処理x  # 条件式1～条件式nの返り値が全て偽だったら処理xを行う
end
```

## 繰り返し処理

「gets」 ユーザーに文字を入力されるメソッド

(文字列ver)

```ruby:Practice.rb
puts "あなたの名前は何ですか？"
name = gets.chomp
puts "こんにちは、#{name}さん！"
```

(整数ver)

```ruby:Practice.rb
puts "足し算を行います"
puts "1つ目の数字を入力してください"
num1 = gets.chomp.to_i
puts "2つ目の数字を入力してください"
num2 = gets.chomp.to_i
sun = num1 + num2
puts "答えは#{sun}です"
```

補足：
(case)文を使用した自分で作ったターミナルで使える電卓

```ruby:Practice.rb
calc = ["足し算", "引き算", "掛け算", "割り算"]

puts "計算を行います"

loop do
  puts calc.join(",") + "の中から選んでください"

  total = gets.chomp.to_s

  puts "1つ目の数値を入力してください"
  num1 = gets.chomp.to_i
  puts "2つ目の数値を入力してください"
  num2 = gets.chomp.to_i

  case total

  when calc[0]
  result = num1 + num2
  puts "答えは#{result}です"
  break

  when  calc[1]
  result = num1 - num2
  puts "答えは#{result}です"
  break

  when calc[2]
  result = num1 * num2
   puts "答えは#{result}です"
   break

  when calc[3]
  result = num1 / num2
   puts "答えは#{result}です"
   break

  else
   "無効な値です。もう一度お試しください"
  end
 end
```

## while式

「while式」は、繰り返し処理を行いたいときに使います。指定した条件式が真（true）の間、繰り返し実行されます。

while 条件 do
  処理  # 条件がtrueの間処理を繰り返す
end

```ruby:Practice.rb
dice = 0                     #変数diceに0を代入。ここで初期値の設定をする
while dice != 10 do　          #diceが10ではない間、diceの初期値は0なので条件を満たす。
  dice = rand(1..10)　         #1~10の数字がランダムに表示される。10が表示されたら終了。
  puts dice
end
```

結果
```ec2-user:~/environment/ruby
3
7
2
2
1
10
```

## for式

「for式」も繰り返し処理を行いたいときに使います。
while式では、指定した条件によって繰り返しの有無が判断されますが、
for式では、指定したオブジェクトから順に値を取り出しながら繰り返されます。
例えば、1~10の数字を指定した場合、1から順に値を取り出しながら10の処理が終わるまで繰り返されます。

基本の書き方
 for 変数 in 範囲、ハッシュ、配列などを指定 do
  処理
end

for ～ in ～ do 文を記述することで、endまで記述した処理が繰り返し実行されます

```ruby:Practice.rb
 for i in 1..10 do
   puts i
 end
```

結果
```ec2-user:~/environment/ruby
1
2
3
4
5
6
7
8
9
10
```

## each文

「eachメソッド」は、オブジェクト内の要素を順に取り出すメソッドです。
eachメソッドで記述することで、データの先頭から順に繰り返して処理が行われます。

書き方
（範囲、ハッシュ、配列などを指定）.each do |変数|
  実行する処理
end

```ruby:Practice.rb
amounts = {"りんご": 10, "みかん": 3, "いちご": 15}
amounts.each do |fruit, amount|      #ハッシュの内容を順にキーをfruit、値をamountに代入、繰り返す。
  puts "#{fruit}は#{amount}個です"
end

```

結果
```ec2-user:~/environment/ruby
りんごは10個です
みかんは3個です
いちごは15個です
```

## break

繰り返し処理を中断するには、「break」を使います。 breakは、while、for、eachなどの繰り返し文の中で利用します。

```ruby:Practice.rb
i = 1
while i <= 10 do
  if i == 5
    puts "処理を終了します"
    break  # iが5になると繰り返しから抜ける
  end
  puts i
  i += 1 # iの数値に1を加えたい時は、i = i +1と書く代わりに、i += 1と書くことができます。
end
```

結果
```ec2-user:~/environment/ruby
1
2
3
4
処理を終了します
```


## 要約
1. メソッド: Rubyでの処理命令。引数: メソッドに渡す値。
2. 型変換: 文字列型と整数型を変換する方法。to_s（整数→文字列）、to_i（文字列→整数）。
3. 変数: オブジェクトに名札を付ける。変数名に規約あり。
4. 定数: 変更しないデータに名札を付ける。大文字始まり、スネークケースで記述。
5. 変数展開: 変数の中身を展開。ダブルクォーテーションで囲む必要がある。
6. 配列: 複数のデータをまとめて保存する。
7. ハッシュ: キーと値をセットで保存するデータの集合。
8. 比較演算子: 値を比較して判定する。
9. 論理演算子: 2つ以上の条件を判定する。
10. if文: 条件式によって処理を分岐する。
11. 繰り返し処理: getsメソッドでユーザーからの入力を受け取る。
12. while式: 条件が真の間、繰り返し処理を行う。
13. for式: 指定したオブジェクトから順に値を取り出しながら繰り返す。
14. each文: オブジェクト内の要素を順に取り出すメソッド。
15. break: 繰り返し処理を中断する。