ついに、今回を含めて残り3章となりました(9章は資料の紹介とかが多いので割愛予定)、今月中に終わらせたいところ。。
前回の記事はこちら
さて、今回は第6章「変数と式」についてまとめていきます。
変数について
Ruby における変数の特徴として、変数は値ではなく参照を保持する
hoge = "hoge" bar = hoge # Stringオブジェクト "hoge" の参照を代入しており、変数 hoge と同一のオブジェクトを参照している puts hoge # => "hoge" puts bar # => "hoge" bar = "bar" puts bar # => "bar" puts hoge # => "bar"
また、変数宣言をしなくても、変数名の先頭文字で自動的に種類が決まる
先頭文字以降は、ASCII記号をのぞく任意の印刷可能文字とアンダースコアを変数名に使用できる
慣習的には、スネークケースを用いる
予約語はこちら
変数の種類・判別に用いる先頭の文字列は以下
ローカル変数
特定のメソッド呼び出し、クラス定義、ファイル実行の中だけで利用できる変数で最もスコープが狭い
def hoge(arg) { v = arg } def bar(arg) { v = arg } hoge(123) bar(123)
hogeメソッド
、barメソッド
内の変数 v
はスコープが違うので、全く別物
インスタンス変数
特定のオブジェクトに属する変数で、同一のオブジェクトのメソッド間で共有される
クラス変数
その名の通り、クラスに属する変数
グローバル変数
その名の通り、どこからでも参照可能な変数
多用すると、各モジュールとその変数との結合度が上がるためプログラムの保守性を下げる
定数
変更されることのない変数(することはできるが、警告が出る)
HOGE.freeze
このように書けば変更することができない
擬似変数
特殊な変数で7つ存在し、代入することができない
true
真の値false
偽の値self
「現在の」オブジェクトを表す__FILE__
ソースファイル名を表す__LINE__
行番号を表す__ENCODING__
ソースファイルのエンコーディングを表す
演算子について
大部分はメソッド呼び出しをしやすくするシンタックスシュガーで、 5+5
は 5.+(5)
というメソッドの呼び出しである
※演算子は、ここに到るまでにある程度使用しているので抜粋する
代入演算子
複数の値を一度に代入する方法
a, *b = 1, 2, 3, 4, 5 p a # => 1 p b # => [2, 3, 4, 5] a, b, c, d = b p a # => 2 p b # => 3 p c # => 4 p d # => 5
制御式について
case 式の注意点
case 式の範囲分岐は厳密ではない
v = 3 case v when 0 then p 0 when 1..9 then p 1 when 0 then p 2 end $ ruby sample.rb 1
v
は数値オブジェクトなので、Range オブジェクトとは等しくないはずであるが、該当の範囲にマッチする
例外処理について
例外が予想される部分を begin
, end
でくくることで範囲内での例外発生時に対応する resucue
節に飛ばすことができる
また raise
で例外を意図的に発生させることができる
def sample begin raise ArgumentError, "hoge" rescue ArgumentError => e puts e.message rescue puts "something error" end end $ ruby sample.rb hoge
サンプルコードでは、ArgumentError
を意図的に発生させ rescue
でキャッチし、エラーメッセージを表示している
該当のエラーが ArgumentError
以外の場合、最後の rescue
節でキャッチすることができる