- 1 名前:デフォルトの名無しさん mailto:sage [2011/08/21(日) 10:47:48.04 ]
- Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
(Wikipedia:ja.wikipedia.org/wiki/Objective-C より) Objective-C [ObjC part:5]; hibari.2ch.net/test/read.cgi/tech/1279730299/ Objective-C [ObjC part:4]; pc12.2ch.net/test/read.cgi/tech/1239721860/ Objective-C [ObjC part:3]; ttp://pc12.2ch.net/test/read.cgi/tech/1186543111/ Objective-C ttp://pc11.2ch.net/test/read.cgi/tech/1106983092/ Objective-C ttp://pc5.2ch.net/tech/kako/990/990574267.html
- 481 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 09:00:23.18 ]
- >>479
Cocoaスレでも、同じこと聞いてたひとかえ? こっち行ってみな。 [SDK]iPhoneアプリ開発初心者質問箱20[touch][iPad] anago.2ch.net/test/read.cgi/mac/1321865528/
- 482 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 12:50:28.01 ]
- >>480,481
レスありがとうございます。 移動してみます。
- 483 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 05:38:28.22 ]
- この言語仕様が汚いから変えて欲しいな
シンプルにたのむぜ
- 484 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 06:13:35.78 ]
- 字面は汚いと思う
- 485 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 14:01:56.09 ]
- 了解で〜す
- 486 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 22:57:19.00 ]
- >>483
むしろ、純粋にCをOOP化してる言語な気がするけどなぁ
- 487 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:25:49.20 ]
- C++と比較すればなんて綺麗な言語仕様でしょう
- 488 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:26:57.01 ]
- うむ
- 489 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:31:36.94 ]
- 第1034019283次OOP宗教戦争勃発か…
- 490 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:48:55.47 ]
- いい加減、SmalltalkにCをインラインに書く仕様がした方といいと思うけどな。
XCode4.0以降、実装は実質そうなっているぽいが?
- 491 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:52:24.24 ]
- たとえば、今のObjCのどんなとこがいやなの?
- 492 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 01:06:08.31 ]
- (ほとんどの言語がそうだけど)複数の返値を認めてほしいなあとか、思った。
- 493 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 01:13:19.27 ]
- 面倒がらずに構造体
エラーとか、別の意味のものを複数ならポインタで十分では
- 494 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 01:18:18.31 ]
- メソッドに複数の戻り値を指定できると便利かもしれんけど、
もし仮にそういう仕様を実現する場合、戻り値の受け記述は =だけでは表現できなくなっちゃうね そう言う意味では、構造体を戻り値にした方が確かにしっくり来る
- 495 名前:493 mailto:sage [2012/01/06(金) 01:25:07.91 ]
- luaなんかはこんな感じで=だけで複数戻り値できるけどね
x, y = func(); function func() return 1, 2; end
- 496 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 01:27:11.79 ]
- >>495
なんということだ、その手があったか 便利すぎる。。 ところでluaって言語初めて聞いた。。
- 497 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 01:30:17.14 ]
- PHPみたいに、list($a,$b,$c)=func(); じゃ駄目?
aString, bString, cString = [self getTripleStringWithIntA:aInt, bInt:bInt cInt:cInt]; とか出来ると凄く記述が楽になるんだけど。
- 498 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 01:34:31.03 ]
- 複数戻り値をもつ言語って結構あるんだな
逆に、カンマ区切りで複数戻り値表記ができる場合の 弊害って何かあんのかね…。
- 499 名前:493 mailto:sage [2012/01/06(金) 01:40:03.49 ]
- >>497
そういう場合は大抵abcに関係があるだろうから、 構造体や辞書で表してもスッキリする気がする。 意味がバラバラなら、今度は順番を気にする必要が出てくる。 これは戻り値だけじゃなくて引数にも言えることだけど、 Objective-cはラベルが付いてるから。 だから、できることがそんなにメリットになるのかな。 できたらそれはそれで、使うだろうけど。
- 500 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 01:43:57.01 ]
- >>499
確かにObjective-Cのメソッドメッセージの表現は、 各引数の意味とメソッド名をかねられる、まれにみる秀逸表現なのに、 複数戻り値にすることによって、結局、 「あれ?2番目の戻り値ってなんだっけ?」 的なことになっちゃうな
- 501 名前:デフォルトの名無しさん [2012/01/06(金) 02:00:48.52 ]
- [self age];
- 502 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:14:04.07 ]
- 言語仕様はともかく字面は高度に汚いと思う。
- 503 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:15:06.27 ]
- >>502
どの辺が?
- 504 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:15:30.59 ]
- Scheme で多値は割と便利だけど、Obj-Cで語るのはC言語に多値が導入されてからにしてくれ。
- 505 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:16:04.40 ]
- >>504
たすかに Obj-CはCのスーパーセットだからね
- 506 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:19:55.25 ]
- Cでできる記述は、全てObjective-Cコード上でも使える
これが強みじゃない? Cがわかってる人には、逆に入りやすい言語だと思うのよObj-C
- 507 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:22:57.00 ]
- 唐突に何今更なことを
- 508 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:24:42.53 ]
- メソッドメッセージコールと関数コールが共存してるソース見るとObj-Cらしさを感じる
オブジェクトに対する操作とそれ以外の操作の表現が明確に違うのは、慣れるとわかりやすい
- 509 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:26:01.37 ]
- >>503
特に嫌いなのはインデントだな ずーっと右端の方で固まって、左側がすっかすかになるのがヤダ。
- 510 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 02:28:01.58 ]
- >>509
それ、Obj-Cに限った話か?
- 511 名前:506 mailto:sage [2012/01/06(金) 02:32:05.66 ]
- >>507
す、すまぬ。。
- 512 名前:デフォルトの名無しさん [2012/01/06(金) 02:57:08.15 ]
- obj-cの独特な表現を最初見た時は何じゃこれって思ったけど、
慣れてくると、むしろ癖になる不思議
- 513 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 07:46:28.70 ]
- Obj-CよりC#のがよっぽどいい
- 514 名前:512 mailto:sage [2012/01/06(金) 08:10:21.73 ]
- つまり、Java記法がよいと
- 515 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 08:43:39.15 ]
- 間をとってRuby最強!
- 516 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 10:59:45.74 ]
- >>513
DelphiやVisual Basic のような簡単さと C++の良いところ取りだからね。 これはいいと思うよ。
- 517 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 11:33:41.62 ]
- 俺もC#はけっこう好きだな。
お手軽感と強力さが両方ある。
- 518 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:19:46.54 ]
- C#は言語そのものよりライブラリが強力すぎる
あれならバカでもプログラミングできる
- 519 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:23:23.02 ]
- Cocoaの事か・・・
- 520 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:56:28.55 ]
- .NETの話を持ち出すとCocoaのほうが優れてる!と暴れる奴がいるので禁止
- 521 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 22:28:08.67 ]
- アニメーション機能はCocoaの勝ちだな。
- 522 名前:512 mailto:sage [2012/01/06(金) 22:38:21.13 ]
- Core Animationも魅力的だけど、Core Audioも使いこなしてみたい
- 523 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 23:36:39.85 ]
- CoreAudioは悪夢だわ
- 524 名前:512 mailto:sage [2012/01/06(金) 23:47:14.34 ]
- >>523
どゆこと??
- 525 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 01:42:21.02 ]
- >>512
Objective-Cの記法は、独特だけどいいよね クラスメソッドは先頭に+、インスタンスメソッドは先頭に-をつける というところも、staticだの何だのつけるよりわかりやすい // Class method + (void)classMethod:(id)arg { // operation code here ... } // Instance method - (id)method:(NSObject*)arg1 with:(int)args2 { // operation code here ... return obj; } 引数ありメソッドの記法には、慣れるまでは、わかりにくく思えるが、 慣れると、引数の意味がメソッドメッセージ名に含まれてるので、 驚くほどわかりやすい
- 526 名前:デフォルトの名無しさん [2012/01/07(土) 01:48:49.44 ]
- >>525
メソッド呼び出しとかだと Obj obj = [Obj alloc]; [obj initWithString:@"Hello"]; とかね。 正直、最初見たときは、ものすごい違和感を感じた Smalltalkやってる人にとってはそうでもないのかもしれないけど。
- 527 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 02:28:06.02 ]
- >>526
init系methodの返り値捨てたらダメだろ Objのroot classがNS系でない独自仕様ならばその限りではないけど
- 528 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 02:37:37.39 ]
- >>527
NS系なら、こんな感じで入れ子にするよね ※int型変数aの値を出力するとき NSString *str = [[String alloc] initWithFormat: @"a = %d, a"]; NSLog(str); それか、+stringWithFormat:使って NSLog([NSString stringWithFormat: @"a = %d, a"]); か?w
- 529 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 02:41:53.46 ]
- >>527
あれ? NSObjectのサブクラスのinit系methodは、 [obj initWithString: @"hoge"]; で、objが参照するオブジェクトを初期化してくれないんだっけ?
- 530 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 03:29:16.27 ]
- してくれる。527は勘違いしてる
- 531 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 03:52:52.55 ]
- obj = [obj initWithString: @"hoge"];
- 532 名前:531 mailto:sage [2012/01/07(土) 03:56:36.90 ]
- >>531と書いてみたけど、やっぱダメだな。
- 533 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 07:18:54.88 ]
- initが失敗してnilを返したときにどうしようも無くなるな。
- 534 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 09:32:48.32 ]
- 謹製のクラスクラスタがallocで返すのはファクトリオブジェクトなので使えません。
id obj = [NSString alloc]; // ファクトリオブジェクト NSLog(@"%@(%p)", NSStringFromClass([obj class]), obj); obj = [obj initWithString:@"Hello"]; // 文字列を持てる通常のインスタンス NSLog(@"%@(%p)", NSStringFromClass([obj class]), obj);
- 535 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 10:03:34.80 ]
- で?
- 536 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 10:09:04.77 ]
- 説明が足りないな
allocで返されたファクトリオブジェクトは -initXXX 内で - (id)initXXX { id obj = [[Siblingclass alloc] initXXX.]; self = [super init];[self release]; // ファクトリオブジェクトがシングルトンなら不要 return obj; } のように自分の親類クラスを生成初期化して返します。 つまり、+allocが返すインスタンスと、-initXXXの返すインスタンスは別物です。
- 537 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 10:31:24.35 ]
- で?
- 538 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 10:54:56.19 ]
- え? ここまで書いても分からないの?
- 539 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 13:10:18.50 ]
- こんなのわかってない奴いんのかよって話
ドヤ顔で書くなよ
- 540 名前:デフォルトの名無しさん [2012/01/07(土) 13:12:26.99 ]
- >>536
そうなの?init(初期化)と言ってるくせにまた内部で+allocしてんの? んな馬鹿な。。 だったら何のために+allocメソッドがあるの? initXXXが-initXXXである必要は? ほんとにそうなら、+allocなんか要らなくて、それこそ、+initXXXで あってもいい気がするんだが
- 541 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 13:45:22.05 ]
- >539-540
何をどう返せばいいか分からないw
- 542 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 14:37:35.68 ]
- allocationとinitializationの違いがわからない人がいるらしい
- 543 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 15:34:21.04 ]
- 馬鹿を馬鹿と見抜けない人には(Objective-Cを使うのは)難しい
- 544 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 16:19:15.37 ]
- UILabelにカスタムプロパティを追加する方法はUILabelのサブクラスを作るしかないのでしょうか?
- 545 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 16:24:52.92 ]
- 何を返せばいいかわかんないから個別に答えるか
>>539 >524からの流れを読もうね? >529,530のような人がいるから書いてるんだよ >>540 その疑問は確かにそうなのだが、 外部の使う人から見た時どう見えるかとか、 コーディングのバランスの問題とか、 クラスクラスタのルートクラスにファクトリ書くのはどうなの?とか、 The Objective-C Programming Languageでallocとinitはセットで使うように規定されてるとか、 等々の大人の事情だと思ってください
- 546 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 16:25:12.38 ]
- >>544
>>481
- 547 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 16:31:19.95 ]
- >>544
@interface UILabel(Hoge) @property (copy) NSString *extendedText; @end @implementation UILabel(Hoge) @synthesize extendedText; @end で出来なかったっけ?
- 548 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 16:39:13.26 ]
- >>547
ありがとうございます。 試してみます。 次は初心者板に移動します。
- 549 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 16:57:42.58 ]
- >>547が使ってんのは「カテゴリ」だからそれ調べろ
- 550 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 17:56:11.97 ]
- >>536のように、まるでうそがほんとうのことのように書いてある
恐ろしいスレだ
- 551 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 18:09:21.38 ]
- >>550
クラスクラスタの話だよ 分かってる?
- 552 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 18:19:07.19 ]
- この話の発端は>>526, >>527, >>529だと思うけど、その内容と
>>536は、同じ話を対象にしてるのだろうか。。
- 553 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 18:23:48.04 ]
- どうあっても俺は間違ってないって言いたいのなら、もうそれでいいよ
- 554 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 18:32:49.06 ]
- >>533,534等、実装次第で不都合が出てくるから分けるなって言いたいだけだろ。
id array = [NSArray alloc]; [array init]; [array count]; こんなことやっても動かんぞ。
- 555 名前:デフォルトの名無しさん [2012/01/08(日) 12:37:48.31 ]
- >>491
カスケードが使えない
- 556 名前:デフォルトの名無しさん [2012/01/08(日) 12:45:01.55 ]
- >>518
そのうちclangあたりが.netバックエンドに対応すんじゃね。 .netのスクリプティングランタイムなら Objective-Cとも相性いいだろうし
- 557 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 12:01:15.44 ]
- >>554
これ、実装的にまるっきり別物になってないか? id array = [[NSArray alloc] init]; はinitの戻り値をarrayで受けてるんだから、 id obj = [NSArray alloc]; NSLog(@"%@(%p)", NSStringFromClass([obj class]), obj); id array = [obj init]; NSLog(@"%@(%p)", NSStringFromClass([array class]), array); NSLog(@"%ld: ", [array count]); で、普通に動くだろ。
- 558 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 12:56:24.51 ]
- >>557
どうも>>554によると、 [obj init]; 単独と、戻り値を受けずにobjを使うことはできないんだと。。
- 559 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 13:05:18.26 ]
- >>557
>>526,527からの流れを見ろよ initの戻り値を捨てるなって話なんだからさ んなことは解ってるし、誰に向けて書いたレスかちょっとは考えてくれよ >>558 お前も曲解すんな >>544にそんなこと書いてないだろ
- 560 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 13:06:28.31 ]
- >>559
>>544には書いてネェよw>>554なw
- 561 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 13:28:02.69 ]
- >>554の
>こんなことやっても動かんぞ。 だけじゃ、戻り値受けなしでは使えないと言ってるのと同義だろう。。
- 562 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 13:43:24.56 ]
- >>561
>>533,534にも言及してるし、全然同義じゃないだろ。 流れも読めって。
- 563 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 15:29:31.69 ]
- >>562
いや、そう読ませたいなら>>434で完璧に終わってるだろ、 allocの戻り値とそれを因数にしたinitの戻り値は違うとこれ以上無い書き方がしてあって >>554書いていることは混乱が増すだけ。
- 564 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 15:30:15.81 ]
- すまん、
>>434 は >>534の間違い。
- 565 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 15:59:04.35 ]
- >>563
終わってるなら、それ以降の流れにはならないんじゃね? それ以降も続くなら別の手法で理解の助けとするでしょ。 >>534ではエラーにはならないからな。 initの戻り値を捨てた結果どうなるかっていう、実際のテストケースで もし混乱するなら、どっちにしろ>>534が理解できてない。
- 566 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 17:03:03.78 ]
- >>565
>実装次第で不都合が出てくるから分けるなって言いたいだけだろ。 って書いたんだろ? わけても全然問題なくね?っていわれてファビよるなよ
- 567 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 17:09:49.91 ]
- 因数
- 568 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 17:12:36.40 ]
- >>566
問題があるのに、 問題無いのがあるからOKっていうのはダメだろ。 ファビョッてるとか無駄に煽るなよ。
- 569 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 17:26:45.63 ]
- (´・ω・`)
- 570 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 17:29:57.75 ]
- (;_;)
- 571 名前:デフォルトの名無しさん [2012/01/10(火) 15:36:37.86 ]
- この3つの違いがよくわかりません。
というか、アクセサメソッドをどうして設定する必要があるかよくわからないです。。。 よかったら教えてください @interface BackView : UIView { //NSString *strHTML; } @property (strong, nonatomic) NSString *strHTML; --------------------------------------------------------- @interface BackWebView : UIView { NSString *strHTML; } //@property (strong, nonatomic) NSString *strHTML; --------------------------------------------------------- @interface BackWebView : UIView { NSString *strHTML; } @property (strong, nonatomic) NSString *strHTML;
- 572 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 17:56:13.27 ]
- 番号振っとけよ
上と下は@synthesizeで変数名変えなきゃ等価 中は変数は確保するけどアクセッサは作らない。
- 573 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 18:51:08.97 ]
- 変数の宣言についておしえてほしいんですが、
例えば、このスレにあった MSPanty *panty = うんぬん; と MSPanty* panty = うんうん; とではなにが 違うんでしょう? アスタリスクは変数名にくっつけて書くものと思っていたのがobjective-cでは離れているコードをたまに見かけます 単に方言のようなものでコンパイル時には同じあつかいなのでしょうか?
- 574 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 19:16:09.07 ]
- 同じ
- 575 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 19:25:57.37 ]
- >>574
ありがとうございます すっきりしました
- 576 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 20:14:36.02 ]
- C従来のポインタ表現なら、上だよね。。
だから、おれはキャストのときも(MSPanty *)の様にして書く
- 577 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 20:48:47.93 ]
- 俺もそう書くけど、型なんだからくっつける言われたことあるな
- 578 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 20:59:58.46 ]
- いい加減ポインタなんてものは捨てるべきだと思う
- 579 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 21:12:21.39 ]
- だって参照より早いんだもん
- 580 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 21:14:39.88 ]
- 型 T に対して、
T*p; T *p; T* p; T * p; のどれも同じ意味。(スペースは無視される。) C 言語では伝統的に T *p; だけど、C++ では T* p; と書く人が多いね。 自分は T *p; と書く。理由は、T* p, q; だと q も(ポインタじゃないのに)ポインタに見えるから。
- 581 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 21:17:06.26 ]
- うむ、やっぱ T *p;だよ
Objective-CはCのスーパーセットなんだからCの書き方に準拠したいし
|

|