iOSプログラミング講座第9回「デリゲート」 (90)

こんばんは
今日もiOSプログラミング講座やっていきます
今日のテーマは「デリゲート」です

デリィィィィィィィィト!!!

delegateとは「委任する」という意味です
プログラミングの世界ではあるクラスの処理を別のクラスに任せるといった感じです

例えば僕たち「国民」クラスは「政治家」クラスに「政治」の処理を委任していますよね

こういう根本的なレクチャーが必要な層にはJavaによるAndroidアプリ開発の方が題材として向いてるように思われる

いきなり難易度高すぎワロタ

肛門からブリブリすることでしょ知ってるよ

では、なぜプログラミングの世界でデリゲートが必要なのか?

自分でやればいいじゃん

と思うかもしれません。

少しずつ紐解いていきましょう。
私たちが行っていくデリゲートのプログラミングでは私たちは「委任される側」です。
つまり先の例で行けば私たちが「政治家」です。

難易度高過ぎてなにいってるか分からん

何言ってんだ?
まずは基礎知識から教えてくれよ

第一回からやれや

どのような処理が私たちに任されるのか

ここで登場する概念が「イベント」です
ただしここでの「イベント」はお祭り的な意味合いではなく、「出来事」という意味合いのイベントです。

アプリ開発ではイベントが起きた時、どのような処理をするのか、それを私たちが「任されます」

ログ調べても第1回~第8回見当たらなくてワロタ

例え話から始めると余計分かりにくい

【ゆっくりしていってね!!】
       ∧,,∧  ∧,,∧     ∧,,∧
   ∧,,∧(´・ω・`)(´・ω・`)∧,,_∧・ω・` )
  ( ´・ω・`)(つ⌒と つ⌒と)´・ω・`)  ∧,,∧
  (つ∧( ´・ω・`)(´・ω・`)(´・ω・` ∧,,∧・ω・` )
∧,,( ´・ω(_.__つと_(_.__つと_)  ∧,,∧ ∧,,∧
(´・( つ ∧,,∧     __ _(´・ω・` )・ω・` )
 ( ∧,,∧・ω・`)_____|i\__\ と )∧,,∧と)

  ( ´・ω・`)と_※ ※ |i i|.====B|ヽノ(・ω・` )
  (つとノ`--∧,,∧|\\|_____◎_|_i∧,,∧  ∧,,∧
       ̄( ´・ω・| | ̄ ̄ ̄ ̄ |(・ω・` )(・ω・` )

        (つとノ.\|_____|(つとノ (つとノ

イベントはことあるごとに発生します。
テキストフィールドで例えます。
テキストフィールドでは

・テキストの編集が始まった時
・テキストの編集が終わった時
・テキストが編集されてる時
・テキストが全消去ボタンで消される時
・テキスト編集中に改行キーが押された時

などたくさんのイベントが用意されています。
ここで注目して欲しいのが全てのイベントは「~時」に起こっているということです。

>>12
初回なのに第9回かよww
デリゲートって言いたかっただけじゃねえのか?

指先に赤い丸いの付いてるやつでしょ知ってるよ

デリケートゾーンのかぶれ

何かが起きた時にイベントが起きます。

・あなたが起きた時
・あなたが寝る時
・あなたがトイレに行った時

このような時にイベントが発生します。
イベントが発生した時何をするかを「私たちが任され、それを実装していく」のです。

第9回からどんどん遡って最終的に最高のテキストが完成するのかもしれん

プログラミングでデリゲートって出てくるけどなんのこっちゃと思ってた自分にとってはタイムリーなスレ

つうか今までの説明だとイベントドリブン型と何が違うのかさっぱり

いつになったらパンを銜えた美少女とぶつかるイベントが発生して
ぼくに事後処理がデリゲートされるんでしょうか

では具体的にどのように実装するのか?

まず、どのクラスが任されるのかを決めなくてはいけません。
IBでの操作は省きますが、まず、任されたことを示す「名札」を掲げなければいけません。
「委任者」の資格を手に入れるのです。

これをプロトコルを実装するという手段で獲得します。

アプリ「テキストが編集されたぞ!」

アプリ「おい、この時の委任者誰だ!」

お前「わたしです」

こんな感じです。

>>23
お前との出会いはexceptionだから警察にcatchされて刑務所にthrowされます

委任者には「とりあえずこの処理は絶対してくれ」という義務的な処理と「まあしたいならしてもいいっすよ」という権利的な処理があります。

例えばテキストが編集された時に起こるイベントは特になんの処理もしなくてもそのまま編集されるだけですので問題はありません。

例えば「死」と入力されたら「●」へ伏字変換したい場合などはこの処理を委任してもらうのもいいでしょう。

objectiveよりもD言語がいいです

以上で第9回を終わります。

では5分間の休憩を挟みます。
次の講義は「オブジェクト指向入門」です。

最初からやれよー

ゲッターとセッター用意すればオブジェクト指向にならんのですかそうですか

概念の解説に尽きててワロタ

い、意味わからん
前の見てない人のために1~8も軽く説明しろよ

たんたんと進めててワロタ
コールバック関数みたいなものかな

1~8のログないの?

では始めます。

第1回オブジェクト指向入門「クラス」

みなさん、こんばんは。
今からオブジェクト指向入門講座を始めます。

な、なんだったんだ

デリゲートってコールバックやイベントハンドラみたいなもんのイメージでいいの?

第一回から始まった糞ワロタ

とりあえず様子見るか

神スレage

なんだこのスレw

イテレータというのを頼む

なぜ戻ったし

オブジェクト指向ってなんでしょう?
オブジェクトってなんでしょう?
objectで辞書を引いてみます

object
1. 物体 個体

そうです。オブジェクトとは物です。
指向ってなんでしょう。
辞書を引いてみます

指向
[名](スル)ある方向・目的に向かうこと。

つまりオブジェクトを中心にしたプログラムへ向かうような技法のことです。

オブジェクト指向プログラミング。
Object Oriented Programming

頭文字を取ってOOPとも呼ばれます。

オブジェクトを中心にしたプログラミングというのはどういうことなのか?

これはおいおい答えるとしてまずはオブジェクトの本質に迫ります。

OOPにおいてオブジェクトには仕様書があります。
どのような構造をしたオブジェクトなのか。
どんなことをするのか。
OOPではこの仕様書をまず書いてやります。
そして「仕様書に沿ったオブジェクトを作れ」と指示します。
仕様書を工場に持って行くようなものですね。

人間もどきの仕様書
情報
・名前
・年齢
・満腹度

行動
・名前を名乗る
・年齢を言う
・食べる
・うんこをする


仕様書を作りました。
この仕様書に基づいてオブジェクトを作れ!と指示するとこの仕様書の通りのオブジェクトが出来上がります。

ただし、この人間もどきはあいさつはできません。
なぜなら「あいさつする」という行動は仕様書にないからです。
歩くこともできません。
「歩く」という行動が仕様書にないからです。

なんでこんな過疎ってんの?

c畑が多いんじゃね?

スマホ規制されてるんじゃなかったけ?

プログラミングの世界では設計図を「クラス」といいます。
クラスから作られたオブジェクトをインスタンスといいます。

みんなキリストの誕生祝ってるんだよ
iOSというよりかは一般的な話だね

オブジェクティブC意味不明だから教えて欲しい

じゃあ私怨

プロトタイプベースの言語のことも時々でいいから思い出してあげてください

Q.なんでこんな過疎ってんの?
A1.クリスマスだから
A2.内容はわかりやすいけど、このスレでの>>1のスタンスが気に入らないから

Cではじめるオブジェクト指向入門

「オブジェクト指向はわかったけどなんでそれやらないといけないわけ?」

実際のコードを見てみましょう。

まず人間もどきクラスを作ります。

人間もどきクラス
{
int 名前;
int 年齢;
int 満腹度;

名前を言う関数 {
print 名前;
}
年齢を言う関数 {
print 年齢;
}
食べる関数 {
満腹度 にプラス3;
}
うんこをする関数 {
もし満腹度が100以上ならうんこする
}
}

Cでオブジェクト指向とかカオスにしかならない予感

Cでもオブジェクト指向的に書いてるライブラリ結構あるよな
ここまでやるなら素直にjC++使えとは思うがわかりやすくてよろしい

クラスができたので処理をしていきます。

人間もどき pseudohuman1;
人間もどき pseudohuman2;

pseudohuman1の名前 = けんすけ;
pseudohuman2の名前 = まちこ;

pseudohuman1の年齢 = 38;
pseudohuman2の年齢 = 26;

pseudohuman1の名前を言う関数;
pseudohuman2の年齢を言う関数;

for(40回繰り返す) {
pseudohuman1の食べる関数;
}

pseudohuman1のうんこをする関数;

>>55
何でiOSプログラミングなのにC++とかJava風のクラス作ってんだよ

JC++ってJKになんの?

>>59
実装部と定義部か分かれてる奴はわかりにくいからまずは設計図を意識した

では次に非オブジェクト指向的にプログラミングしてみます

よし、俺がiPhoneアプリ作れるようになる講義してやるわ

まず、大前提としてIBなんぞ一切使わん使わせん!
Xcodeもビルドする時とか必要最低限しか使わん!
コーディングは全てコンソール上のviで書く!分かったかボンクラども!!

どや?講義して欲しいか?ん?ん?

intに文字列突っ込んだらコンパイル通らんのでは

>>60
JSで我慢して

デリゲートってのはつまり画面から入力された情報をある関数が読み込んでその読み込んだ値に応じた処理をswitch-case文みたいな分岐で別関数に任せるって理解で良いんか?

けんすけの名前 = けんすけ;
まちこの名前 = まちこ;

けんすけの年齢 = 36;
まちこの年齢 = 25;
けんすけの満腹度 = 0;
まちこの満腹度 = 0;

print けんすけの名前;
print まちこの年齢;

for(40回) {
けんすけの満腹度プラス3;
}

if(けんすけの満腹度 > 100) {
けんすけがうんこをする;
}

全部publicなのかよww

デリゲートの世界一簡単な説明
関数ポインタを内部的にオブジェクト化したもの

>>65
全然違う

if(today == XMAS) {
  while(Kensuke.chinko.status == BINBIN) {
    Kensuke.chinko.insert(Machiko.manko, WITH_GOM);
  }
}

@interface Pseudohuman : NSObject
{
NSString *name;
int age;
int hunger;
}

- (id)initWithName:(NSString *)n Age:(int)age;
- (void)sayName;
- (void)sayAge;
- (void)evacuate;
@end

@implementation Pseudohuman
- (id)initWithName:(NSString *)n Age:(int)a {
name = n;
age = a;
hunger = 0;
}
- (void)sayName {
NSLog(@"わたしの名前は%@です", name);
}
- (void)sayAge {
NSLog(@"私は%d歳です", age);
}
- (void)evacuate {
if (hunger > 100) NSLog(@"うんこしました");
}
@end

因みにこのアホは委任とか言ってるが委譲な

間違えました

- (id)initWithName:(NSString *)n Age:(int)a {
self = [super init];
if (self != nil) {
name = n;
age = a;
hunger = 0;
}
return self;
}

fileMakerかc#でいけや

>>70
whileの中try~catchしといた方がいい

int main(void) {
Pseudohuman kensuke = [[Pseudohuman alloc] initWithName:@"けんすけ" Age:36];
Pseudohuman machiko = [[Pseudohuman alloc] initWithName:@"まちこ" Age:25];

[kensuke sayName];
[machiko sayAge];

for (int i = 0; i<40; i++) {
[kensuke eat];
}

[kensuke evacuate];

return 0;
}


Objective-Cでの実装例てす。
eatメソッドは書く忘れました。

オブジェクト指向って簡単でしょ?

>>75
NakaoreExceptionやGomYaburetaExceptionをキャッチするんですねわかります

3分間の休憩を挟みます

次の講義は「質疑応答」です

何一つわかんねえよ

Objective-Cの記法気持ち悪いです先生

>>81
やってるうちに癖になってObjC大好きになります

では講義を始めます

質問のある方はどうぞ

ないようなので本日の講義を終わります

[lesson finish];

イテレータと関数言語?のメリットを教えて

オブジェクト指向が終わる片鱗がみえて来てると聞きますが
関数型言語とコンポーネント指向、どちらへ向かうのでしょうか

20言語近く使えてSWもHWもやる俺ですら
>>1の説明でわけわからん所があるww
とりあえず説明が下手すぎるだろwwwwwww

適当なこといってすみませんでした

ここが私のデリゲートゾーン

スマホを持ってる奴はロックジョイというアプリをインストールしてみないか?

今なら登録の際、紹介コードに【モナーク】と入れるだけで1000ポイントゲットできる

ポイントはアマゾンギフト券1000円分やiTunesポイントに交換できる

期間限定だから今がチャンス。

iPhone→ https://itunes.apple.com/jp/app/rokkujoi-o-denapurezentokyanpenga/i...
Android→ https://play.google.com/store/apps/details?id=com.buzzvil.lockjoy

このSSまとめへのコメント

このSSまとめにはまだコメントがありません

名前:
コメント:


未完結のSSにコメントをする時は、まだSSの更新がある可能性を考慮してコメントしてください

ScrollBottom