##今回の内容
- while,timesを使う
- for,eachを使う
- loop, break, nextを使う
- メソッドを作る。
- クラスをつくる
- アクセサを使う attr_, selfなど
- クラスメソッド、クラス変数を使おう
##while,timesメソッドを使う
###while書き方
whileは他の言語でもおなじみ。
使いやすい。
条件書式付き文字が意外と便利なことに気づく。
#{1}
i =0
while i < 10 do
puts "#{i}:hello"
i +=1
end
###timesメソッド
whileと機能としては一緒だが、回数がすでに決まっているときは便利な書き方。
10.times do |i| #|i|をつけるとiを0からカウントしてくれる。特に見る必要性がなければ入れる必要性がない。
puts "#{i}:hello"
end
iのカウント方法が独特で忘れそう。
あまり使う機会がなさそうだけど、表記自体が少なくて楽。
10.times do
処理
end
ってとても楽
1行表記も可能。この場合はdoがいらなくて、{}で挟む必要性がある。
10.times {|i| puts "#{i}:hello 短縮"}
##for,eachを使う
###forの書き方
#i格納の場合
for i in 15..20 do
p i
end
#配列の場合
for color in ["red","blue"] do
p color
end
#ハッシュ表記の場合
for name, score in {taguchi:200, fkoji:400} do
puts "#{name}: #{score}: "
end
##eachの書き方
for文はeachメソッドを実は使っているので、for文をeachで書き換えることが可能。
eachで1行表記なども可能。
#each , forを書き換えることができる。
#i格納の場合
(15..20).each do |i|
p i
end
#配列の場合
["red","blue"].each do |color|
p color
end
#ハッシュ表記の場合
{taguchi:200, fkoji:400}.each do |name,score|
puts "#{name}: #{score}: "
end
#ちなみに、1行表記も可能。
{taguchi:200, fkoji:400}.each{ |name,score| puts "#{name}: #{score}: "}
##loop, break, nextを使う
###loopメソッド
ずっと繰り返しを行うメソッド。
#loopの処理
i =0
loop do
p i
i += 1
end
#ctrl c を押すとloop止めれる。ターミナル上。
###break, next の書き方
#break: loopをぬけることができる。
#next : loopをスキップすることができる。
10.times do |i|
if i == 7 then
#break #ここで処理を抜ける
next #ここで処理をスキップさせる。
end
p i
end
##メソッドを作る
メソッドを作る際の書き方。
#メソッドを作る
#シンプルにメソッドを作る場合
def sayHi
puts "hi!"
end
sayHi #メソッドsyaHiの呼び出し
#オプションを渡したい場合
def sayHi (name) #かっこをつける,引数
puts "hi! #{name}"
end
sayHi("taguchi") #メソッドsyaHiの呼び出し
sayHi "taguchi" #()は省略することが可能。
#引数にデフォルト値を与える。
def sayHi (name = "tom") #デフォルト値をつける。
puts "hi! #{name}"
end
sayHi "taguchi"
sayHi #引数なしでもデフォルト値を返す
#メソッドに値を返してもらいたい場合
def sayHi (name = "tom") #デフォルト値をつける。
#puts "hi! #{name}" #putsはなしでも大丈夫。
return "hi! #{name}"
end
p sayHi
##クラスを作る
クラスをつくる書き方。
##クラスを作る
#userクラスをつくる。
class User #クラス名は必ず大文字から始める。
def initialize(name)
@name = name #インスタンス変数 。 インスタンス変数は、インスタンス内ならば、どこでも使える。
end
def sayHi
puts "hi! I am #{@name}" #インスタンス変数を用いる。
end
end
#インスタンスを作る
tom = User.new("tom") #tomという変数をつくる。tomのインスタンスオブジェクト。
tom.sayHi #tomのインスタンスオブジェクトで、sayHiメソッドを呼び出す。
bob = User.new("Bob")
bob.sayHi
##アクセサを使う
インスタンス変数をクラス外部でアクセスする方法。
attr_accessor :name #コロン以降は、スペースは入れない。スペースも認識される。
#setter : 値を設定する方のメソッドをセッターという。 #nameメソッド
#getter : 値を取得する方のメソッドをゲッターという。
インスタンス変数を、attr_accessorでシンボルで渡してあげることで、外部からアクセスできるようになるらしい。
ゲッターだけ取得する方法もあるらしい。
attr_reader :name #現状これをどのタイミングで使うのかはわからないけど。
##クラスを作る
#userクラスをつくる。
class User #クラス名は必ず大文字から始める。
attr_accessor :name
#attr_reader: name #セッターのみを定義したい場合。
def initialize(name)
@name = name #インスタンス変数 。 インスタンス変数は、インスタンス内ならば、どこでも使える。
end
def sayHi
puts "hi! I am #{@name}" #インスタンス変数を用いる。
end
end
#インスタンスを作る
tom = User.new("tom") #tomという変数をつくる。tomのインスタンスオブジェクト。
tom.name = "tom.Jr"
p tom.name
tom.sayHi #tomのインスタンスオブジェクトで、sayHiメソッドを呼び出す。
###selfを使う。
メソッド内で使える。
そのメソッドで使っているインスタンス自体をselfで表現できる。
メソッドを受け取っているオブジェクトのことを、レシーバーというらしい。
##まとめ
- マークアップ書式でメモを書くと、#がマークアップと認識されることに気づく。条件つき書式を書くと#{~}と書く必要性があり、ややこしくなる。バックスラッシュ\ を毎回入れる必要性がある。
- アクセサあたりからよくわらなくなってきた。