0
0

More than 3 years have passed since last update.

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

Posted at

お疲れさまです!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

今回はここまで!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0