top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_444

Ruby:◇クラス定義 ・・・ 【Ruby:18歩目】

 2008-11-11
第18歩
 ◇クラス定義

  ・クラス
  [ ポイント ]
  [ 書き方 ]
  [ 利用 ]
  [ 表示 ]
  [ インスタンスメソッド ]
  [ インスタンス変数 ]
  [ initialize ]
  [ inspect ]

長いので、追記に ▼

※この連載は、はじめて「Ruby」に取り組んだmetaboyが、
 PHPなどとの違いを考慮しつつ、ゆっくりと
 良書「はじめてのRubyプログラミング」を基に
 学んでゆく、詳細な記録です。
                      (本日の参照:170頁


FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more  [ ポイント ]
   ●クラス名の先頭は大文字
   ●クラスの中で、「インスタンスメソッド」を定義
   ●intialize メソッドは、オブジェクトを生成するときに
    発行される
   ●インスタンス変数には
    オブジェクトに固有な値を保存しておくことができる

  [ 書き方 ]
    ・クラス名の先頭はアルファベット大文字
class Tsukuru
end

 ※メソッド名に使えるのは、英数字とアンダースコア

  [ 利用 ]
    ・クラスの定義 と オブジェクト生成
class Tsukuru
end
m = Tsukuru.new

 ※Tsukuru.new の実行
  > Tsukuruクラスのオブジェクトを生成
  > 結果を m に代入

 ※Tsukuruクラスは、Tsukuru がどういうものか定義したもの
  ▼
  Tsukuruクラスから作り出されたオブジェクトは、その実体

  [ 表示 ]
    ・pメソッド で表示してみる
class Tsukuru
end
m = Tsukuru.new
p m #-> #
> 確認した
 ※0x の後に16進数の
  メモリ上のオブジェクトのアドレス

  [ インスタンスメソッド ]
    ・インスタンス == オブジェクト。
    ※クラスから生成されたオブジェクトのことを
     インスタンス と呼ぶ

   ●Tsukuruクラスの定義内容を創ってみる
    前の「メソッド」の項で創った
    メソッド:youkoso を定義する
class Tsukuru
def youkoso
puts "創るmetaboy へようこそ"
end
end
m = Tsukuru.new
#( youkosoメソッドが利用できるようになる )
m.youkoso #-> "創るmetaboy へようこそ"
> 確認した
※undefined method `var' for main:Object (NoMethodError)
 となる

  [ インスタンス変数 ]
    ・Tsukuru クラスに、創る難しさのレベルを
     返すメソッドを追加してみる
class Tsukuru
def thislevel
rand(10) + 1
end
end
m1 = Tsukuru.new # Tsukuru1 を作成
m2 = Tsukuru.new # Tsukuru2 を作成
m3 = Tsukuru.new # Tsukuru3 を作成

# それぞれメソッドを利用
p m1.thislevel # Tsukuru1 のレベルを表示
p m2.thislevel # Tsukuru2 のレベルを表示
p m3.thislevel # Tsukuru3 のレベルを表示

# 結果は それぞれランダムで数値が返る
# > しかし、毎回sの値が
#   変わってしまう

p m1.thislevel # 先ほどと値が変わる
p m2.thislevel # 先ほどと値が変わる
p m3.thislevel # 先ほどと値が変わる
> 確認した

・ひとつの Tsukuru を調べたときに
 一度そのレベルが確定したら
 そのまま残したい

・オブジェクト毎に、任意の値を保持したいとき
 インスタンス変数を利用する、
class Tsukuru
def initialize
@thislevel = rand(10) + 1
end
def thislevel
@thislevel
end
end

# initialize というメソッドは初期化をする
# > つまり一度しか実行されない
#   これを利用して、
#   @thislevel という変数に
#   値を保持し、2回目からは 単にその値を返す

m1 = Tsukuru.new # Tsukuru1 を作成
m2 = Tsukuru.new # Tsukuru2 を作成
m3 = Tsukuru.new # Tsukuru3 を作成

# それぞれメソッドを利用
# 繰り返しやっても同じ値が返る
p m1.thislevel # Tsukuru1 のレベルを表示
p m2.thislevel # Tsukuru2 のレベルを表示
p m3.thislevel # Tsukuru3 のレベルを表示
p m1.thislevel # 先ほどと同じ値
p m2.thislevel # 先ほどと同じ値
p m3.thislevel # 先ほどと同じ値
> 確認した
※この @のついた変数を
 「インスタンス変数」 という

 ・インスタンス変数 == オブジェクト毎に個別の
  値が用意される変数
 ・スコープは、同一のオブジェクトの中
  同じオブジェクトに対して、別々の
  インスタンスメソッドを呼び出しても
  オブジェクトが同じならば、共有される

  [ initialize ]
    ・(前述の)initialize メソッド
     特別なメソッドで、クラスから
     オブジェクトを作り出すときに
     そのオブジェクトに対して、一度
     だけ、実行される

  [ inspect ]
    ・(前述の)p メソッドで表示されるときの
     値をカスタマイズできる
   (例)前述の
    ・pメソッド で表示してみる
class Tsukuru
end
m = Tsukuru.new
p m #-> #
> 確認した
 ※0x の後に16進数の
  メモリ上のオブジェクトのアドレス

   ▼

class Tsukuru
def inspect
"<創るオブジェクト>"
end
end
m = Tsukuru.new
p m #-> #<創るオブジェクト>
> 確認した

※phpの場合と比べると・・・
 考え方は同じ・・・


(例)
class Delete extends PackageAuthedHttpApplication
{
function &init(&$objGate, &$objConfig, &$objResponse)
{
parent::init($objGate, $objConfig, $objResponse);
}

/**
* 初期処理
*/
function &initExecute(&$objGate, &$objConfig, &$objResponse
, &$objRequest, &$objSession, &$objFormStatus)
{
parent::initExecute($objGate, $objConfig, $objResponse
, $objRequest, $objSession, $objFormStatus);
}

/**
* GET処理
*/
function &defaultExecute(&$objGate, &$objConfig, &$objResponse
, &$objRequest, &$objSession, &$objFormStatus)
{

 ・・・・



commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/444-82130b1e
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。