第18回 スクリプト初心者な君へ

 2008-11-20
今回の講座は、
・再定義
・alias
・super
・self
について話したいと思います。


1.再定義
スクリプトを変更する際に皆さんはどうしていますか?
元のスクリプトに直接書き込んで変更するのか、
元のスクリプトは、残しておいて再定義するのか。

私は、再定義をオススメします。
その理由は、
 1.削除 or コメントアウトで元の処理に戻すことが出来る。
 2.変更箇所が一目でわかる。
 3.再利用しやすい。
と、まぁこんな感じです。
1、2なんかは、直接変更の方でも出来ますが、
ひと手間かかるので面倒ですし、コメントが増えるとスクリプトが見難くなるので。

あ、再定義というのは、処理の上書きのことです。
同じクラス内に、同じ名前のメソッドを定義することで、
古いほうの処理に上書きします。

2.エイリアスって何だい?
これは、別名を定義するためのものです。
alias 新しい名前 古い名前
このように使用します。
あるメソッドを再定義したいけど、再定義前のメソッドも使いたい時などに使用します。
まぁ、主にスクリプトの競合防止のために使います。
2つのスクリプトで同じメソッドを再定義してしますと、
1つ目のスクリプトの処理は消えちゃいますよね?
ですので、メソッドを書き直す"再定義"ではなく、追加するという感じです。
def hoge
 p "1"
end
alias piyo hoge
def hoge
 piyo
 p "2"
end
大丈夫ですよね?

3.super って?
これは、スーパークラスのメソッドを呼び出してるわけです。
class Foo < Bar
ってあるでしょ?
Foo クラスの method メソッド内に super が書かれていたら、
Bar クラスの method メソッドを呼び出してるわけです。

4.self
レシーバってやつですね。自分自身を表しています。
つまり、メソッドを呼び出したインスタンスです。
class Foo
 def my_p
  return self
 end
end
f = Foo.new
p f      # => #<Foo:0x284068c>
p f.my_p  # => #<Foo:0x284068c>
同じものであることがわかると思います。

def foo
 p "foo"
end
def bar=(val)
 p val
end

# self は省略することが出来ます。
foo
# bar メソッドを実行したつもりでも、変数に代入と見なされます。
bar = 1
p bar
# self を付けて、メソッドであることを明確にします。
self.bar = 3
コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/131-5c021529
≪ トップページへこのページの先頭へ  ≫
カレンダー
06 << 2017/07 >> 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

カテゴリー
最近の記事
最近のコメント
03/16 お返事
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事

タグクラウド

リンク