• 検索結果がありません。

メソッドとクラス

ドキュメント内 Ruby演習テキスト2015_本文.indd (ページ 38-44)

8. メソッドとクラス

8.1.メソッド

C言語などの「関数」にあたるものをRubyでは「メソッド」と呼びます。


あるプログラムの手続きをまとめたものと考えます。

fig10-1.rb メソッド基本

!

def testfunc # 引数のない場合は括弧の省略可 "Hello"

end # 最後の評価された式の値が返る(この場合"Hello")

!

def testfunc2( num = 100, memo = nil ) # 引数あり、デフォルト引数指定可 if num > 100

return "result" => "high", :memo => memo # 複数の返り値 else

return "result" => "low", :memo => memo end

end


!

puts testfunc # => “Hello”

puts testfunc2(90,"abcd") # => {“result”=>”low”, :memo => “abcd”}

puts testfunc2(150) # => {“result”=>”high”, :memo => nil}


! !

38 Ruby基礎演習

社会人技術者研修 2015年度テキスト

!

メソッド名は小文字から始まる英数字


引数は省略、仮引数、デフォルト引数の指定可能


(他にも可変個数引数などの記述が可能)

!

メソッドの帰り値は、メソッド呼び出しから戻る直前の評価式の値、または return に渡された値
 複数の帰り値を返す記述も可能

!

39 Ruby基礎演習

社会人技術者研修 2015年度テキスト

39

演習 !

Q7. 指定ファイルの総文字数をカウントして出力

! !!

Q8. 指定ファイル内容を大文字に変換して出力�

! !!

Q9. 指定ファイルから任意の文字のある行だけを表示する(行番号付き)�

!

40 Ruby基礎演習

社会人技術者研修 2015年度テキスト

8.2.クラス

オブジェクトに関する 定義と手続き をまとめたものを「クラス」と呼びます。

fig13-1.rb クラス基本

class Fruit #クラス名は大文字から
 DEFAULT_BRAND = “tsugaru” #定数定義

!

def initialize(str = “apple")

# initializeは、このクラスのインスタンスが生成された直後に呼び出される @str_name = str

@str_brand = "unknown"

end

def name # クラスメソッド定義(C++で言うところのメンバ関数)

@str_name end

def brand # @str_brand

end


!

def set_name(str, brand) @str_name = str

    @str_brand = brand end


end # Fruitクラス定義ここまで

!

41 Ruby基礎演習

社会人技術者研修 2015年度テキスト

40

演習 !

Q7. 指定ファイルの総文字数をカウントして出力

! !!

Q8. 指定ファイル内容を大文字に変換して出力�

! !!

Q9. 指定ファイルから任意の文字のある行だけを表示する(行番号付き)�

!

40 Ruby基礎演習

社会人技術者研修 2015年度テキスト

8.2.クラス

オブジェクトに関する 定義と手続き をまとめたものを「クラス」と呼びます。

fig13-1.rb クラス基本

class Fruit #クラス名は大文字から
 DEFAULT_BRAND = “tsugaru” #定数定義

!

def initialize(str = “apple")

# initializeは、このクラスのインスタンスが生成された直後に呼び出される @str_name = str

@str_brand = "unknown"

end

def name # クラスメソッド定義(C++で言うところのメンバ関数)

@str_name end

def brand # @str_brand

end


!

def set_name(str, brand) @str_name = str

    @str_brand = brand end


end # Fruitクラス定義ここまで

!

41 Ruby基礎演習

社会人技術者研修 2015年度テキスト

41

!

p "brand name : #{Fruit::DEFAULT_BRAND}”   # => "tsugaru"

a = Fruit.new # aはFruitクラスのインスタンス

p a.brand # => “unknown”

a.set_name("apple", "fuji")

p a.brand # => “fuji”

!!

42 Ruby基礎演習

社会人技術者研修 2015年度テキスト

8.3.クラス継承

fig13-3.rb クラス継承

!

class Area # 面積を扱うクラス def initialize(x=0, y=0)

@x = x; @y = y # @つきの変数はクラス変数 end

def calc_gross

@x * @y end

end

!

class Area_3D < Area # 面積クラスの要素を継承して体積クラスを定義 def initialize(x=1, y=1, z=1)

super(x,y) # superは継承元の同じメソッドを呼び出す

@z = z end

def calc_gross super * @z end

end

!

a = Area_3D.new( 10, 20, 30 ) p a.calc_gross

!

43 Ruby基礎演習

社会人技術者研修 2015年度テキスト

42

!

p "brand name : #{Fruit::DEFAULT_BRAND}”   # => "tsugaru"

a = Fruit.new # aはFruitクラスのインスタンス

p a.brand # => “unknown”

a.set_name("apple", "fuji")

p a.brand # => “fuji”

!!

42 Ruby基礎演習

社会人技術者研修 2015年度テキスト

8.3.クラス継承

fig13-3.rb クラス継承

!

class Area # 面積を扱うクラス def initialize(x=0, y=0)

@x = x; @y = y # @つきの変数はクラス変数 end

def calc_gross

@x * @y end

end

!

class Area_3D < Area # 面積クラスの要素を継承して体積クラスを定義 def initialize(x=1, y=1, z=1)

super(x,y) # superは継承元の同じメソッドを呼び出す

@z = z end

def calc_gross super * @z end

end

!

a = Area_3D.new( 10, 20, 30 ) p a.calc_gross

!

43 Ruby基礎演習

社会人技術者研修 2015年度テキスト

43

ドキュメント内 Ruby演習テキスト2015_本文.indd (ページ 38-44)

関連したドキュメント