今週のRuby学習 変数から条件分岐まで

先週に引き続き、今週もRubyについて学んでいる。
先週の後半で、Rubyから気移りして昔やっていた、Swiftの勉強に逃避していた。
新しい言語を学ぶのは面白いけど、学習コストとカロリーが結構かかるので他の言語へと行きがちである。
最低でも、１０時間くらいは初期に投資しなくてはいけないのかな。
早く物を作りたいという欲求で少し焦るが、今週はチュートリアルで精一杯な気がする。

##今週の内容
1. 変数定数について
2. オブジェクトについて
3. 数値オブジェクトについて
4. 文字列オブジェクトについて
5. ? や !　がついたメソッドを使おう
6. 配列オブジェクトを使おう
7. ハッシュオブジェクトを使おう。
8. オブジェクトを変換
9. %記法を使う
10. 書式付きで値を埋め込む
11. ifで条件分岐をする

##変数について
変数はプログラミングをやっている人ならば理解しているはず。

###変数は、英小文字。
> msg = "Hello world"
> puts msg

###定数は、英大文字。 
※
> VERSION = 1.1
> puts VERSION


##オブジェクトについて
rubyは基本的に全て、オブジェクトに分類される。
メソッドは、クラスの中に含まれる。
ざっくり言うと下記のような感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533077/fe34d1ac-9d6e-4872-46a2-832f6fc009f1.png)


##数値オブジェクトについて
含まれるクラスやメソッドを調べる方法。
とても簡単！

> インスタンス.class

> インスタンス.methods

四則演算は他のものと一緒。
べき乗は ** 

浮動小数を表現したいときは、数値のどちらかを小数点にすれば自動的に表示してくれる。
例えば、 10.0 / 3 にすれば、3.3と表示される。

###分数表現
> Rational(2,5) 

2/5という表現。分数表現で四則演算も可能。

短縮表現として、下記のような表現も可能。

> 2/5r 

###Floatのデータ型のときは
- 10.1,round #四捨五入
- 10.1.floor #小数点以下切り捨て
- 10.1.ceil #小数点以下切り上げ

##文字列オブジェクトについて

###特殊文字
改行: /n
タブ： /t

###式展開の表示
> puts "price #{3000*4}"

※シングルコーテーションの場合は、単純に、文字が表示される。
  #{式} で式展開が可能になる。

###文字列の式展開例
変数の名前と文字列を合わせて表示するケース。
> name = "Taro"
puts "hello #{name}"

###文字列 に対して式を展開する。
> puts "hello" * 10

##?や！がついたメソッドを使おう。

###!マークの使い方

> upcase　#文字列を大文字にするメソッド
downcase #文字列を小文字にするメソッド
reverse　＃文字列を逆にする

> upcase!  #破壊的なメソッド。大元の数値を書き換える。


> name = "taguchi"

puts name.upcase
puts name
puts name.upcase!
puts name #大元のtaguchiが変更されている。

### ?の使い方
?は基本的に真偽値を確かめるために使用する。
真偽値でtrue / false　を返す。

 > name = "taguchi"
p name.empty?  #中身が空か確かめる。
p name.include?("g") #gという文字列が含まれるか確認する。


##配列

配列の使い方

```ruby:array.rb
colors = ["red", "blue", "yellow"]
p colors[0]  #配列の0番目
p colors[-1] #配列の最後尾
p colors[0..2] #0から二番目までも配列
p colors[0...2] #０から2の直前
p colors[5] # 配列になにもはいっていないときは、nilが返ってくる

colors[0] = "pink" #配列０の書き換え
colors[1..2] = ["white" , "black"] #配列１、２を書き換え
colors.push("gold") ＃配列の末尾に配列追加
colors << "silver" #上記pushの短縮表現。
p.colors

p colors.size #要素の数を示す
p colors.sort #要素の並び替えをオコアヌ


```

##ハッシュオブジェクトを使おう。
ハッシュオブジェクトは、keyとvalueを保存することのできるオブジェクト。

```ruby
scores = {"taguchi" => 200, "fkoji" => 400} #{}がハッシュ？ keyと値を結びつけるために=>を使う。
#keyはシンボルオブジェクトを使う。 ※タブルコーテーションを : に変えるだけ
scores = {:taguchi => 200, :fkoji => 400}
#さらに短くすると
scores = {taguchi:200, fkoji:400}

#ハッシュへのアクセス
p scores[:taguchi]
scores[:fkoji] = 600 #fkojiの数値の変更
p scores

#便利なメソッド
p scores.size #要素の数の確認
p scores.keys # keyの一覧確認
p scores.values #valueの一覧確認
p scores.has_key?(:taguchi) #keyの中にtaguchiがあるかどうかの確認

```

##オブエジェクトを変換
整数への変換 .to_i
不動小数点への変換 .to_f
文字列変換 .to_s
配列への変換 .to_a
ハッシュへの変換戻し .to_h

```ruby

scores = {taguchi:200, fkoji : 400}
p scorers.to_a  #配列への変換。keyと値が配列へと変換される。
```

##％記法を使う
puts "hello"
puts `hello`

は、%記法で書くことができる。

```ruby

puts %Q(hello)
puts %(hello) #上の記法と一緒の意味。Qの省力。
puts %q(hello) #シングルコーテーションの意味と同様になる。
```

シングルコーテーションやダブルコーテーションを使いたいときに便利な記法。

###配列で文字列管理
```ruby
p ["red" , "blue"]

p %W[red blue] #上記と一緒の意味。
```


##書式付きで値を埋め込む
%を使って文字列に書式を埋め込む。
>  "文字列" % 値

文字列 %s
整数 %d
浮動小数店 %f

```ruby

p "name: %s " % "taguchi"
p "name: %10s " % "taguchi" #10文字分の文字列を指定
p "name: %-10s" % "taguchi" #10文字分の文字列を指定して、左寄せ。

#idとrateを表示したい。
p "id: %05d , rate: %10.2f" % [355, 3.284] #配列でidに整数、rateに浮動小数を入れる。

#printf / sprintfの使い方
printf("name: %10s\n", "taguchi") # %じゃなくて、カンマでok
printf("id: %05d , rate: %10.2f\n" , 355, 3.284)
  
```

##ifで条件分岐する
if 条件 then 
　処理
end

※then は省略することが可能。 

```ruby

score gets.to_i

if score > 80 then 
puts "great"
else if score >60 then
puts "good"

else 
puts "so..so.."
end

#別な書き方 if を後ろに置くパターン
puts "great" if score > 80
```

###case ~ signalの書き方

> case signal 
when "条件" then
処理
else 
処理
end

※thenは省略可能
 

```ruby
signal = gets.chomp # 改行コードをchompでなくす。

case signal 
when "red" then
puts "stop!"
when "green","blue" then #カンマでシグナルをいくつか置くことも可能。
puts "go!"
when "yellow" then
puts "caution!"
else 
puts "wrong signal"
end

```

##まとめ
- rubyならではの記法もでてきて、少しワクワク。
- ここまで、1時間半くらいかかっている。