Rubyのまとめ2(真偽値からFizzBuzzまで)

1から続く

真偽値と論理演算子(&&||)

真(true)となる例

trueそのもの すべての数値1,0,−1
すべての文字列’abc’ ’true’ ’false’

論理積(and)

・a && b
aとbがともに真の場合に真

論理和(or)

a||b
aかbの少なくとも1つが真の場合に真

and, or, not
↑↓似ているがand, or, notは、&&, ||, !,と比べて優先順位が低い
&&, ||, !

基本的には混在させない

t1 = true
=> true

t2 = true
=> true

fi = false
=> false

1 = false
=> false

f2 = false
=> false

t1 && t2
=> true

t1 and t2
=> true

t1 && f1
=> false

t1 and f2
=> false

t1 || t2
=> true

t1 or t2
=> true

t1 || f2
=> true

t1 or f2
=> true

f1 || f2
=> false

!t1
=> false

not(t1)
=> false

!f1
=> true

not(f1)
=> true

優先順位で変わってしまうため

!t1 || t1
=> true

↓ ||が先に処理されtrueだったものがnotで反転した
not t1 || t1
=> false

↓&&が先に処理されfalseになり||でtrueになった
t1 || t2 && f1
=> true

andは最後なのでfalse
t1 or t2 and f1
=> false

そんなときはカッコを使って明示的に優先順位を指定しよう!

(t1 || t2) && f1
=> false

条件分岐if

if 条件式1
条件式1が真の時に実行する処理
elsif 条件式2
条件式1が偽で条件式2が真の時に実行する処理
elsif 条件式3
条件式1及び条件式2が偽で条件式3が真の時に実行する処理
else
全ての条件式が偽の時に実行する処理
end

例1:テストの結果によって通知表の成績をコンソールに出力する

# 90点以上A
# 80点以上B
# 60点以上C
# 60点未満D

score = 90
  if score >= 90
    puts 'A'
  elsif score >= 80
    puts 'B'
  elsif score >= 60
    puts 'C'
  else
    puts 'D'
  end

Aが出力される

例2:商品の内容を出力

その他 : ‘Not found’

product = 'fish'
  if product == 'meat'
    puts 'meat'
  elsif product == 'fish'
    puts 'fish'
  elsif product == 'vegetable'
    puts 'vegetable'
  else
    puts 'Not found'
end

fishが出力される

==でないとエラーが生じる

応用) 入場料金の計算

大人18歳以上10,000円
中人6歳以上18歳未満5,000円
小人6歳未満1,000円

age = 19
  if age >= 18
    puts '10,000'
  elsif age >= 6
    puts '5000'
  else puts '1,000'
end

unless 条件式
条件式が偽(false)の時に実行する処理
end

例3: 変数nの値が0でなければ、”Not zero.”
と出力するプログラムをifをつかって記述
※ヒント:値が0か判定するには、zero?メソッドが使える

# n = 0
# if !n.zero?
# puts ‘Not zero.’
# end

# unlessを使おう

n = 0
  unless n.zero?
    puts 'Not zero.'
    puts 'This is zero'
end

This is zeroが出力される。
※無理にunlessを使う必要はない。読みやすいと思う場合はifでOK

Case文

case 対象オブジェクト
when 値1
値1と一致する場合に行う処理
when 値2
値2と一致する場合に行う処理
when 値3
値3と一致する場合に行う処理
else
どの値にも一致しない場合に行う処理
end

例4:商品の内容を出力

if文だと

product = 'fish'
  if product == 'meat'
    puts 'meat'
  elsif product == 'fish'
    puts 'fish'
  elsif product == 'vegetable'
    puts 'vegetable'
  else
    puts 'Not found'
end

#case文の場合

product = 'tuna' 
  case product
    when 'pork'
      puts 'meat'
    when 'tuna'
      puts 'fish'
    when 'tomato'
      puts 'vegetabale'
    else
    puts 'Not Found'
end

fishが出力される。

caseのほうがよりシンプルになるがifとの違いに注意!

メソッドとは?

複数の処理を1つにまとめて扱いやすくしたもの
・クラス内に定義する≒クラス内に定義する関数

def メソッド名(引数1, 引数2, …)
実行する処理
実行する処理
end

例4:Hello,World!と出力するメソッドを記述

メソッドを実行する。メソッド名は、hello_worldとする

def hello_world
  puts 'Hello,World!'
end

hello_world

‘Hello,World!’が出力される

引数ありの場合
2つの数字の足し算を行い、その値を返すメソッドを記述
メソッドを実行する。メソッド名はaddとする

def add(x, y)
  x + y
end

puts add(10, 1)

11が出力される

returnはJavaScriptと違っていらないよ

メソッドの命名規則

先頭に数字を使うとエラー、マジックナンバーもやめよう
2単語以上は_を使う(キャメルケース)→Hello_World!

引数に渡された動物名によって適切な鳴き声を返すメソッドcryを作成して呼び出す
# dog : ‘bow’ cat : ‘meow’ cow : ‘moo’
# 引数animal.
# 戻り値を出力する

def cry(animal)
  if animal == 'dog'
    puts 'bow'
  elsif animal == 'cat'
    puts 'meow'
  elsif animal == 'cow'
    puts 'moo'
  else puts '???'
  end
end
puts cry('cat')

meowが出力される

※ポイント:引数ありの場合def cry(animal)のように最初に()で設定する。
あとのif文は変わりがない。最後はputs cry()でanimalは中で代入されるから不要

FizzBuzzメソッド(とても有名)
# 3で割り切れる数値を引数に渡すと、’Fizz’を返す
# 5で割り切れる数値を引数に渡すと、’Buzz’を返す
# 15で割り切れる数値を引数に渡すと、’FizzBuzz’を返す
# それ以外の数値は、その数値を文字列に変えて返す。
# 補足
# メソッド名はFizz_Buzzとする。
# 引数名はnとする
# 引数nは1以上の整数が入る
# puts Fizz_Buzz(1)のようにして、メソッドを呼び出し、動作が正しいか確認しよう

FizzBuzzメソッド

3で割り切れる数値を引数に渡すと、’Fizz'を返す
5で割り切れる数値を引数に渡すと、’Buzz'を返す
15で割り切れる数値を引数に渡すと、’FizzBuzz'を返す
それ以外の数値は、その数値を文字列に変えて返す。

※補足
メソッド名はFizz_Buzzとする。引数名はnとする
引数nは1以上の整数が入る
puts fizz_buzz(1)のようにして、メソッドを呼び出し、
動作が正しいか確認しよう
def Fizz_Buzz(n)
  if n % 15 == 0
    puts 'FizzBuzz'
  elsif n % 3 == 0
    puts 'Fizz'
  elsif n % 5 == 0
    puts 'Buzz'
  else puts n.to_s
end

puts Fizz_Buzz(1)
puts Fizz_Buzz(3)
puts Fizz_Buzz(5)
puts Fizz_Buzz(6)
puts Fizz_Buzz(9)
puts Fizz_Buzz(10)
puts Fizz_Buzz(12)
puts Fizz_Buzz(15)

※ポイントは先に15で割り切れる数を書くこと

puts print p ppの違い

puts ‘suzutuki’
suzutuki
=> nil
2.5.1 :002 > print ‘suzutuki’
suzutuki => nil
2.5.1 :003 > p ‘suzutuki’
“suzutuki”
=> “suzutuki”
pp ‘suzutuki’
“suzutuki”
=> “suzutuki”

putsが改行 printが一行 pやppはデバッグ用と覚えておこう!

3に続く

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です