0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

アウトプット 5月9日(2) Ruby入門 第4章

Last updated at Posted at 2020-05-09

★は、実現したい内容に対して対応する構文や処理を指す。

【制作物】
RGBカラーを変換するプログラム

【学習内容】
・配列
・ブロック
・範囲(Range)
・様々な繰り返し処理
・繰り返し処理ようの制御構造

【配列とは】
・複数のデータをまとめて格納するオブジェクト
・String型、Integer型など異なるデータを一緒に格納可
→[] #空の配列を作る
→[a1, a2, a3] #3つの要素が格納された配列を作る

★配列に新しい値を入れたい★
構文:配列[添字] = 新しい値

例:
a = [1,2,3] ※番号は、0,1,2の順番
a[1] = 20
a #=> [1,20,3]

★配列内の特定の位置にある要素を削除したい★
delete_atメソッド

例:
a = [1,2,3] #2番目の要素を削除する(削除した値が戻り値になる)
a.delete_at(1) #=> 2
a #=> [1,3]
※存在しない添字を指定するとnilが戻り値となる

【ブロックとは】
・メソッドの引数として渡せる処理の塊のこと

★配列の要素を最初〜最後まで順番に取り出したい★
・eachメソッド
★↑で取り出した要素をどう処理するのか?を記述したい★
・ブロック(do〜endまで)が実際の処理を行う
・ブロックの内部は、Rubyのコードを自由に記述できる
・ブロック内で設定した変数(ローカル変数)は、そのブロック内でしか定義できない
(Ref:https://qiita.com/mary_new_programmer/items/4c4353c3d1df7242f515)

例:eachメソッド

numbers.each do |n| 
sum += n
end

#|n|はブロック引数で、eachメソッドから渡された配列の要素が入る

★指定した値に一致する(配列の)要素を削除したい★
・deleteメソッド
・delete_ifメソッドとすることで、ある条件のもとで削除させることも可能

【do...endと{}】
簡潔な記述方法
(before)
numbers = [1,2,3,4]
sum = 0
numbers.each do |n| sum += n end
sum

(after)
numbers = [1,2,3,4]
sum = 0
numbers.each {|n|
sum += n
}
sum

【ブロックを使う配列のメソッド】
★各要素に対してブロックを、評価した結果を新しい配列にして返したい★
・map/collectメソッド(エイリアスメソッド:collect)

★各要素に対してブロックを評価し、その戻り値が真の要素を集めた配列を返して欲しい★
・selectメソッド(エイリアスメソッド:find_all)

★ブロックの戻り値が真になった最初の要素を返して欲しい★
・findメソッド(エイリアスメソッド:detect)

★たたみ込み演算を行って欲しい★
・injectメソッド(エイリアスメソッド:reduce)

【範囲(Range)】
★値の範囲を表すオブジェクトを作成したい★
・最初の値..最後の値(最後の値を含む場合)を記述
・最初の値...最後の値(最後の値を含まない場合)を記述
→Rangeクラスのオブジェクトになる

例:
1..5
1...5
'a'..'e'
'a'...'e'

★配列や文字列の一部を取り出したい★
例:
a = [1,2,3,4,5]
a[1..3] #=>[2,3,4]

★n以上m以下(未満)の判定をしたい★
・不等号を使うケースがあるが、範囲オブジェクトを使うとラク

例:
def liquid?(temperture)
#0度以上100度未満なら液体と判定したい
(0...100).include?(temperture)
end

liquid(-1) #=>false
liquid(99) #=>true
liquid(100)#=>false

例:case文との併用
※case〜when構文:一つの値に対して複数の候補の中で一致するものを返したい
(特定のオブジェクトが持つ値がどの値に一致するのかを調べたい)

def charge(age)
case age
when 0..5
0
when 6..12
300
when 13..18
600
else 1000 #それ以外
1000
end
charge(3) #=> 0
charge(18) #=> 600

★範囲オブジェクトを配列(=別オブジェクト)に変換させたい★
・to_aメソッド
例:
numbers = (1..4).to_a
sum = 0
numbers.each { |n| sum += n }
sum #=> 10
※ただし範囲オブジェクトに対して直接eachメソッドを呼び出すことも可能

★期待する結果、テスト対象となる値や式を検証したい★
・assert_equal 期待する結果、テスト対象となる値や式

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?