チェリー本 2章 その1
無駄に長いので分割して書いていきたいと思います(笑)
rubyのデフォルトエンコーディング(文字コード)はUS-ASCI半角英数字しか使えなかったが日本語のプログラムを書くときは encoding: utf-8 を記載する必要があった
# encoding: utf-8 puts 1 + 2 a = "Hello,world " b = "こんにちわ" puts a puts b
rubyでは識別語といった
変数やクラス名メソッド名につける名前のことを言う
基本的に英数字や_が使われる。
一方でrubyには予約後というものが存在する。
これらは識別語としては使えない。
if class nil or do else next return とか...
数字の123や文字列の"hello"とかソースコードに直接埋め込める値のことをリテラルと言う
数字
123
文字列
"hello"
配列
[1,2,3]
ハッシュ
{"japan" => "yen","us"=>"doll"}
rubyの多重代入
rubyでは2つ以上の値を一度に代入することができるがあまり使われない...
cの場合だと値がセットされていないのでnilになる。
a,b,c = 1,2 => [1, 2] [34] pry(main)> a => 1 [35] pry(main)> b => 2 [36] pry(main)> c => nil
2つの変数に同じ値をセットする方法
[41] pry(main)> a = b = 100 => 100 [42] pry(main)> a => 100 [43] pry(main)> b => 100
文字列
シングルクォートとダブルクォートの違い
rubyで文字列を作るときは基本的にシングルクォートまたはダブルクォートを使うが
両者どちらも使うことができる
pry(main)> "こんにちわさようなら" => "こんにちわさようなら" pry(main)> 'こんにちわさようなら' => "こんにちわさようなら"
一応シングルとダブルには違いがある。
改行文字(\n)を埋め込みたい場合だとダブルにする必要がある。
[49] pry(main)> puts "こんにちわ\nさようなら" こんにちわ さようなら => nil [50] pry(main)> puts 'こんにちわ\nさようなら' こんにちわ\nさようなら => nil
シングルの場合だとそのまま出力されてしまう。
式展開でもシングルだとそのまま展開されてしまう。
name = "Alice" puts "Hello #{name}!" puts 'Hello #{name}!' => #ダブルの場合 Hello Alice! =>シングルの場合 #シングルだと... Hello #{name}!
ダブルクォーテーションで式展開したくないときは直前に\を追加してあげる。
puts "こんにちわ\nさようなら" puts "こんにちわ\\nさようなら" => こんにちわ さようなら こんにちわ\nさようなら
結果的にシングルクォーテーションとダブルクォーテーションどっち使えばいいの??
基本的にどちらでも文字列は作成できる。
式展開がある場合だとダブルクォーテーションを必然的に使うようになるがそうでない場合好きな方使えばいい
開発するチームでどっちを使って行くか方針を決めるべき
数値
rubyの数字には_を含めることができる。
pry(main)> 1000_0000 => 10000000
また数字が入っている変数に-をつけると正負を反転できる。
pry(main)> n = 1 => 1 pry(main)> -n => -1
rubyで連続してアスタリスクを書くとべき乗を求めることができる
pry(main)> 2**2 => 4
格納された値の数値を増減するやり方
rubyには代入された値を増減させる ++ --(インクリメント)が存在しない。
これに似たもので
1増やす
x += 1 (x = x +1)存在する
1減らす
x -= 1
他のプログラミング言語は数字っぽい文字列は数字とみなす(暗黙の型変換が行われているが)
rubyでは数字の1と文字列の1は計算することが出来ない
よって文字列の場合だと整数または少数に変換する必要がある。
pry(main)> 1 + "1" TypeError: String can't be coerced into Integer from (pry):83:in `+' pry(main)> 1 + "1".to_i => 2 pry(main)> 1 + "1".to_f => 2.0
逆に数値を文字列に連結するこは出来ない
pry(main)> x = 1 => 1 pry(main)> "today_" + x TypeError: no implicit conversion of Integer into String from (pry):87:in `+' "today_" + x.to_s => "today_1"
式展開を使った場合だとto_sが呼ばれるので文字列に変換する必要がない
x = 1 "today_ + #{x}" => "today_ + 1"
次回へ...