Ruby , Ruby on Rails学習 一日目(条件分岐と繰り返し表現)

お疲れさまです！takumiです！
一日目なのは変わりませんが引き続きRubyの勉強頑張っていきましょう！！！

#IF文

〇〇の場合は□□するという条件分岐。

基本の型

```Ruby
if 条件 then
  #条件
end
```

具体例をみてみます。
基本的にはBoolean値(true or false)を判定して出力するか、しないかを判定しています。

```Ruby
score = 78

if score < 90 then
  puts "#{score}は90より小さい"
end

if score <= 78 then
  puts "#{score}は78以下です"
end

if score >= 78 then
  puts "#{score}は78以上です"
end

if score == 78 then
  puts "#{score}はぴったりです"
end

if score != 77 then
  puts "#{score}は77ではない"
end
```

また、文字を入力したらそれだけでtrue判定することも覚えておくといいかも。

```Ruby
# 文字が存在していること自体がtrue
if "テキスト"
  puts "#{score}はテキストが存在している"
end
```

IF文は一行にまとめて書くこともできるのでコンパクトにコードをかけるので便利ではある。

```Ruby
# 一行でも書ける
puts "#{score}は78" if score == 78
```

#else,elseif文

条件を満たさなかったときの処理を書くことが出来る。

```Ruby
if 条件 then
  # 条件を満たしたときの処理
else
  # 条件を満たさなかったときの処理
end
```

これはよくJavaScriptでも出てくるので説明することもないかと。

```Ruby
score = 78

if score == 87
  puts "#{score}は87です"
elsif score == 78 
  puts "#{score}は78です"
else
  puts "#{score}は87ではありません！"
end
```

このように条件を満たさなかったときに実行する処理も分岐して記述することが出来る。

#条件の組み合わせ,unless

且つという条件が複数あるときの条件分岐　&&

```Ruby
score = 70

if score > 60 && score < 90
  puts "60 < #{score} < 90"
end
```

またはという条件が片方を満たしているときの条件分岐　||

```Ruby
if score > 80 || score == 70
  puts "条件を満たす"
end
```

IF文はtrueのとき実行されますが、unlessはfalseのときに実行される。

```Ruby
# unlessはfalseのときに実行される
unless false 
  puts "false"
end
```

#三項演算子

ifとelseをまとめて書くことが出来る。
直感的ではないので使うのを嫌う人もいるが、読めるようにはしておこう。

```Ruby
score = 60
puts score == 60 ? "60です" : "60ではない"
```

#CASE文
==で場合分けする条件分岐のときはcaseで書き換えて書くことが出来る。
thenは省略出来る。

```Ruby
score = 78

case score
when  62 then
  puts "62"
when 56
  puts "56"
when 43
  puts "43"
else 
  puts "その他"
end  
```

ここで簡単なFIzzBuzz問題。

```Ruby
number = (1..100).to_a.sample
puts "Number: #{number}"

if number % 3 == 0 && number % 5 == 0
  puts "FizzBuzz"
elsif number % 5 == 0
  puts "Buzz"
elsif number % 3 == 0
  puts "Fizz"
else 
  puts number
end
```

%で余りの数が0である点がポイントですね。

#配列

配列は要素の順番をindexで管理しており、一番目を0から数える点に注意。
配列の作成

```Ruby
names = ["田中","工藤","山口"]
puts names
```
指定した配列の要素を取り出す

```Ruby
puts names[0]
```
指定した要素を変更する

```Ruby
names[0] = "Tom"
puts names[0]
```
配列の最後に要素を追加する

```Ruby
names.push("鈴木")
puts names
```
配列の最初に要素を追加する

```Ruby
names.unshift("寺田")
puts names
```

配列の中には文字列だけではなく数字や真偽値、配列を含めることが出来る。

```Ruby
array = [1, "aa", true, false, [2,3]]
puts array
```

また、要素を数えることが出来る

```Ruby
puts array.size
```

#Hash

複数のデータを管理する

IF文とHashの違い
・配列はindexで管理
・Hashはkeyで管理

Hashを定義する

```Ruby
scores = {math: 89,english: 58, history:38}
```
また、以下のような記述をすることも出来る。

```Ruby
{:math => 89,:english =>  58, :history => 38}
```
要素の取り出し

```Ruby
puts scores[:math]
```
要素の追加

```Ruby
scores[:japanese] = 87
puts scores
```

要素の値の書き換え

```Ruby
scores[:math] = 1000
puts scores
```

#繰り返し表現

配列から要素を一個ずつ取り出して表示する

```Ruby
scores = [98,34,56]

scores.each do |score|
  puts score
end
```

一行で上記を書く方法

```Ruby
scores.each { |score| puts score }
```

配列から取り出した要素を一個ずつ取り出して変更する

```Ruby
scores = [98,34,56]

scores.each do |score|
  puts score + 1
end
```

Hashから要素を取り出して表示する

```Ruby
scores = {math: 98,english:89,history: 34}
scores.each do |key , value|
  puts "#{key}は#{value}です"
end
```

・times(あまり使わないけど知っておこう)
timesは〇〇回繰り返すと回数を指定出来る。

```Ruby
# times　回数を指定して繰り返す
10.times do |i|
  puts "#{i}回目の Yeah!"
end
```

・while(あまり使わないけど知っておこう)
whileは〇〇までの間は繰り返すと条件化の中で動いてくれる

```Ruby
# while
num = 1
while num <= 10
  puts "Yeah!"
  num = num + 1
end
```

おまけにFizzBuzz問題。自分は解けました。

```Ruby
numbers =  (1..100).to_a

numbers.each do |number|
  if number % 15 == 0 
    puts "FizzBuzz"
  elsif number % 5 == 0
    puts "Buzz"
  elsif number % 3 == 0
    puts "Fizz"
  else 
    puts number
  end
end
```

おまけの不合格者をみつけるプログラム
入れ子にしてHashの繰り返しをかけるという点が重要。

```Ruby
member_scores.each do |name , scores|
  total_score = 0
  scores.each do |subject , score|
    total_score = total_score + score
  end

  if total_score <= 180
    puts "#{name}は不合格"
  end
end

```

今回はここまで！