残りの人生もPHPに費やしたいか、それともRubyで世界を変えるか？


みんな大好き「Ruby」についてまとめました。超弩級初心者向けです。

##Ruby？なんやそら...
###Rubyの歴史
開発者は日本人のまつもとゆきひろ氏。通称--Matz--。
1993年生まれ。2005年に誕生した「Ruby on Rails」(以下Rails)というWEBアプリケーション・フレームワークにより爆発的に普及。

###Rubyのニーズ
ITのメッカ、シリコンバレーで働くエンジニアに調査したところ、最も人気が高い・最も年収の高いエンジニアの使う言語、共に「Ruby」が一位という結果が出ている。ちなみにごく普通のエンジニアで平均年収が1200万に達する。「Rails」は日本でも多くのIT企業で採用されている。(楽天・CookPad・Wantedly・カカクコム・Retty・リブセンス・クラウドワークス・など)


###Rubyの通り名
真性オブジェクト指向言語
より良いPerl
動く擬似コード
ALGOLの皮を被ったLisp

...そもそも通り名の意味がわかりませんね。大丈夫です。スルーしましょう。

###オブジェクト指向のオブジェクトってなんぞや

**３つの特徴**

- アイデンティティーを持っている：すべてのオブジェクトはなんらかのclassに属する
- メッセージを受け取る：メソッド呼び出し／メッセージ送信
- 内部状態を持つ：オブジェクトは0個以上の内部状態を持つ

###Rubyの特徴

***Rubyは「楽しく」プログラミングすることを前提とする***、その上で

- インタプリタ言語
- オブジェクト指向：数値も文字列もなにもかもオブジェクト
- 正規表現。テキスト処理に適す
- 簡潔で力強い表現
- 言語内DSL。自分専用の言語を作る能力
- メタプログラミング
- ガベージ・コレクション
- 高階関数
 - イテレータ
 - リソース自動管理
 - コールバック

という特徴がある。

###え...これ日本語？って方
簡単にまとめると

- オブジェクト指向：プログラムの強度が高く、仕様の変更に柔軟で、テストの時間を短縮できる！！
- スクリプト言語：人間の言語に近く、直感的で処理の内容がわかりやすい！！！

ってことです。はい。

##Ruby基礎編
Rubyを扱う際には絶対に知っておかなければいけない基本的な内容を記します。

###出力する
> puts

は処理を出力するための命令

###文字列
>" " # ダブルクォーテーション

は文字列と解釈されそのまま出力される

###if文

```

x = 20
if x > 30
 puts "xは30より大きい" # 成り立たない
end
if x > 10
 puts "xは10より大きい"　# 成り立つ
end

```


###case文
if,elsifによる分岐が多く複雑な場合、case文で書き換えるとシンプルで読みやすいコードにできる。
caseの値とwhenの値が一致したとき、そのwhen節が実行される。whenのどれにも一致しなかった時、else節が実行される。

```

x = 1
case x
when 1
 puts "あ"
when 2
 puts "い"
when 3
 puts "う"
end

```

###配列
Rubyでは、配列もオブジェクトになる。
なので、配列に対しても便利なメソッドを呼び出すことが可能。
配列の要素数を数えるsizeメソッドや、要素を末尾に追加するpushメソッドなどがある。

```

lessons = ["html", "php", "ruby"]
puts lessons.size # 配列の要素数を取得 # 答え3

lessons.push("css") # 要素を追加

```
###ハッシュ
配列と同じく複数のデータをまとめて管理することが出来るオブジェクト。配列との違いは、個々の要素を管理するのにインデックス番号ではなく、キーと呼ばれる文字列などの値を指定することができる点

```

ハッシュ名 = {
	"key1" => "value1", # コンマで区切る
	"key2" => "value2", # コンマで区切る
	"key3" => "key3"
	}

```

###for文
繰り返し処理を行うことができる。
以下のように、「in」の前に変数、「in」の後に繰り返す範囲を指定すると、その範囲の数値が順に変数に代入され、処理が繰り返し実行される。

```

for i in 1..100 do
	puts i
end

```





###while文
for文と同様に、繰り返し処理の一つ。
条件式を指定し、それがtrueの間、処理が繰り返し実行される。

```

i = 1
while i <= 100 do
	puts i
	i += 1
end

```

###eachメソッド
配列またはハッシュに対して、先頭のデータから順に繰り返し処理を行うためのメソッド。
以下の例では配列のデータを１つずつ取り出して｜value｜に代入し、出力を行っている。

```

data = ["サッカー","野球","テニス"]

data.each do |value|
	puts value
end 
　
　# 結果：サッカー　野球　テニス
　
```


##Ruby応用編

###class

オブジェクト指向では「クラス」というオブジェクトの設計図を作成し、設計図（クラス）を元に実体（オブジェクト）を生成する。
クラス（設計図）にはそのオブジェクト（実体）がもつ「データ」と「メソッド」の２つを定義する。

```

class Animal # 必ず大文字から始める

end

```

###インスタンスメソッド

クラス（設計図）の中でメソッドを定義することで、そのクラスのインスタンス固有のメソッドを作ることができる。これを「インスタンスメソッド」といい、「インスタンス.インスタンスメソッド」とすることでそのメソッドを呼び出すことができる。

```

class Animl
 def cry
  puts "うほうほ"
 end
end

my_animal = Animal.new
my_animal.cry

# 結果：うほうほ

```



###initializeメソッド
``initialize``という特別なメソッドを定義すると、newメソッドでインスタンスを生成するときに、同時にこのメソッドが呼ばれる。
newメソッドには引数をいれることができ、その引数はinitializeに渡されまる。

###インスタンス変数
``@``で始まる変数はインスタンス変数と呼ばれ、そのインスタンスの持つ「データ」を表す。

###attr_reader
インスタンス変数の値を取得するためのメソッド = ゲッターは「attr_reader」を用いると簡単に定義できる。以下のように一度に複数のゲッターを定義することも可能。

```

attr_reader :name, :color

```

###attr_writer
インスタンス変数の値を変更するためのメソッド = セッターは「attr_writer」を用いると簡単に定義できる。

###attr_accessor
ゲッターとセッターを同時に定義できる。

###クラスメソッド
意味：「インスタンス.メソッド」で呼び出すインスタンスメソッドに対し、「クラス名.クラスメソッド」で呼び出すメソッドのことをクラスメソッドと呼ぶ。
用途：インスタンス変数と関係のないメソッドを作りたいときなどに使う。

```

Animal.data

```


###クラス変数
個々のインスタンスがもつデータではなく、クラスから作成された「全て」のインスタンスで共有したい変数に用いる。

```

@@hogehoge

```

###self(クラス)
特別な式。class定義の直下で使用すると、そのクラス名を指し示す。そのため、「self.クラスメソッド」のようにクラスメソッドを定義することができる。


###self(インスタンス)
インスタンスメソッド内で使用すると、そのメソッドを呼び出しているインスタンスのことを指す。他のインスタンスメソッドを呼び出したいときにselfを使う。

###継承
すでに定義されているクラスを拡張し、新しいクラスを作ることを「継承」という。

```

class BigAnimal < Animal

end

```

###オーバーライド
スーパークラスで定義されているメソッドと同じ名前のメソッドをサブクラスで定義するとメソッドの中身を上書きすることができる。

###super
superを呼び出している場所に、スーパークラスのメソッドの内容が展開される。オーバーライドの際に、スーパークラスのメソッドの内容を含んだまま追加の処理を書きたいときには、superを用いる。


##まとめ
###しっかり学べばRubyってすっごく楽しい！
らしいです。以上。