他サイト更新RSSぴぽぺ速報最新記事

2ちゃん式iOSプログラミング講座第9回「デリゲート」

このエントリーをはてなブックマークに追加 LINEで送る

1: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:33:01 ID:ihjtTlZX0

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

2: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:33:44 ID:5dGPrSGi0

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


3: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:34:25 ID:ihjtTlZX0

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

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


72: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:27:01 ID:+35Z/2BP0

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

※委譲の方が多い気がするけど「委任」も「委譲」も両方使われる言葉です。


5: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:35:01 ID:YsP7OxX00

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


4: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:34:30 ID:r1YlGXW30

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


7: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:36:17 ID:ihjtTlZX0

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

自分でやればいいじゃん

と思うかもしれません。

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


8: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:36:28 ID:SjFHUN1CP

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


11: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:38:23 ID:ihjtTlZX0

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

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

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


10: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:37:50 ID:XnpBRX4K0

第一回からやれや


12: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:38:59 ID:r1YlGXW30

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


16: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:41:31 ID:ibO0S4VE0

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


15: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:40:46 ID:ihjtTlZX0

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

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

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


21: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:42:34 ID:IeyNGX100

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


18: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:42:21 ID:gaLydi5lP

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


19: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:42:31 ID:ihjtTlZX0

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

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

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


20: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:42:34 ID:r1YlGXW30

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


23: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:44:27 ID:YsP7OxX00

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


25: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:46:41 ID:gUWSulwPP

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


24: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:45:50 ID:ihjtTlZX0

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

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

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

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

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

お前「わたしです」

こんな感じです。


26: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:48:33 ID:ihjtTlZX0

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

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

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


28: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:49:39 ID:ihjtTlZX0

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

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


31: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:50:39 ID:r1YlGXW30

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


32: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:50:42 ID:p/8Bbfk60

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


33: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:51:34 ID:ThCdGpyZ0

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

1~8のログないの?


34: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:53:30 ID:ihjtTlZX0

では始めます。

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

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


35: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:53:59 ID:DKvXm2sH0

な、なんだったんだ


37: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:54:36 ID:SjFHUN1CP

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

とりあえず様子見るか


38: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:54:41 ID:r1YlGXW30

神スレage


39: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:54:52 ID:nxg9tO5Q0

なんだこのスレw


42: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 00:57:10 ID:ihjtTlZX0

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

object
1. 物体 個体

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

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

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

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

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


43: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:00:16 ID:ihjtTlZX0

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

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

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


44: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:03:45 ID:ihjtTlZX0

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

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


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

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


45: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:04:17 ID:ihjtTlZX0

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


47: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:05:22 ID:OWofM1bD0

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


49: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:06:51 ID:ThCdGpyZ0

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


48: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:05:49 ID:ihjtTlZX0

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


55: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:11:59 ID:ihjtTlZX0

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

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

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

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

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


59: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:15:39 ID:Cz4Zw+MZ0

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


61: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:16:30 ID:ihjtTlZX0

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

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


58: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:15:32 ID:ihjtTlZX0

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

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

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

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

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

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

pseudohuman1のうんこをする関数;


63: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:18:45 ID:oMOtb+Dj0

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


66: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:19:47 ID:ihjtTlZX0

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

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

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

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

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


68: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:23:19 ID:qMJElnAuP

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


71: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:26:39 ID:ihjtTlZX0

@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(@"私は312歳です", age);
}
- (void)evacuate {
if (hunger > 100) NSLog(@"うんこしました");
}
@end


73: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:28:15 ID:ihjtTlZX0

間違えました

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


76: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:31:37 ID:ihjtTlZX0

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メソッドは書く忘れました。


77: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:33:03 ID:ihjtTlZX0

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


80: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:36:11 ID:gzuzn7rm0

何一つわかんねえよ


87: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:44:41 ID:5Xx0OoQp0

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


79: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:35:43 ID:ihjtTlZX0

3分間の休憩を挟みます

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


81: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:36:46 ID:gaLydi5lP

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


82: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:38:12 ID:ihjtTlZX0

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


83: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:38:46 ID:ihjtTlZX0

では講義を始めます

質問のある方はどうぞ


84: 以下、名無しにかわりましてVIPがお送りします 2013/12/25 01:41:37 ID:ihjtTlZX0

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

[lesson finish];


元スレ:http://hayabusa.2ch.net/test/read.cgi/news4vip/1387899181/
sosu



このエントリーをはてなブックマークに追加 LINEで送る
↑この記事をみんなに広めよう↑

↓ランキングクリックよろしくお願いします↓
 にほんブログ村 2ちゃんねるブログ 2ちゃんねる(ニュース)へ にほんブログ村 2ちゃんねるブログ 2ちゃんねる(ゲーム)へ

コメントをどうぞ

メールアドレス
コメント本文

  • あなたのコメントが、更にこの記事をおもしろくします。

プロフィール

PipopeFavicon

ぴぽぺ速報です。

下らないニュース、
おもしろい事件、
ゲームなど色々扱っております。
1日約70記事です。

Twitter
RSS

↓ランキングクリックよろしくお願いします↓
 にほんブログ村 2ちゃんねるブログ 2ちゃんねる(ニュース)へ にほんブログ村 2ちゃんねるブログ 2ちゃんねる(ゲーム)へ

新着情報

逆アクセスランキング

アクセスカウンター

  • 14現在の記事:
  • 1535707総閲覧数:
  • 166今日の閲覧数:
  • 509昨日の閲覧数:
  • 552183総訪問者数:
  • 94今日の訪問者数:
  • 156昨日の訪問者数:
  • 193一日あたりの訪問者数:
  • 2現在オンライン中の人数:

genzou1919 world