print "Hello! My name is Kougei Taro. \n"と書いた場合、
"Hello! My name is Kougei Taro. \n"の部分がオブジェクトになり、``print'' は、メ ソッドという。 この例では、、
"Hello! My name is Kougei Taro. \n"が printと言うメソッドの引数になっている。 オブジェクトは変数として別のオブジェクトに代入できる。
testobj = "Hello! My name is Kougei Taro. \n" print testobj実行結果は同じになる。
print testobj, "\n"
それにたいして、例えばこの文字列の 長さを知りたいときは
print testobj.length print "文字列の長さは" print testobj.length, "です。\n"
``オブジェクト.メソッド''
という形式になっている。
これを「オブジェクトにメソッドを作用させた」という。
------------------------------------------------- testobj = "Hello! My favorite food is fruit. \n" print testobj p testobj print "文字数は", testobj.length, "です。", "\n" -------------------------------------------------
class Name クラス定義 end上記がクラスの文法形式であるが、``クラス定義''の部分には ``メソッド'' が入る。
class Name def method1 aaaaaaaaa end def method2 bbbbbbbbb end def method3 ccccc end end形式的にはこのようになる。
メソッド名は小文字ではじめる(ここでは wasan)。
class Number # ==> 必ず大文字ではじめる def wasan(a,b) sum = 0 for n in a..b do sum = sum + n # print sum, "\n" end print "合計は ", sum, "です。\n" end endどのように実行するのか。 クラス定義の終わりは ``end''になるが、その下(外側)に次の2行を加える。
a = Number.new a.wasan(1,100)
1行目は``Number''のインスタンスを生成して、それを ``a''に代入している。 ``Number オブジェクトの生成''という言い方をしてもよい。 2行目は生成したインスタンス中のメソッド ``wasan''を実行している。
できあがったプログラムをもう一度書くと、
------------------------------------------ class Number def wasan(a,b) sum = 0 for n in a..b do sum = sum + n # print sum, "\n" end print "合計は ", sum, "です。\n" end end a = Number.new #新しいインスタンスの定義 a.wasan(1,100) #インスタンスの中の "wasan"の実行 a.wasan(1,10) ------------------------------------------の様になる。
解答
------------------------------------------ class Number def wasan(a,b) sum = 0 for n in a..b do sum = sum + n end print "合計は ", sum, "です。\n" end def kaijo(a) kai = 1 for n in 1..a do kai = kai * n end print a,"の階乗は ", kai, "です。\n" end end a = Number.new a.wasan(1,100) a.wasan(1,10) a.kaijo(5) a.kaijo(10) ------------------------------------------
もう一度以下のプログラムを見てもらいたい。
------------------------------------------ class Number def wasan(a,b) sum = 0 for n in a..b do sum = sum + n end # print "合計は ", sum, "です。\n" return sum end def kaijo(a) kai = 1 for n in 1..a do kai = kai * n end # print a,"の階乗は ", kai, "です。\n" return kai end end a = Number.new print "合計は ", a.wasan(1,100),"です。\n" print "合計は ", a.wasan(1,10),"です。\n" print a.wasan(1,100) + a.wasan(1,10), "は、合計の合計です。 \n" a.kaijo(5) a.kaijo(10) ------------------------------------------print文をコメントアウトして、``return''文により返り値を設定している。 これにより、計算結果がクラス定義の外に取り出せるようになった。