はじめに
こんにちは。
この記事はRuby初心者の私がRubyを学習した過程をまとめた記事です。
目的は学習した内容を自分の手でまとめることで知識の定着をさせることです。
また、公開する事でたくさんの人の意見を聞くことが出来れば幸いです。
恐縮ではありますが、間違っている箇所や改善点があればご教示願います。
学習環境
環境:AWS Cloud9
バージョン:Ruby2.5.1
教材:Udemy "はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう"
メソッド
メソッドとはクラス内に定義される、複数の処理を一つにまとめて扱いやすくしたもの
構文は以下参照
defメソッド名(引数1,引数2,~~~)実行したい処理end
メソッドの呼び出し方法は以下参照
メソッド名(引数1,引数2,~~~)
ここでメソッドを使用した例を紹介
選手の名前によって2020年シーズンのHR数が出力されるメソッドを作成(選手名は 'Seiya Suzuki' 'Hayato Sakamoto' 'Munetaka Murakami'とする)
defhow_many_hr(name)ifname=='Seiya Suzuki'puts25elsifname=='Hayato Sakamoto'puts19elsifname=='Munetaka Murakami'puts28elseputs'I do not know'endendhow_many_hr('Seiya Suzuki')how_many_hr('Hayato Sakamoto')how_many_hr('Munetaka Murakami')how_many_hr('Ukyou Shutou')
出力結果
25
19
28
I do not know
解説
引数nameを受け取るメソッドhow_many_hr
引数nameの値によって出力する値が変化する
メソッド外でメソッド名(渡したい引数)とすることで呼び出し
それぞれ渡した引数に対する出力結果が戻り値として返ってくる
配列
・配列とは複数のデータをまとめて格納できるオブジェクトのこと
・配列内のデータ(要素)は順番に並んでいて、インデックス(添字)を指定することでデータを取り出せる
※インデックスは0から始まるので注意
[x,y,z] この時インデックス0はx、1はy、2はzとなる
配列の作成
・[]で囲む
・[要素1,要素2,要素3] これは3つのデータが格納された配列
・配列の要素には文字列、数値、配列を入れることができる
players=['Seiya Suzuki','Hayato Sakamoto','Munetaka Murakami']
解説:変数playersに3人の選手名が入った配列を代入
配列の活用
配列が空か確認する方法
配列.empty? 空であればtrueが返ってくる
putsplayers.empty?
出力結果
false
解説:playersが空かどうか確認。中身がある為falseが返ってくる
配列に指定の要素があるか確認する
配列.include?(指定の要素) 指定の要素があればtrueが返ってくる
putsplayers.include?('Seiya Suzuki')
出力結果
true
解説:playersの中に'Seiya Suzuki'と言う要素があるか確認。要素がある為trueが返ってくる
配列を反転させる
配列.reverse 反転した配列が返ってくる
putsplayers.reverse
出力結果
Munetaka Murakami
Hayato Sakamoto
Seiya Suzuki
解説:playersを反転させて出力。格納されている順番と反対の順番で要素が出力される。
配列を破壊的に反転させる
配列.reverse!配列が破壊的に反転する
※破壊的とは配列自体に変更を加えること
putsplayers.reverse!putsplayers
出力結果
Munetaka Murakami
Hayato Sakamoto
Seiya Suzuki
Munetaka Murakami
Hayato Sakamoto
Seiya Suzuki
解説:playersを破壊的に反転させて出力。格納されている順番と反対の順番で要素が出力される。playersを出力。格納されている順番が反転している。これが破壊的に反転させると言うこと。
※破壊的に処理をしたいときは、コードの末尾に!をつければ良い。今後破壊的の説明は省きます。
配列をシャッフルする
配列.shuffle配列がシャッフルされる
putsplayers.shuffle
出力結果
Hayato Sakamoto
Munetaka Murakami
Seiya Suzuki
解説:playersをシャッフルして出力。格納された要素の順番がシャッフルされて出力。
数値〜数値の配列を作成する
(数値..数値).to_a数値から数値全てが要素として格納された配列を作成
numbers=(0..10).to_aputsnumbers
出力結果
0
1
2
3
4
5
6
7
8
9
10
解説:変数numbersに0から10までの数値を格納した配列を代入。0から10全ての数値が出力。
配列の最後に要素を追加する
配列<<要素 もしくは 配列.push(要素)
putsplayers<<'Ukyou Shutou'putsplayers.push('Yuki Yanagita')
出力結果
Seiya Suzuki
Hayato Sakamoto
Munetaka Murakami
Ukyou Shutou
Seiya Suzuki
Hayato Sakamoto
Munetaka Murakami
Ukyou Shutou
Yuki Yanagita
解説:playersに'Ukyou Shutou'を追加して出力。playersに'Yuki Yanagita'を追加して出力
配列の最後を削除し戻り値として返す
配列.pop
putsplayers.popputsplayers
出力結果
Yuki Yanagita
Seiya Suzuki
Hayato Sakamoto
Munetaka Murakami
Ukyou Shutou
解説:playersの最後の要素'Yuki Yanagita'を削除して出力。その後playersを出力すると'Yuki Yanagita'が削除されていることが分かる。
配列の最初を削除し戻り値として返す
配列.shift
putsplayers.shiftputsplayers
出力結果
Seiya Suzuki
Hayato Sakamoto
Munetaka Murakami
Ukyou Shutou
解説:playersの最初の要素'Seiya Suzuki'を削除して出力。その後playersを出力すると'Seiya Suzuki'が削除されたことが分かる。
重複した要素をまとめる
配列.uniq
animals=['dog','cat','horse','cat','dog']putsanimalsputsanimals.uniq
出力結果
dog
cat
horse
cat
dog
dog
cat
horse
解説:配列animalsを作成し出力。最初に定義した通りの要素が出力される。その後重複した要素'dog','cat'をまとめると、horseの後の'cat','dog'がなとなっていることが分かる。
配列の要素を結合する
配列.join
seiya=['鈴木誠也','神ってる']putsseiya.join
出力結果
鈴木誠也神ってる
解説:配列seiyaに'鈴木誠也'と'神ってる'を要素として格納。配列の要素を結合して出力し'鈴木誠也神ってる'を出力。
結合する要素の間に指定の文字を入れる
配列.join('指定の文字')
seiya=['鈴木誠也','神ってる']putsseiya.join('は')
出力結果
鈴木誠也は神ってる
解説:先程の配列の要素の間に'は'を入れて出力。'鈴木誠也は神ってる'
配列の順番を降順にする
配列.sort
numbers=(0..5).to_a.shuffle!putsnumbersputsnumbers.sort
出力結果
2
4
5
3
1
0
0
1
2
3
4
5
解説:配列numbersに0から5の値をシャッフルして格納。そのまま出力すると要素の順番はバラバラ。降順にすることによって0から5の順番になる。
配列の順番を昇順にする方法
配列.sort.reverse
numbers=(0..5).to_a.shuffle!putsnumbersputsnumbers.sort.reverse
出力結果
1
4
5
3
0
2
5
4
3
2
1
0
解説:配列numbersに0から5の値をシャッフルして格納。そのまま出力すると要素の順番はバラバラ。昇順にすることによって5から0の順番になる。
配列の要素の個数を取得する
配列.size
numbers=(0..5).to_aputsnumbers.size
出力結果
6
解説:配列numbersに0から5の値を格納。要素の個数を出力。要素の数は6個なので出力結果は6。
まとめ
今回はメソッドと配列についてまとめました。少し長くなりました。次回はハッシュについてまとめます。