お疲れさまです!takumiです!
一日目なのは変わりませんが引き続きRubyの勉強頑張っていきましょう!!!
#IF文
〇〇の場合は□□するという条件分岐。
基本の型
if 条件 then
#条件
end
具体例をみてみます。
基本的にはBoolean値(true or false)を判定して出力するか、しないかを判定しています。
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判定することも覚えておくといいかも。
# 文字が存在していること自体がtrue
if "テキスト"
puts "#{score}はテキストが存在している"
end
IF文は一行にまとめて書くこともできるのでコンパクトにコードをかけるので便利ではある。
# 一行でも書ける
puts "#{score}は78" if score == 78
#else,elseif文
条件を満たさなかったときの処理を書くことが出来る。
if 条件 then
# 条件を満たしたときの処理
else
# 条件を満たさなかったときの処理
end
これはよくJavaScriptでも出てくるので説明することもないかと。
score = 78
if score == 87
puts "#{score}は87です"
elsif score == 78
puts "#{score}は78です"
else
puts "#{score}は87ではありません!"
end
このように条件を満たさなかったときに実行する処理も分岐して記述することが出来る。
#条件の組み合わせ,unless
且つという条件が複数あるときの条件分岐 &&
score = 70
if score > 60 && score < 90
puts "60 < #{score} < 90"
end
またはという条件が片方を満たしているときの条件分岐 ||
if score > 80 || score == 70
puts "条件を満たす"
end
IF文はtrueのとき実行されますが、unlessはfalseのときに実行される。
# unlessはfalseのときに実行される
unless false
puts "false"
end
#三項演算子
ifとelseをまとめて書くことが出来る。
直感的ではないので使うのを嫌う人もいるが、読めるようにはしておこう。
score = 60
puts score == 60 ? "60です" : "60ではない"
#CASE文
==で場合分けする条件分岐のときはcaseで書き換えて書くことが出来る。
thenは省略出来る。
score = 78
case score
when 62 then
puts "62"
when 56
puts "56"
when 43
puts "43"
else
puts "その他"
end
ここで簡単なFIzzBuzz問題。
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から数える点に注意。
配列の作成
names = ["田中","工藤","山口"]
puts names
指定した配列の要素を取り出す
puts names[0]
指定した要素を変更する
names[0] = "Tom"
puts names[0]
配列の最後に要素を追加する
names.push("鈴木")
puts names
配列の最初に要素を追加する
names.unshift("寺田")
puts names
配列の中には文字列だけではなく数字や真偽値、配列を含めることが出来る。
array = [1, "aa", true, false, [2,3]]
puts array
また、要素を数えることが出来る
puts array.size
#Hash
複数のデータを管理する
IF文とHashの違い
・配列はindexで管理
・Hashはkeyで管理
Hashを定義する
scores = {math: 89,english: 58, history:38}
また、以下のような記述をすることも出来る。
{:math => 89,:english => 58, :history => 38}
要素の取り出し
puts scores[:math]
要素の追加
scores[:japanese] = 87
puts scores
要素の値の書き換え
scores[:math] = 1000
puts scores
#繰り返し表現
配列から要素を一個ずつ取り出して表示する
scores = [98,34,56]
scores.each do |score|
puts score
end
一行で上記を書く方法
scores.each { |score| puts score }
配列から取り出した要素を一個ずつ取り出して変更する
scores = [98,34,56]
scores.each do |score|
puts score + 1
end
Hashから要素を取り出して表示する
scores = {math: 98,english:89,history: 34}
scores.each do |key , value|
puts "#{key}は#{value}です"
end
・times(あまり使わないけど知っておこう)
timesは〇〇回繰り返すと回数を指定出来る。
# times 回数を指定して繰り返す
10.times do |i|
puts "#{i}回目の Yeah!"
end
・while(あまり使わないけど知っておこう)
whileは〇〇までの間は繰り返すと条件化の中で動いてくれる
# while
num = 1
while num <= 10
puts "Yeah!"
num = num + 1
end
おまけにFizzBuzz問題。自分は解けました。
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の繰り返しをかけるという点が重要。
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
今回はここまで!