真偽値と論理演算子(&&||)
真(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はデバッグ用と覚えておこう!