Ruby初心者の学習過程まとめ記事#4

#はじめに
こんにちは。
この記事はRuby初心者の私がRubyを学習した過程をまとめた記事です。
目的は学習した内容を自分の手でまとめることで知識の定着をさせることです。
また、公開する事でたくさんの人の意見を聞くことが出来れば幸いです。
恐縮ではありますが、間違っている箇所や改善点があればご教示願います。

#学習環境
環境：AWS Cloud9
バージョン：Ruby２.５.1
教材：Udemy "はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう"

#メソッド
メソッドとはクラス内に定義される、複数の処理を一つにまとめて扱いやすくしたもの
構文は以下参照

```qiita.rb
def メソッド名(引数1,引数2,~~~)
    実行したい処理
end
```
メソッドの呼び出し方法は以下参照

```qiita.rb
メソッド名(引数1,引数2,~~~)
```
ここでメソッドを使用した例を紹介
選手の名前によって2020年シーズンのHR数が出力されるメソッドを作成（選手名は 'Seiya Suzuki' 'Hayato Sakamoto' 'Munetaka Murakami'とする）

```qiita.rb
def how_many_hr(name)
    if name == 'Seiya Suzuki'
        puts 25
    elsif name == 'Hayato Sakamoto'
        puts 19
    elsif  name == 'Munetaka Murakami'
        puts 28
    else
        puts 'I do not know'
    end
end
how_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となる

<h5>配列の作成</h5>
・[]で囲む
・[要素1,要素2,要素3] これは3つのデータが格納された配列
・配列の要素には文字列、数値、配列を入れることができる

```qiita.rb
players = ['Seiya Suzuki', 'Hayato Sakamoto', 'Munetaka Murakami']
```
解説：変数playersに3人の選手名が入った配列を代入

#配列の活用
<h5>配列が空か確認する方法</h5>
**配列.empty?**　空であればtrueが返ってくる

```qiita.rb
puts players.empty?
```
出力結果

```
false
```
解説：playersが空かどうか確認。中身がある為falseが返ってくる

<h5>配列に指定の要素があるか確認する</h5>
**配列.include?(指定の要素)**　指定の要素があればtrueが返ってくる

```qiita.rb
puts players.include?('Seiya Suzuki')
```
出力結果

```
true
```
解説：playersの中に'Seiya Suzuki'と言う要素があるか確認。要素がある為trueが返ってくる

<h5>配列を反転させる</h5>
**配列.reverse**　反転した配列が返ってくる

```qiita.rb
puts players.reverse
```
出力結果

```
Munetaka Murakami
Hayato Sakamoto
Seiya Suzuki
```
解説：playersを反転させて出力。格納されている順番と反対の順番で要素が出力される。

<h5>配列を破壊的に反転させる</h5>
**配列.reverse!** 配列が破壊的に反転する
※破壊的とは配列自体に変更を加えること

```qiita.rb
puts players.reverse!
puts players
```
出力結果

```
Munetaka Murakami
Hayato Sakamoto
Seiya Suzuki
Munetaka Murakami
Hayato Sakamoto
Seiya Suzuki
```
解説：playersを破壊的に反転させて出力。格納されている順番と反対の順番で要素が出力される。playersを出力。格納されている順番が反転している。これが破壊的に反転させると言うこと。

※破壊的に処理をしたいときは、コードの末尾に**!**をつければ良い。今後破壊的の説明は省きます。

<h5>配列をシャッフルする</h5>
**配列.shuffle** 配列がシャッフルされる

```qiita.rb
puts players.shuffle
```
出力結果

```
Hayato Sakamoto
Munetaka Murakami
Seiya Suzuki
```
解説：playersをシャッフルして出力。格納された要素の順番がシャッフルされて出力。

<h5>数値〜数値の配列を作成する</h5>
**(数値..数値).to_a** 数値から数値全てが要素として格納された配列を作成

```qiita.rb
numbers = (0..10).to_a
puts numbers
```
出力結果

```
0
1
2
3
4
5
6
7
8
9
10
```
解説：変数numbersに0から10までの数値を格納した配列を代入。0から10全ての数値が出力。

<h5>配列の最後に要素を追加する</h5>
**配列<<要素　もしくは　配列.push(要素)**

```qiita.rb
puts players << 'Ukyou Shutou'
puts players.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'を追加して出力

<h5>配列の最後を削除し戻り値として返す</h5>
**配列.pop**

```qiita.rb
puts players.pop
puts players
```
出力結果

```
Yuki Yanagita
Seiya Suzuki
Hayato Sakamoto
Munetaka Murakami
Ukyou Shutou
```
解説：playersの最後の要素'Yuki Yanagita'を削除して出力。その後playersを出力すると'Yuki Yanagita'が削除されていることが分かる。

<h5>配列の最初を削除し戻り値として返す</h5>
**配列.shift**

```qiita.rb
puts players.shift
puts players
```
出力結果

```
Seiya Suzuki
Hayato Sakamoto
Munetaka Murakami
Ukyou Shutou
```
解説：playersの最初の要素'Seiya Suzuki'を削除して出力。その後playersを出力すると'Seiya Suzuki'が削除されたことが分かる。

<h5>重複した要素をまとめる</h5>
**配列.uniq**

```qiita.rb
animals = ['dog','cat','horse','cat','dog']
puts animals
puts animals.uniq
```
出力結果

```
dog
cat
horse
cat
dog
dog
cat
horse
```
解説：配列animalsを作成し出力。最初に定義した通りの要素が出力される。その後重複した要素'dog','cat'をまとめると、horseの後の'cat','dog'がなとなっていることが分かる。

<h5>配列の要素を結合する</h5>
**配列.join**

```qiita.rb
seiya = ['鈴木誠也','神ってる']
puts seiya.join
```
出力結果

```
鈴木誠也神ってる
```
解説：配列seiyaに'鈴木誠也'と'神ってる'を要素として格納。配列の要素を結合して出力し'鈴木誠也神ってる'を出力。

<h5>結合する要素の間に指定の文字を入れる</h5>
**配列.join('指定の文字')**

```qiita.rb
seiya = ['鈴木誠也','神ってる']
puts seiya.join('は')
```
出力結果

```
鈴木誠也は神ってる
```
解説：先程の配列の要素の間に'は'を入れて出力。'鈴木誠也は神ってる'

<h5>配列の順番を降順にする</h5>
**配列.sort**

```qiita.rb
numbers = (0..5).to_a.shuffle!
puts numbers
puts numbers.sort
```
出力結果

```
2
4
5
3
1
0
0
1
2
3
4
5
```
解説：配列numbersに0から5の値をシャッフルして格納。そのまま出力すると要素の順番はバラバラ。降順にすることによって0から5の順番になる。

<h5>配列の順番を昇順にする方法</h5>
**配列.sort.reverse**

```qiita.rb
numbers = (0..5).to_a.shuffle!
puts numbers
puts numbers.sort.reverse
```
出力結果

```
1
4
5
3
0
2
5
4
3
2
1
0
```
解説：配列numbersに0から5の値をシャッフルして格納。そのまま出力すると要素の順番はバラバラ。昇順にすることによって5から0の順番になる。

<h5>配列の要素の個数を取得する</h5>
**配列.size**

```qiita.rb
numbers = (0..5).to_a
puts numbers.size
```
出力結果

```
6
```
解説：配列numbersに0から5の値を格納。要素の個数を出力。要素の数は6個なので出力結果は6。

#まとめ
今回はメソッドと配列についてまとめました。少し長くなりました。次回はハッシュについてまとめます。