楽しいRuby
図書館にたまたま置いてあった。言語を体系的に学ぶのは初なので、備忘録として
ARGV(アーグヴィ)
$ rubyfile.rb Ruby
puts #{ARGV[0]} #rubyfile
コマンドラインからデータを入力できる。
rubyfile.rbをコマンドラインで呼び出す時に入力文字であるRubyを入力すると、
ARGV配列に順番に格納される。初めて知った。コマンドライン引数というらしい。
オブジェクトの同一性
全てのオブジェクトは「アイデンティティ」と「値」を持っている。
アイデンティティは同一性を表すものでobjecut_idメソッドで取得し、2つのオブジェクトがIDが同じかどうかはequal?メソッドで判定する。値が同じかは==を使うか、eql?メソッドを使う。eqlメソッドは厳密な比較に使われる。例えば、1と1.0はeql?するとfalseになる。
繰り返し構文
どれを使えばいいかわからなくなく。
timesメソッド
7.times do 7.times { }
単純に複数繰り返したい処理で回数が決まっている場合に使う。
for文
for i in 1..5 end
オブジェクトから要素を取り出す場合
開始時の値や、終了時の値が決まっている場合に使う。
while文に比べると、1ずつ増加させる時に使う。
while文
i = 1 while i < 3 puts i i += 1 end
条件を自由に指定したい場合
条件が真の間処理を続ける。
until文
whileではわかりにくい条件を指定したい場合
条件が偽の間処理を続ける。
eachメソッド
オブジェクトの集まりに対して、それを1つずつ取り出す時に使う。
メソッド
引数の数が不定なメソッド
def foo(*args) args end p foo(1, 2, 3) #=> [1 , 2, 3]
引数の数が決められないメソッドは*変数名の形式で与えられた引数をまとめて配列として得られる。
クラスとモジュール
クラスの中にinitializeメソッドがある理由
おそらく、クラスから新しいオブジェクトを作る。新しいオブジェクトは引数を色々渡して、何度も複数回に渡り作る。オブジェクトを作る歳にインスタンス変数も更新し続けなければ、前の変数をそのまま使うことになりかねない。なので、クラスを作る際には変数を初期化するためのinitializeメソッドが必要になる。
アクセスメソッド
オブジェクトの外部からインスタンス変数を参照したり、インスタンス変数に代入することができない。内部の情報にアクセス、参照やら代入やらのためのメソッドが必要。@name、@name = が定義されただけのメソッド。
これをいちいち、クラスで定義するのが面倒だということで作られたのが、
アクセスメソッド。
- attr_reader : name
- attr_writer : name
- attr_accessor : name
instance_methodメソッド
クラスオブジェクトに対して使えるメソッド。そのクラスがどんなメソッドを持っているかを把握するために使う。