LoginSignup
0
0

More than 3 years have passed since last update.

今週のRuby (while、for, each , loop 〜クラスメソッドアクセサまで)

Last updated at Posted at 2019-11-20

今回の内容

  1. while,timesを使う
  2. for,eachを使う
  3. loop, break, nextを使う
  4. メソッドを作る。
  5. クラスをつくる
  6. アクセサを使う attr_, selfなど
  7. クラスメソッド、クラス変数を使おう

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で表現できる。

メソッドを受け取っているオブジェクトのことを、レシーバーというらしい。

まとめ

  • マークアップ書式でメモを書くと、#がマークアップと認識されることに気づく。条件つき書式を書くと#{~}と書く必要性があり、ややこしくなる。バックスラッシュ\ を毎回入れる必要性がある。
  • アクセサあたりからよくわらなくなってきた。
0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0