プロが教えるわが家の防犯対策術!

初めまして。objective-Cの初心者で、「self」についての質問です。
「selfとは、自分自身を表す変数である。」と、様々なWebサイトや参考書に書いてあるのですが、いまいちピンときません。
例えば、target:selfとか、hoge.delegate=selfだとか、self.title=@"hoge"のようにselfが前に付いたり、後ろに付いたり、”:”だったり”=”だったり”self.”もしくは”.self”だったりでselfが何をしているのかが全く分かりません。
例えば@implementationの中の”Hoge{”内にあるtarget:selfという文があっても、「Hogeをターゲットにして自分(self)を呼び出して、一体何をしているんだ?」と考え込んでしまいます。
一体selfとは何者なのか(隠し引数だとか自分自身だとか、言葉は分かってるのですが)どなたか、ピンとくる回答をお願いいたします。「このselfさえ分かればもう、つまづく事は無い!」「このselfさえ攻略してしまえば...!」というところが、今の気持ちです。「これさえ分かれば」なのです。どうぞよろしくおねがいいたします。

A 回答 (3件)

オブジェクト指向という考え方は、プログラミングの中に現るものを「物」として扱い、それに対して、「メッセージ」を送ることで、処理を行おうという考え方です。



なので、基本は、「だれが」「だれに」「どのようなメッセージ(と、ついでに、パラメータ)」を送るか。
そして、メッセージの受け手は、「受けたメッセージに対してどういう反応を示すか」ということ。

たとえば、ドラマや芝居で、「この人物は、どのような言葉をかけられるとどう行動するか」ということを全部決めて、あとは、「スタート」と声をかけると、ドラマが勝手に進行する(処理が続行される)という考え方の上に成り立っているものです。

普通にドラマを作ろうとすると、始めから終わりまでシナリオを作らなければなりません。
それに対して、ある登場人物に対して、「誰それからこう言われたら、こういう反応をする」ということだけを決めるなら、一度に考えなければならないことが、少なくてすみます。だから、大きなシステムも比較的シンプルに構成できるだろうという発想です。

さて、「だれに」という要素が存在するのですが、メッセージというのは、自分以外の人に送ればそれですべてOKというものではありません。

「自分にメッセージを送ってください」と設定するとか(郵便.宛先 = 自分)
「自分のことを表明する」とか、(自分.名前 = 太郎)

まあ、そういう文脈で、「自分」ということがあちこち出てくるわけです。

そういう、「物(人も)」と「メッセージ」で成り立つ世界において、「彼」や「彼女」や「あなた」と同じように、「自分自身」を表すものです。


で、自分自身の行動には、いちいち「自分はどうする」といわないように、「自分」というのがなくても、動作は記述できるのですが、本来、他人に当てたメッセージや他人のことも設定できるような部分に、「(他の人じゃなくて)自分」というのを明示するのに、 self が使われたりするわけです。
    • good
    • 9
この回答へのお礼

ボンヤリとではありますが、なんとなく解ったような気がします。ありがとうございました。これからも精進していきます。

お礼日時:2014/01/22 16:26

ギャラのでない、ここで、ながながした説明する気にはなりませんが、まじめに、Objective-Cのテキスト読んだことあるんでしょうか。

よくあるのは、ネットにころがってある、いいかげんな説明をよんでわからん、とか言っていることですが。
 Appleのドキュメントは、基本、英語ですが、Objective-Cについての説明は、日本語でありますけど、これ、読みました?
    • good
    • 0

>target:selfとか、hoge.delegate=selfだとか、self.title=@"hoge"のようにselfが前に付いたり、後ろに付いたり



前に付いたり後ろに付いたりの意味が判らないなら、ぶっちゃけ「基礎から勉強して来い」なんだけど。

>selfが何をしているのかが全く分かりません。

「何もしてない」が正解。

http://ja.wikipedia.org/wiki/This_(%E3%83%97%E3% …

に解説されてる「this」と同じだから、上記ページをよく読むこと。

上記ページを読んでも理解できないなら、objective-Cなどの「オブジェクト指向言語」は理解できないから、他の言語を習得するか、プログラミングは諦めた方が身の為。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!