choco-ballの日記

勉強のアウトプットのためのブログ

Ruby (6) 条件分岐 if文

プログラムの基本処理は順次進行、条件分岐、繰り返しの3つです。
今回学ぶのはその中の条件分岐の処理になります。
条件分岐とは言葉通りに条件によって処理が分岐することです。
○○が××の時に△△を実行といった具合に処理を記述していきます。
条件分岐では比較演算子を多用します。
比較演算子についてはこちら

Ruby (3) 演算子 - choco-ballの日記


条件分岐に記述する条件は内容によって真偽値(trueかfalse)を返します。
そして返ってきた値がtrue(正しい)かfalse(誤り)によって条件を分岐させます。
では早速学習していきましょう。

if文は条件がtrueになるときに処理を実行します。
また、elsif(elseifではない)やelseと組み合わせることでいくつも処理を分岐させることができます。

# 基本的なif文の記述
if 条件
 # 処理
end


上記例のように必ずifとendで括ります。
次はelseを使用しましょう。
elseはifの条件に当てはまらない場合の記述です。
条件は記述しません。

if 条件
 # 条件に当てはまるときの処理
else
 # 条件に当てはまらない時の処理
end


elsifを使用するとifで指定した以外の条件を作成することができます。

if 条件1
 # ifの条件に当てはまるときの処理
elsif 条件2
 # elsifの条件に当てはまるときの処理
elsif 条件3
 # elsifの条件に当てはまるときの処理
else
 # どちらの条件にも当てはまらない時の処理
end


実際に記述してみましょう。

num1 = 10
num2 =5

if num1 + num2 < 10
 # num1 num2の合計が10より小さい時の処理
 puts num1 + num2
elsif num1 + num2 > 10
 # num1 num2の合計が10より大きい時の処理
 puts num1 - num2
elsif num1 + num2 == 15
 # num1 num2の合計が15の時の処理
 puts num1 * num2
else
 # どの条件にも当てはまらない時の処理
    puts num1 / num2
end

# 結果
# num1 num2の合計が10より大きい時の処理が実行され5が出力される


num1 num2の合計が15の時の処理も条件に当てはまるのでは?


と思うかもしれませんが、
条件分岐では一番最初に当てはまった条件のみが実行されます。


そのため、記述をする順番が大切になってきます。
記述の順番によっては想定通りの結果を得られません。


一つのifやelsifの中で複数の条件を扱うには &&(かつ)や||(または)を使用します。
&&は全ての条件がtrueの時にtrueを返します。
||はいずれかの条件がtrueの時にtrueを返します。

num1 = 10
num2 =5

if num1 + num2  == 15 &&  num1 + num2 < 10
 # num1 num2の合計が15かつ10より小さい時の処理
 # 1つ目はtrueで2つ目はfalseなのでfalse
 puts num1 + num2
elsif num1 + num2 < 10 || num1 + num2 == 15
 # num1 num2の合計が10より小さいまたは合計が15である時の処理
   # 1つ目はfalseだが2つ目がtrueのためtrue
 puts num1 - num2
else
 # どの条件にも当てはまらない時の処理
    puts num1 / num2
end

# 結果
# num1 num2の合計が10より小さいまたは合計が15である時の処理が実行され5が出力


||(または)はいずれか1つでもtrueならばtrueを返す性質上、
条件がtrueになった時点でその後の記述は実行されなくなります。
下の例は上記elsifの条件を逆にしたものです。

elsif num1 + num2 == 15 || num1 + num2 < 10 
 # num1 num2の合計が15である、または時10より小さい時の処理
   # 1つ目はtrueのためtrue この時点で真偽の判定は終了
 puts num1 - num2


上記のようになります。
そのためif文全体の記述の順番を気をつけるとともに
条件式内の順番も気をつけなければいけません。

Ruby(5) 配列

今回学ぶのは変数に複数の値を入れる方法です。

変数の中に複数の値を入れたものを配列と呼びます。
配列の中の値のことを要素と呼びます。

# 配列の宣言
array = [ ]

# 以下は配列の作成例
array = [ "チョコ", "ボール" ]
puts array
# 出力結果
# チョコ
# ボール


上記例のように配列は出力すると左から順番に取り出されます。
また、配列には添字(index)という番号が割り当てられます。
添字は一番左を0として数えます。
添字の値を指定することで特定の要素を取り出すことができます。

array = [ "チョコ", "ボール" ]
puts array[1]
# 出力結果
# ボール
# (チョコが0番、ボールが1番のため)


<<を使うことで後から配列に要素を追加することもできます

array = [ "チョコ", "ボール" ]

array << "ピーナッツ抜き"
puts array
# 出力結果
# チョコ
# ボール
# ピーナッツ抜き


配列の中の要素を変更したいときには、添字を指定して再代入します。

array = [ "チョコ", "ボール" , "ピーナッツ抜き"]

array[2] = "ピーナッツ入り"

puts array
# 出力結果
# チョコ
# ボール
# ピーナッツあり


lengthメソッドを使うと配列の中の要素の数を返します。

array = [ "チョコ", "ボール" , "ピーナッツ抜き"]

puts array.length

# 出力結果
# 3


配列は繰り返しや条件分岐の処理と組み合わせて使うことが多いです。
以下はサンプルです。

array = ["青信号","黄信号","赤信号"]

# arrayをブロック変数aryに入れて要素の数だけ繰り返し処理
# 今回は要素は3つなので3回ループする。
array.each do |ary|
  # aryが青信号であるときに分岐
  if ary == "青信号"
    # バックスラッシュ記法で改行
    puts "#{ary}!\n進め"
  
  # aryが黄信号であるときに分岐  
  elsif ary == "黄信号"
    puts "#{ary}!\n止まれ"

  # 上記2つに当てはまらない場合に分岐
  else
    puts "#{ary}!\n止まれぇぇぇい!!"
  end
end


# 出力結果
# 青信号!
# 進め
# 黄信号!
# 止まれ
# 赤信号!
# 止まれぇぇぇい!!
# 


配列と繰り返しや条件分岐を組み合わせると上記のようなことができます。
他にも色々できることはありますが、とりあえずこの辺で・・・。
ちなみに、ウェブアプリだとデータベースの中身を表示する際に
上記のような処理はめっちゃ使います。

Ruby(4) 変数の中身を出力する

今回学ぶのは変数に入れた値を出力する方法です。

まずは今回使うメソッドを紹介します。

puts メソッド


putsメソッドは値を出力するときに使用します。

sample = "チョコボール"
# sampleの値「チョコボール」を出力する
puts sample


gets メソッド


getsメソッドは入力された値を文字列として取得します。

sample = gets
# sampleの中には入力された文字列が入る


chomp メソッド


chompメソッドは文字列の改行を取り除きます。
通常getsメソッドで取得した文字列の末尾には改行が含まれます。
chonpメソッドはその改行を取り除いてくれます。

# chomp未使用
sample = gets #取得する文字列は"チョコボール"
puts "ドーモ。#{sample}=サン。"
# 出力結果は
# ドーモ。チョコボール
# =サン。

# chomp使用
sample = gets.chomp #取得する文字列は"チョコボール"
puts "ドーモ。#{sample}=サン。"
# 出力結果は
# ドーモ。チョコボール=サン。


to_i メソッド


to_iメソッドは文字列である値を数値に変換します。

# to_i未使用
num1 = gets # 値は10
num2 = gets # 値は20

puts num1  + num2

# 出力結果は
# 10
# 20
# (改行含む文字列のため上のような結果)

# to_i使用
num1 = gets.to_i # 値は10
num2 = gets.to_i # 値は20

puts num1  + num2
# 出力結果は
# 30


Q 文字列にあえて改行などを入れたいときは?
A バックスラッシュ(\)記法を使いましょう。
バックスラッシュ記法を使うと文字列内で改行ができたり、特殊文字を使えます。
<エスケープ処理という呼び方もします>
\n 改行
\s 空白
\ \を文字として使用
などがあります。
これらは式展開と同じく"文\n字\s列"(ダブルクォーテーション)の中でしか使えません。

ちなみに!
メソッドメソッド言ってますがメソッドって何なの!?という方へ!
メソッドというのは特定の処理をまとめたもので、
メソッドの名前を入力することで呼び出すことができます。
今回のgetsで言えば、getsと記述することで
別の場所にあるgetsというメソッドの中に記述してある処理を実行しています。 最初のうちはどこかにある処理の塊を呼び出している程度の認識で良いかと思います。

Ruby (3) 演算子

本日は演算子について学んでいきます。

算術演算子は数値同士を計算したり、+を用いて文字列を連結したりするものです。

+ 加算
- 減算
* 乗算
/ 除算
x%y x/bの除算結果の余りを求める
x**y xのy乗



自己代入演算子は変数に”変数+数値”や”変数-数値”を再代入します。

a += 1      # a = a + 1と同じ
a -= 1      # a = a - 1と同じ
a /= 10    #a = a / 10と同じ
a %= 10 #a = a % 10と同じ(余りを代入)



比較演算子演算子を挟んだ左右の値を比べます。

a == b  # aとbの値が等しい
a != b   # aとbの値が等しくない(!=はNOT演算子ともいう)
a < b    # aはbよりも小さい
a <= b  # aはb以下
a > b    # aはbよりも大きい
a >= b # aはb以上



論理演算子は左辺と右辺の関係を表すものです。trueかfalseの値を返します。

!a            # aが正しくない時にtrue
a && b   # aとbが正しい時にtrue
a || b      # aかbが正しい時にtrue



基本的に値が条件に当てはまればtrue 条件に当てはまらない場合にはfalseを返します。

なので

a = 10    # 変数定義
a == 10 # aの値が正しいのでtrue
a != 10  # aの値が10じゃない時にtrueなのでfalse

上記のようになります。

基本的な演算子はこの辺りになります。 条件分岐や繰り返しに必須の知識となりますので覚えておきましょう。

Ruby (2) 変数

変数とは何か?

その問いに一言で答えるとしたら "値(データ)を入れておくための箱"です。

=を挟んで左側が変数、右側が値になります。

number = 10

こちらの記述はnumberという名前の変数に10という値を入れるということです。

text = "hoge"

こちらの記述だと、textという名前の変数にhogeという文字列を入れています。

文字列を記述する場合には""(ダブルクォーテーション)で囲みます。



・変数を作ること(箱を用意すること)を変数の宣言と言います。

・変数に値を入れる行為を代入と言います。

・値を入れた変数を作ることを変数の定義と言います。

・値の入っている変数の中身を変えることを再代入と言います。

宣言(textという名前の変数を宣言)
text

値を代入して変数を定義
text = "hoge"

 上記で定義したhogeが入った変数にfugaを再代入
text = "fuga"

基本的には宣言単体で使うことはないかと思います。

ちなみに値に使ったhogeとかfugaというのはプログラミングのサンプルで慣習的に使う文字列です。

意味はありません。

piyoというのもあります。



ちょっと話が逸れてしまいましたが、

なぜ変数を使うのかというと、変数名の記述だけで中の値を使いまわせるからです。

可読性や保守性が上がるといったメリットがあります。

後々詳しく説明しますが、メソッドといったものやクラスといったものも

基本的には同じです。

便利にするために作ります。

Ruby (1) Rubyって何?

 

Rubyとは、まつもとゆきひろ氏によって開発された

オブジェクト指向プログラミング言語です。

強い動的型付けの言語です。

インタプリタ言語なので、コンパイルは不要です。

 

フレームワークであるRuby on Rails によって、

Webアプリケーションの開発を容易に行えます。

 

Rubyの設計思想はストレスなくプログラミングを楽しむことです。

その設計思想に違わず、記述がシンプルで多様性もあり、初心者が学ぶにはうってつけのプログラミング言語です。

 

これからブログでは私の学習のアウトプット込みで

Rubyの講座を投稿して行きたいと思っています。

 

空き時間に投稿するので、不定期にはなりますが

よろしくお願いします。

 

 

明けましておめでとうございます。

遅ればせながら、明けましておめでとうございます。

 

今年の更新に関してですが、

徐々にRubyの講座のような形で

更新を進めていければいいなと思っています。

 

基礎のところから自分の学習成果の確認も行いがてら、

更新を進めて行きたいです。

 

更新に関しては空き時間を使ってという形なので不定期になります。

 

では、本年もよろしくお願いいたします。