30代でジョブチェンジ

30代中盤、社会人経験約10年の男性です。転職をしてすぐに退職勧奨を受けて無職をしながらIT関連の学習をしていました。現在は業界で就労中です。

楽しいRuby

図書館にたまたま置いてあった。言語を体系的に学ぶのは初なので、備忘録として

正規表現

パターンマッチ
/Ruby/ =~ "Yet Another Ruby Hacker"

この正規表現のパターンで返ってくる値はマッチした部分ん先頭の位置を返す。
これだと、12 ちなみに先頭はYで配列と同様0から数える。
でマッチしない場合は、nilを返す。

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つずつ取り出す時に使う。

loopメソッド

終了条件のないただの繰り返し。
条件から抜けるのに利用する、break、redo、nextがある。
redoはほとんど使わない。

メソッド

引数の数が不定なメソッド
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メソッド

クラスオブジェクトに対して使えるメソッド。そのクラスがどんなメソッドを持っているかを把握するために使う。