TECH 　DAY　２

勉強した項目：　Ruby、クラスとインスタンス
時間： ９：３０
内容：
＊学習アウトプットです。なにぶん間違いなんかもあります。気をつけますがその際はご指摘いただけますと幸いです＊

###【繰り返し処理】
　繰り返し処理、繰り返し処理を行うための文法には `for`、`each`、`while`などいくつかある

###【while文】
　`while` は条件式が真のときに処理を繰り返す

```ruby
  while 条件式 do
    # 処理を実行する
  end
```

　例　1から10までを順に足し合わせてその都度表示

```ruby
  sum = 0
  number = 1
  while number <= 10 do
    sum += number
    puts sum
    number += 1
  end
```

###【自己代入演算子】
　`number += 1`　と　`number = number + 1`　は一緒

＊強制終了はターミナル画面で「control + c」

###【exitメソッド】
　プログラムの処理を強制的に終了させるメソッド

```ruby
  while true do
    exit  # ここでプログラムが終わる
    puts "Hello World" # これは呼ばれない
  end
```

例

```ruby
  while true do
    input = gets.chomp         # ユーザーの入力
    if input == "exit" then    # exitと入力されたら
      exit                     # プログラムを終了
    end
    puts "ループ中"
  end
```

###【配列オブジェクト】
　配列オブジェクトはハッシュと同じように、1つの変数でたくさんの情報を持つことのできるオブジェクト
　データと順番がひもづけられる。

###【要素】
配列の中のデータは要素と呼ばれ、要素は順番を持っていて、配列に入れた順に1番目,2番目..と自動的に順番が割り振られる

```ruby
 配列オブジェクト = []
```

＊ハッシュは `{}` (中括弧)で囲んでいたのに対し、配列は[](大括弧)で囲む

###【<<メソッド】
　生成した配列オブジェクトに新しい要素を追加したいとき
例

```ruby
  pencil_case = ["ペン", "消しゴム", "定規"]
  pencil_case << "メモ帳"
  puts pencil_case
```

###【 lengthメソッド】
　`length` メソッドはその配列の中にある要素の数を返してくれるメソッド

```ruby
配列オブジェクト.length # => 配列オブジェクト内の要素の数
```

例

```ruby
  pencil_case = ["ペン", "消しゴム", "定規"]
  puts pencil_case.length

  pencil_case << "メモ帳"
  pencil_case << "付箋"
  puts pencil_case.length
```

最初は、`3` が `length` メソッドで返ってきて、追加したので `5` が返ってくる。

###【管理する配列オブジェクトpostsの生成】

```ruby
 posts = []      # 複数の何かを持つ配列オブジェクト
```

　メソッドの外におく

　複数のpostを追加する場合はスコープで対応

###【スコープ】
変数にはその変数を使うことのできる範囲が決まっていて、それをスコープという

```ruby
capital = "東京"             # 首都は「東京」
  puts capital
```

＊メソッドではメソッド内で定義した変数しか使えない
＊同じ名前の変数でもスコープが違えば別の変数となる

###【引数（ひきすう）】
引数(ひきすう)はプログラムでメソッドなどに渡すことのできる値のこと
引数(ひきすう)を使うことによって、メソッドの外にある変数(スコープ外の変数)をメソッドの中で使うことができる

「引数のポイント」
引数には以下の2つのポイントがある。

引数は「メソッドを呼び出す部分」と「メソッドを定義している部分」両方に書く
「メソッドを呼び出す部分」に書く引数と「メソッドを定義している部分」に書く引数の名前は、一致している必要はない

＊メソッドを呼び出す際に書く引数のことを本引数

＊本引数に対して、メソッドを定義している部分に書く引数のことを仮引数

```ruby
  def メソッド名(仮引数)
    実行する処理
  end
```

例

```ruby
  def multi(number)
    puts number * number
    return number * number
  end

  puts "何か数字を入力してください"
  value = gets.to_i

  multi(value)
```

###【return】
`return` を利用した時点で返り値が決まるため、メソッドはその行までで強制的に終了

###【eachメソッド】
配列オブジェクトに対して `each` メソッドを実行すると、配列に含まれる要素を順に取り出して繰り返し処理が行われる
配列の要素の数だけ処理が行われる

例

```ruby
  animals = ["いぬ", "ねこ", "ねずみ"]
  animals.each do |animal|
    puts animal
  end
```

###【クラス】
クラスとは、とある種類のオブジェクトの共通の属性とメソッドをまとめて定義しておく型のようなもの

＊共通する部分をクラスという型で定義している

###【インスタンス】
クラスに基いて生み出されたオブジェクトのことをインスタンスと呼ぶ

クラスが先でクラスからインスタンスが生まれる

＊クラスで共通部分を定義し、インスタンスは個別の値を持つ

###【属性と属性値】
・属性とは、オブジェクトが持つ情報の種類
・属性値とは、クラスで定義した属性に入る、オブジェクトが実際に持つ情報

###【クラスの定義】

```ruby
class クラス名
  # 変数/メソッドの定義
end
```

＊クラス名は半角英大文字から始めます。
例: User Account Image Group など

###【newメソッド】
全てのクラスは、定義しなくてもnewという特別なメソッドを持つ

###【クラスメソッド】
クラスで共通の情報を使った処理に使用する
###【インスタンスメソッド】
インスタンスごとの個別の情報（属性値）を使った処理

•クラスメソッドは、インスタンスの親玉であるクラス自身が利用する技で、インスタンスメソッドは、各インスタンスが行う技

###【クラスメソッドの定義】
クラスメソッドはメソッド名の前にself.を付ける

```ruby
  class クラス名
    def self.メソッド名
      # 処理
    end
  end
```

呼び出しは
クラス名.メソッド名(引数)

###【インスタンスメソッドの定義】
インスタンスメソッドの定義はそのインスタンスのクラスの定義内で行う

```ruby
  class クラス名
    def メソッド名
      # 処理
    end
  end
```

呼び出しは
インスタンス.メソッド名(引数)

＊クラスメソッドは、クラスに対して使用し、クラスで共通の情報を使用、つまり、インスタンスの個別の情報は関係ない
　クラスメソッドは、self.をメソッド名の前につける

＊インスタンスメソッドは、インスタンスに対して使用し、インスタンスごとに異なる個別の情報を使用
　インスタンスメソッドは、self.をメソッド名の前につけない

###【クラス変数】
クラス全体で使用できる変数
クラス内であればどこでも使えるのでクラスメソッド、インスタンスメソッドの両方で使うことが出きる。
クラスを通して、値が共通の情報に使用する

###【インスタンス変数】
共通の属性としてインスタンスに定義できる変数です。
その値は、個々のインスタンスによって別々に設定できる。

###【インスタンス変数を定義】
インスタンス変数は変数名の始めに@(アットマークを1つ)をつけて宣言

例

```ruby
  class クラス名
    def sample
      @test = "ex"
    end
  end
```

###【クラス変数を定義】
クラス変数の定義はクラスの定義内で行う。
クラス変数は変数名の始めに@@(アットマーク2つ)をつけて宣言

例

```ruby
  class クラス名
    @@クラス変数
  end
```

###【initializeメソッド】
　initializeメソッドは、インスタンスが生成された瞬間に、今まさに生成されたそのインスタンスに必ず利用されるインスタンスメソッド

＊initializeメソッドの具体的内容は自分で書く必要があり、
インスタンス生成のときに何か処理を行いたいときはinitializeメソッドを書くようにする

###【クラスの継承】
あるクラスに定義されたメソッドを、別のクラスで利用出来るようにすることを継承
•クラスの継承には、親クラスと子クラスの関係がある
元となるクラスを親クラス
親クラスのメソッドを引き継ぎ新しく作成するクラスを子クラスと呼ぶ

###【ゲッター】
ゲッターとは、あるクラスのインスタンスのインスタンス変数の値を返すだけのメソッドのこと
ゲッターにより、インスタンスから自身の持つインスタンス変数の値を取得することができる

###【require】
`require` は、あるファイルから他のファイルの記述内容を参照するためのメソッド

例として、
hoge.rbとfuga.rbいうファイルがあった時、
fuga.rbに `require "./hoge"`と書くことで
fuga.rbにhoge.rbの記述が書かれていることにしてくれる

###【セッター】
インスタンス変数の値を更新するためのインスタンスメソッドのことを、特別にセッターと呼ぶ

###【self】
インスタンスメソッドの中でselfと書くと、そのインスタンスメソッドを使っているインスタンス自身を参照できる