プロを目指す人のためのRuby入門(通称チェリー本) 改訂2版
をやっていきます
オブジェクト.メソッド(引数1,引数2,引数3)
引数のカッコは省略することができる
オブジェクト.メソッド 引数1,引数2,引数3
業務でみたことあったな、こんなコード。
10.to_s(16)
# => "a"
数値を16進数の文字列に変換する
10.to_s(19)
これも実行結果は、"a"になった。
なんで。。。
一旦チェリー本を読み進めたいので、次。
=begin
こめんとだからエラーにならない?
=end
と複数行でコメントアウトできるっぽい。
ちなみに手元のルビーファイル(file.rb)
に上記のコードを書いて、ruby file.rbと実行したら
cherry.rb:1: syntax error, unexpected '='
=bigin
cherry.rb:5: syntax error, unexpected '=', expecting end-of-input
とバリバリエラーが起きた。
追記、biginではんくbeginでした。。。。
biginとendは、コード中にRDocというドキュメントを埋め込むために用意されている構文らしい。
RDocは、Rubyプログラミング言語用の埋め込みドキュメントジェネレーターです。 Rubyのソースコードを分析し、Rubyのオブジェクトとメソッドのページの構造化されたコレクションを生成します。
wikipedia引用。
Yardの元から組み込まれてる版的な感じですかね。
識別子と予約後
漢字や、ひらがなも識別子として使える
Ruby 3.0では _1 _2 _3 _4 _5 .. _9
が予約語になってる
空白文字
空白文字はいくつ続いてもいい。
しかり、メソッド呼び出しの()の手前にスペースを開けたら構文エラーが発生する場合もある。
リテラル
数値の123,文字列の"Hello"など、ソースコードに直接埋め込むことができる値のことをリテラルといいます。
数値、文字列
変数
数値から始まる変数名は使えない、エラーになる
c,d = 10
右辺の数が少ない場合はnilになる
c #=> 10
d #=> nil
右辺の数が多い場合ははみ出した値が切り捨てられる
e,f = 100, 200 ,300
e => 100
f => 200
アンダースコアで始まる変数名はあまり使わない。が
「宣言するが使わない」という意味をもたせてあえてアンダースコア始まりの変数名が使われるケースもあります。
# splitメソッドをつかって人名をスペースで二分割するが、使うのはファーストネームだけ
# ラストネームは使わないので、変数名をアンダースコア始まりにする
first_name , _last_name = 'Scott Tiger'.split(' ')
p first_name #=> scott
# このバリエーションで、変数名をアンダースコア一文字にしてしまうケースもある
first_name , _ = 'Scott Tiger'.split(' ')
p first_name #=> scott
# 両方にhelloを代入する
a = b = 'hello'
a.upcase!
# aだけを大文字にしたはずなのにbも大文字に変わってしまった
a #=> "HELLO"
b #=> "HELLO"
#別々に代入した場合は、この問題はおきない
c = "hello"
d = "hello"
c.upcase!
c #=> "HELLO"
d #=> "hello"
a = b = 'hello'は同じハッシュ値であるhelloを代入してしまった。
c = "hello"
d = "hello"
見かけ上はどっちもhelloだが、ハッシュ値が違う。的な感じなのかな。
というような予想をしつつ次
文字列
シングルクォートのなかで、シングルクォートを使いたいとき
ダブルクォートのなかで、ダブルクォートを使いたいときは、バックスラッシュでエスケープ
puts 'He said, "Dont\'t speak"'
#=> He said, "Don't speak"
文字列の比較
"a" < "b" #=> true
文字列を構成するバイト値が、大小比較の基準となる
数値
数値には_を含めることができる
1_000_000_000 #=> 1000000000
変数の手前に - をつけると数値の正と負を反転できる
n = 1
-n #=> -1
1/2 #=> 0.5ではなく0になる
1.0 / 2 #=> 0.5
1 / 2.0 #=> 0.5
小数点以下の値が必要な場合はどちらかの値に小数点の.0を付けます
変数に整数が入ってる場合は to_fメソッドを呼ぶことで整数から少数に変更することができます。
*浮動小数点数 Float
n = 1
n.to_f #=> 1.0
n.tof /2 #=> 0.5
**はべき乗を求める演算子
2**3 #=> 8