Rubyの基礎学習が一通り終わり、違う教材で復習をしていた時に重要だと思った点や知らなかったテクニックを備忘録的にまとめたものです。
.classと.methods(オブジェクトに対して使用できる)
- .class
クラスが分かる
- .methods
そのオブジェクトの持っているメソッドが分かる
破壊的メソッド(!がつく)
元の値を書き換えてしまうメソッドのこと
(例).upcaseメソッド(値を大文字に変えて出力)
name = "tarou"
puts name.upcase #"TAROU"
puts name #=>"tarou"
puts name.upcase! #"TAROU"
puts name #=>"TAROU"
真偽値を確認(?がつく)
name = "tarou"
p name.empty? #false
p name.include?("r") #true
配列の添字
マイナス数字
[-1]とすると、末尾から1つ目
[-2]とすると、末尾から2つ目範囲指定
[0..2]と指定すると、0〜2の値を取得
[0...2]で、0〜2の直前
ハッシュでよく使うメソッド
- size ・・・ 要素の数を取得(配列でも使える)
- keys ・・・ キーの一覧を取得
- values ・・・ 値の一覧を取得
- has_key?("name") ・・・ キーがあるかどうか
変換
- to_i ・・・ 整数(integer)
- to_f ・・・ 小数点あり(float)
- to_s ・・・ 文字列(string)
- to_a ・・・ 配列(array)
- to_h ・・・ ハッシュ(hash)
(例)配列とハッシュの変換
scores = {taguchi: 200, fkoji: 400}
scores.to_a => [[:taguchi, 200], [:fkoji, 400]]
scores.to_a.to_h => {:taguchi=>200, :fkoji=>400}
%記法
ダブルクォーテーション
"文字列" ・・・ %Q(文字列) もしくは %(文字列)で書ける※Qは省略可能シングルクォーテーション
'文字列' ・・・ %q(文字列)で書ける
何が便利か?
文字列の中にダブルクォーテーションやシングルクォーテーションを記述したい時に、表記が分かりやすい
【he\"llo】と記載したい場合
=> puts "he\"llo"
=> puts %Q(he"llo)
=> puts %(he"llo)
【'he\'llo'】と記載したい場合
=> puts 'he\'llo'
=> puts %q(he'llo)
【配列の場合の%記法】%W もしくは %w
【p ["red", "blue"]】
=> p %W(red blue)
【p ['red', 'blue']】
=> p %w(red blue)
forを使った繰り返し処理
forは何らかの集合的なオブジェクト(配列やハッシュ)や、範囲を表すオブジェクトの要素数分だけ何らかの処理を繰り返すことができる命令である
for i in 10..20 do
p i
end
#eachへの書換えも可能
(10..20).each do |i|
p i
end
for color in ["red", "green"] do
p color
end
#eachへの書換えも可能
["red", "green"].each do |color|
p color
end
for name, score in {taro:100, jiro:200} do
puts "#{name}: #{score}"
end
#eachへの書換えも可能
{taro:100, jiro:200}.each do |name, score|
puts "#{name}: #{score}"
end
クラス(クラスメソッド、クラス変数、定数)
クラスメソッド
def self.メソッド名
endクラス変数
@@変数名定数
大文字から始まる(慣習的に全て大文字で記述)
(例)
class User
@@count = 0 #クラス変数
VERSION = 1.3 #定数
def initialize(name)
@name = name
@@count += 1
end
def sayHi #インスタンスメソッド
puts "hi! i am #{@name}"
end
def self.info #クラスメソッドを定義
puts "#{VERSION}: User Class, #{@@count} instances."
end
end
ichiro = User.new("ichiro")
jiro = User.new("jiro")
saburo = User.new("saburo")
User.info #クラスメソッドの実行(クラスから直接呼び出せる)
p User::VERSION #定数をクラスの外から呼び出す場合はコロン2つ記述
クラスの継承
class Miniuser < User (Userクラスの情報が継承される)
User: 親クラス、もしくはSuper Class と呼ぶ
MinUser: 子クラス、もしくはSub Class と呼ぶ
子クラスで親クラスで定義したメソッドを上書きすることも可能(オーバーライドと呼ぶ)
privateのポイント(メソッドのアクセス権)
- レシーバーを指定できない
- Sub Class(子クラス)から呼び出せる(Rubyの特徴)
- オーバーライドできる(Rubyの特徴)
※Rubyのprivate指定は他の言語のオブジェクト指向プログラミングと動作が異なるようである
モジュールについて
開発規模が大きくなると、メソッド名などが他の人が作ったものと被ってしまい、それが原因でエラーになってしまうことがある。そのような場合に、モジュールを使うと命名した名前が衝突せずに便利である。
モジュールの特徴としてはメソッドや定数をまとめることができるが、インスタンを生成したり継承したりはできない。
#モジュールの作り方
module Car #大文字から始める
VERSION = 1.3 #定数を作れる
def self.go
puts "going..."
end
def self.stop
puts "stopping..."
end
end
#モジュールの実行
Car.go
Car.stop
モジュールについて その2
モジュールの用途にミックスインというものがある。
単に機能としてクラスに提供する場合に使用。
メソッドを生成する際に、selfを付けずにインスタンスメソッドとすることにより、他のクラスのインスタンスメソッドとして使用でき、これをミックスインという。
その際、クラス側では「include モジュール名」を記述する。