[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 08/18 21:51 / Filesize : 212 KB / Number-of Response : 871
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Objective-C [ObjC part:3];



1 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 12:18:31 ]
Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
 (Wikipedia:ja.wikipedia.org/wiki/Objective-C より)

前スレ
pc11.2ch.net/test/read.cgi/tech/1106983092/
前々スレ
pc5.2ch.net/tech/kako/990/990574267.html

477 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:55:39 ]
今帰宅
萩原本届いてた
ちょっと読んでみた



(´;ω;`) ・・・。


やっぱりCの入門書から読みます
>>467>>468
ありがとう
心折れかけたけど地道に頑張ります

478 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:13:32 ]
>>477
まあプログラミングにも王道は無しだよ。あなたの今のように謙虚な気持ちを忘れなければきっとできるようになります。

あと、C のポインタのあたり、文字列操作の細かい話は
あまり勉強しなくても大丈夫なので読み飛ばしてください。

479 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:23:20 ]
おいおい、ポインタはいるだろ。
Cocoaだって最近のAPIはNSError **が大量にあるだろ。

480 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:26:42 ]
ポインタってみんなどういうところでつまづくの?
「変数を入れてるメモリエリアのアドレスを渡す。」
それ以上になにか必要か?

481 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:32:40 ]
478 ですが、全然いらないというつもりはないんだけど。
>>480
さんの言ったことを言いたかったです。言葉が足りませんでした。

& と * はわかっておいたほうがいいけど、Objective-C ではそれで充分だよね。
malloc / free は要らないし、ポインタ演算 (足し算引き算) は要らないでしょ。
あと、配列は知らなくてもいいし、配列とポインタの等価性も要らないし、
文字列が char* 配列だということも知らなくてなんとかなるのでは。

482 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:56:38 ]
>>476
>ソースコードの見た目の問題はあるけど、Visitor Patternが実装できない理由にはならないよね?
それで多重継承や多重ディスパッチを出来ると強弁するならご勝手にw

483 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:01:28 ]
>>480
>配列とポインタの等価性
エキスパートC読んでこれが嘘だと理解した。こういうところに躓きの原因がある。>>481はわかっていない。

484 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:13:51 ]
>>482
Obj-C は reflection があるから多重ディスパッチはむしろ実装しやすい気が ...
visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。
とわからない言葉をならべてみる

485 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:15:10 ]
>エキスパートC読んでこれが嘘だと理解した。こういうところに躓きの原因がある。
いやまあ、Objective C スレとしては、そのへんでひっかかろうがひっかかるまいが
Objective C では必要ないよというので充分なのでは。




486 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:19:14 ]
こういうスレで嘘は良くないのではないかい?

487 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:34:22 ]
世の中には平気で嘘をつける人がいる。
嘘を指摘されるとそういうものは必要ないと言いだす。
そういう無反省な態度は無自覚に行われるから本人は嘘を良くないとは考えていない。

488 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:41:12 ]
>>484
>visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。
ほんと馬鹿。逝ってよし。

489 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:09:23 ]
481 ですが、嘘を付いてすいませんでした。
折角なので配列とポインタがどんなふうに違うかわかりやすく教えてください ...

490 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:18:07 ]
www.cocoadev.com/index.pl?VisitorPattern
でも同じような議論になってる

491 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:48:48 ]
>>364でも同じような議論になってる
嘘つきはお断り

492 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:52:06 ]
>>489
C FAQ

493 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 03:46:16 ]
>>489
ぐぐれカス

494 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 05:46:43 ]
>>483
たしかにそうだ
なんとなく分かってるつもりでも
間違って覚えてるケースが結構ある
正しい理解が必要


495 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 06:28:26 ]
嘘つき語録
>>474
Visitor Patternって、メソッドのオーバーロードができないと、実装できないんだっけ?

オーバーロードって、引数の型によって「静的に」同じ名前のメソッドを区別するためのものなんだから、プログラムの構造に影響しないように思えるけど。
単純に複数の名前のメソッドを使い分けるだけでは?
>>476
ようするに
void action(A obj)
void action(B obj)
と定義されていたものが、
void actionWithA(id obj)
void actionWithB(id obj)
となるだけだから、ソースコードの見た目の問題はあるけど、Visitor Patternが実装できない理由にはならないよね?
>>478
@C のポインタのあたり、A文字列操作の細かい話はあまり勉強しなくても大丈夫なので読み飛ばしてください。
>>481
Bmalloc / free は要らないし、Cポインタ演算 (足し算引き算) は要らないでしょ。
あと、D配列は知らなくてもいいし、E配列とポインタの等価性も要らないし、
F文字列が char* 配列だということも知らなくてなんとかなるのでは。
>>484
Obj-C は reflection があるから多重ディスパッチはむしろ実装しやすい気が ...
visitor pattern はvirtual member 止まりの静的型付け言語用の気がします。
とわからない言葉をならべてみる



496 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 07:42:09 ]
他はしらんが、C における文字列操作の細かい話は勉強しなくてもいいのは本当では?strstr とか知っててもしかたないよね。NSString でいいんじゃね?

497 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:19:11 ]
いろいろな言語の文字列操作関数の比較表

Ruby, Python, JavaScript, Perl, C++
0xcc.net/blog/archives/000137.html

Ruby, PHP, Objective-C
d.hatena.ne.jp/hetima/20061025/1161773698

意外とObjective-Cも健闘してる希ガス。
実際にOpen環境(イワユル野良SDK)でのプログラミングが公開されているので以下に紹介する。
テキストエディタの作成のところでもNSStringを使ってる。

第1回:iPod touchにアプリケーションがインストールできる不思議
www.thinkit.co.jp/free/article/0711/9/1/

第2回:iPod touchの自作アプリケーションが作れる&動かせる!
www.thinkit.co.jp/free/article/0711/9/2/

第3回:iPod touchで動作するテキストエディタはこう作る!
www.thinkit.co.jp/free/article/0711/9/3/

第4回:夢のオフラインRSSリーダを作ろう!
www.thinkit.co.jp/free/article/0711/9/4/

498 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:27:53 ]
実際のHello Worldプログラムを紹介する。(その1)

// hello.m
#import <UIKit/UIKit.h>

#import "HelloApplication.h"

int main(int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
return UIApplicationMain(argc, argv, [HelloApplication class]);
}


499 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:28:40 ]
>>497
>実際にOpen環境(イワユル野良SDK)でのプログラミングが公開されているので以下に紹介する。
>テキストエディタの作成のところでもNSStringを使ってる。
べつに NSString の使い方を示すのなら
「実際に」iPhone じゃなくて「実際に」Mac / GnuStep でいいのでは...

500 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:28:56 ]
(その2)
// HelloApplication.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <UIKit/UIApplication.h>
#import <UIKit/UIPushButton.h>
#import <UIKit/UITableCell.h>
#import <UIKit/UIImageAndTextTableCell.h>

@interface HelloApplication : UIApplication
{
UIImageAndTextTableCell *pbCell;
UITableCell *buttonCell;
}

@end

501 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:31:14 ]
(その3)
// HelloApplication.m
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <UIKit/CDStructures.h>
#import <UIKit/UIPushButton.h>
#import <UIKit/UIThreePartButton.h>
#import <UIKit/UINavigationBar.h>
#import <UIKit/UIWindow.h>
#import <UIKit/UIView-Hierarchy.h>
#import <UIKit/UIHardware.h>
#import <UIKit/UITable.h>
#import <UIKit/UITableCell.h>
#import <UIKit/UITableColumn.h>
#import "HelloApplication.h"

@implementation HelloApplication

- (int) numberOfRowsInTable: (UITable *)table
{
return 2;
}

- (UITableCell *) table: (UITable *)table cellForRow: (int)row column: (int)col
{
return row ? buttonCell : pbCell;
}


502 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:33:15 ]
(その4)
- (UITableCell *) table: (UITable *)table cellForRow: (int)row column: (int)col
reusing: (BOOL) reusing
{
return pbCell;
}

- (void) applicationDidFinishLaunching: (id) unused
{
UIWindow *window;
BOOL i = TRUE;
window = [[UIWindow alloc] initWithContentRect: [UIHardware
fullScreenApplicationContentRect]];

pbCell = [[UIImageAndTextTableCell alloc] init];
[pbCell setTitle: [NSString stringWithFormat:@"Hello World!"]];

UIPushButton *button = [[UIThreePartButton alloc] initWithTitle:
@"Touch Me"];
buttonCell = [[UITableCell alloc] init];
[buttonCell addSubview: button];
[button sizeToFit];

UITable *table = [[UITable alloc] initWithFrame: CGRectMake(0.0f, 48.0f, 320.0f, 480.0f - 16.0f - 32.0f)];
UITableColumn *col = [[UITableColumn alloc] initWithTitle: @"HelloApp" identifier: @"hello" width: 320.0f];


503 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:33:47 ]
(その5)
[window orderFront: self];
[window makeKey: self];
[window _setHidden: NO];

[table addTableColumn: col];
[table setDataSource: self];
[table setDelegate: self];
[table reloadData];

UINavigationBar *nav = [[UINavigationBar alloc] initWithFrame: CGRectMake(
0.0f, 0.0f, 320.0f, 48.0f)];
[nav showButtonsWithLeftTitle: @"Foo" rightTitle: @"Bar" leftBack: YES];
[nav setBarStyle: 0];

struct CGRect rect = [UIHardware fullScreenApplicationContentRect];
rect.origin.x = rect.origin.y = 0.0f;
UIView *mainView;
mainView = [[UIView alloc] initWithFrame: rect];
[mainView addSubview: nav];
[mainView addSubview: table];

[window setContentView: mainView];
}

@end

504 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 10:10:59 ]
勘違いさんいらっしゃーい >>499
はいさようなら。

505 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:04:42 ]
POCはMacじゃ使えないんですか?



506 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:23:12 ]
めずらしく伸びてると思ったらもう夏休みなんだな…
小中学生ばっかりか

507 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:25:50 ]
Objective-Cは、文字列を`char *'型にするか、NSStringオブジェクトにするか選択できるハイブリッド型であるということが特徴です。
これがObjective-CのほうがSmalltalkより高速な理由です。

別な観点から言えば、 Objective-Cプログラムのすべての要素がオブジェクトで表現されていたとしたら、おそらくSmalltalkと同程度の速度であり、
Smalltalkが行なえる基本クラスへの最適化がないことで苦戦するでしょう。

つまり、文字列操作の細かい話は勉強しなくてもいいと言っている人はObjective-Cのメリットを全く理解していないんです。

508 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:27:01 ]
>>506
ボクが小学生だからってバカにするオマエがバカ!

509 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:33:53 ]
>>505
PoweMacのみ。IntelMacでは動かない。EtoileはIntelMacでも動くよ。

510 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:47:16 ]
>>507
ええと、一応聞いておくけど、本気でそう思っているのか ?
おまえは全ての encoding に対応した文字列操作ルーチンを自分で書いて最適化できるのか ?

511 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:02:20 ]
>おまえは全ての encoding に対応した文字列操作ルーチンを自分で書いて最適化できるのか ?
逆に質問しよう。なぜ、最適化という問題を持ち出したかと言えばオブジェクトのオーバーヘッドを理解しているからじゃないのか?
自分で最適化しないでも、問題を理解していれば、そういった処理を注意深く扱うようになる。それで速度的な問題を回避できるようになる。

512 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:12:05 ]
近頃の人ってsprintfとか使わんの?

513 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:48:32 ]
「文字列操作ルーチンを自分で書いて最適化できるのか ? 」って極端すぎるだろw
よっぽど悔しかったのかw

514 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 14:11:34 ]
>>512
sprintfなんて使ってるやつはばかです

515 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 14:25:30 ]
>>514
理路整然とした理由も述べないで否定するだけなら小学生でもできる。
まさか小学生じゃないよな?
sprintfとNSStringでの文字列操作の用例を挙げて比較したうえで
なぜsprintfを使うのがばかなのか述べてくれないかなぁ。
これは非常に興味深いテーマだ、>>514、君の意見が聞きたい。



516 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 14:37:03 ]
sprintfのmanくらい読んでから質問してください

517 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 14:48:23 ]
snprintfだろう常考

518 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 15:20:33 ]
クズばっかだな

519 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 15:33:50 ]
snprintf!! 
wwww
現場を知らない廚はコレだから困る。


520 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 15:37:21 ]
>>514の言い分けマダー?(゜∀゜)

521 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 16:30:50 ]
わけけ?

522 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 16:52:33 ]
>507
一行目は同感だけど、最終行は同意できない。

いまさら自力で文字列”操作”をする人はいないでしょ。
使うとしたら簡易パーサぐらいだろうけど、
それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。

それともこの程度のことも”操作”に入る?

NSLogは改行されるし、妙な出力が追加されるんで、fprintfを使うことは多いよね。

>>516
+[NSString stringWithFormat:format, ...] がsprintf相当だね。

523 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 17:07:54 ]
>一行目は同感だけど、最終行は同意できない。

結局、全く理解してないことを指摘されて図星だったのかw
まともな反論も出来ないチンカスw

524 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 17:39:14 ]
>いまさら自力で文字列”操作”をする人はいないでしょ。
>使うとしたら簡易パーサぐらいだろうけど、
>それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。

で、NSStringを使う利点まだぁ?チンチン
その程度でC言語の文字列操作の細かい話は勉強しなくてもいい理由だって主張してるの?

525 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 17:56:20 ]
佐藤藍子 「NSStringさえあればもうNSStringC言語の文字列操作の細かい話は勉強しなくてもいいと思ってました」



526 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 18:27:42 ]
ごめん。
人違いだわ、それ。
おれ、>522が初発言ね。

>NSStringを使う利点まだぁ?
楽だから。

べつにお勉強の為に文字列を操作するのは止めないけど、
お勉強以外であえて泥沼を選ぶ意図が俺には分からないね。

527 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 18:40:21 ]
>>526
>>514じゃないけど」ぐらいことわってから書くぐらいしろよ。
間違われても仕方ないだろ。
まぎらわしいぞw


528 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 19:02:20 ]
ごめん。
ID無いの忘れてたんだよ。

529 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:14:12 ]
外人さんがつくった Cocoa ソフトで日本語環境でつかうと
おかしくなるのがあって、ソースみて原因追及してみたら
内部でアルファベットだけと仮定して char* で操作してるところのせい
だったというのがあるので、char* のほうが速いかもしれませんが、
非日本人が使うかもしれないというのを考えて、
ShiftJIS / MacJapanese とかエンコーディングを仮定して
char* を操作するプログラムを書くのではなくて、
NSString (か他の国際化文字列ライブラリ)をつかって書くようにして
おいてくださると多分世界のどこかで誰かが助かります。

530 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:19:21 ]
文字を右から左に書く言語も考慮して作れということか?

531 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:31:05 ]
NSString (とかほかの国際化文字ライブラリ) をつかっておくと、
自分で考えなくても自動的にある程度は考慮されたことになるというのが利点。

Mail.app にイスラエル人の知り合いからメールがきて、
名前欄がちゃんとヘブライ語になってたので感心しました。
まあきっと外人さんには名前欄に漢字が出る時点でびっくりなんだろうけど。

海外製のフリーウェアシェアウェアでも Cocoa なら大抵は
日本語問題なくつかえるのは一貫して NSString つかってあるからで、
(というと言い過ぎだと思いますが、)
昔の Carbon のころはそうではなかったです。
メニューバーとかよく化けてたでしょ。

532 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:39:10 ]
>>529
君のまだ知らない世界にはユニコードっていうものがあってな

533 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:09:08 ]
>>532
個人が作るソフトにはUTF-8なcharとかwchar_tを使わずに
US-ASCIIかISO-8859-1前提でcharを使ってるのがままあるよ。
作者がUnicodeにする必要を感じてないから仕方ない。

Mac用のソフトだと素直にCocoaで作ればそんなことにはなりづらいけどね。

534 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:14:19 ]
アホにわざわざ説明してやらんでも

535 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:16:53 ]
>>522
>それでもその辺に落ちてる高級パーサとか正規表現ライブラリ使う方が手っ取り早い。

その辺に落ちてるのほとんどchar*になってるだろw
NSString使わない方が良いみたいに読めてしまうw



536 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:18:38 ]
UTF-8NとUTF-8はちと違うし、UTF-16にもUTF-16Nがあるんだよな。

537 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:27:05 ]
>>535
>それともこの程度のことも”操作”に入る?
も読んでね。
文字列を渡したり、もらったりも文字列操作に入れちゃうのか?

538 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 04:08:53 ]
>>537
てかさぁ、ライブラリでパターンマッチングやバックトラッキング用のクラスを用意してその上に高級パーサとか正規表現ライブラリを構築してる例なんてあるの?
なかったらどのみちchar*を使うんだから勉強せざるを得ないんじゃないのか?

539 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 05:30:58 ]
char *は使うよ。
でも、文字列は操作しないよ。

540 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 05:39:33 ]
正規表現ならOgreKitがある

541 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 08:36:55 ]
パーザをlex&yaccで作成するときにはまともなCの知識が必要だ。
上で言ってるObjective-Cの知識だけじゃどうにもならん場合はある。

542 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 09:02:36 ]
そこまでする人間がまともなCの知識を持ってないというのも考えにくいような。

ちょっと凝ったことをするにはCで直に、あるいはObjCのラッパを書くことになるし
Objective-Cだけで開発するには限界があるのは同意。

543 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:04:26 ]
ここで正規表現とか持ち出す奴っていったい何なの?
データベース使うJavaの人?BSDとかでスクリプト書いてる人?
文字列検索と文字列操作を美しく勘違いしてないかいw?

544 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:19:48 ]
C言語の正規表現を使うにはregex.hをimportしてregcomp, regexec, regfree関数を利用する。

int regcomp(regex_t *preg, const char *regex, int cflags)
  正規表現のコンパイルを行なう。コンパイル成功時には0を返す。

int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
  正規表現による検索を実行する。

void regfree(regex_t *preg)
  正規表現パターンバッファを解放する。

545 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:28:06 ]
>>544
通りすがりだが横から質問させて。
で?そのregcomp,regxec,regfree関数ってどういう時に使うの?
sprintfとかscanfとか上の方で出てたNSStringの文字列操作と置き換えられるものなのかな?
教えてエロい人!



546 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:31:02 ]
OgreKitとregex.h。OgreKit遅いやん。

547 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:35:06 ]
>>546
ネーネーregex、OregKitとかいうのとsprintfは同じ機能のものなの?
文字列操作の話で来ているのになんで「正規表現」て出てきてegex、OregKitなの?
ワカラナイ、ワカラナイ...
「お前が馬鹿だから」と言うの無しでちゃんと説明して!、初心者なので。

548 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:36:33 ]
>>545
適当にググッた。嫁。サンプルコードだけ読めば簡単に分かる。

regex.h

memo.majide.com/index.php?%A1%DAC%B8%C0%B8%EC%A1%DB%C0%B5%B5%AC%C9%BD%B8%BD
sometime.minidns.net/~ccgi/posix_regex.html

reglib.c ・・・ regcomp,regxec,regfree関数を使って、regsplit, regreplace, regrpall, regcnt関数を構築してる例

sometime.minidns.net/~ccgi/posix_reglib.html


549 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:41:36 ]
要するにプログラマは文字列操作をテーマとした意思の疎通も困難な程、コミュニケーション能力がないという事か。
sprintfに対してreglib使え?おいおい(w。
挙げ句は自分の言葉で説明できないからググッたコピペと来たよ。
これじゃプロジェクトが座礁してデスマーチにもなる罠。


550 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:42:11 ]
>サンプルコードだけ読めば
いや、走らしてみろ。即分かる。

551 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:43:09 ]
>>549
はいはい、ワロスワロスw

552 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:47:24 ]
prm1という変数があってユーザーが入力した値を入れ、メッセージに表示する為の文字列を作りたいと思います。
例:"prm1は不正な入力です。"

sprintfではなくreglibで処理を行なうにはどのようにしたら良いでしょうか。
具体的なコードをここに書いてくださると助かります。

553 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:57:59 ]
>>552のこうげき
「かいしんのいちげき!」

>>551の無能さが露呈した。

554 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:06:05 ]
hoge.strings
"hoge"="%sは不正な入力です。";

hoge.m
...
id hoge = NSLocalizedStringFromTable(@"hoge", @"hoge", @"hoge");
hoge = [NSString stringWithFormat:hoge, prm1];
fprintf(strerr, "%s¥n", [hoge UTF8String]);
...

てか、文字列操作の細かい部分をchar *でするかどうかの話でしょ?
なんで話変わってんの?

555 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:06:47 ]
>>549
>これじゃプロジェクトが座礁してデスマーチにもなる罠。

いやいや多分>>548はプログラマですらないからwww
iPhoneブームで注目度があがるの結構だけど、知ったかぶる廚も多くなるから嫌だね。



556 名前:522 mailto:sage [2008/07/20(日) 11:07:29 ]
>>554 は俺ね。
また勘違いされる所だ(w

557 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:08:37 ]
上でlex&yaccの話が出てたと思うけど、文字列操作は字句解析と構文解析のふたつで出来てることが多い。
lexは字句解析のことで、文字列を1文字づつ読み込んでトークン、つまり単語に切り分ける仕事をする。
yaccは構文解析のことで、得られたトークンの意味を推測して構文木を作成する。
で、得られた構文木を元にして文字列の意味を翻訳する。

正規表現は、 テキストの文字列に対してパターンマッチを行う強力な道具です。
TEXTファイル中からある単語を置換/検索するのもパターンマッチです。
例えばyaccを使わないで簡易にキーワード(文法上重要なトークン)を探したいときのパターンマッチを正規表現でやるとか出来ます。
regex、OregKitは正規表現プログラムなのでそういったことが簡単に出来ます。


int sprintf(char *str, const char *format, ... );

sprintfは書式formatにしたがって、printf関数と同様の変換を行った出力を、文字列strに格納します。使えるようになると凄く便利。
char *str : 変換した出力を格納する文字列。
const char *format : 書式指定文字列。


※ 要するに、正規表現は文字列のパターンマッチをするのに対して、sprintf関数は文字列を変換します。だから役割はちがう。

558 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:12:15 ]
煽らないと会話してもらえない可愛そうな香具師なのかな?

559 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:14:45 ]
あ、あと出来上がった構文木はバックトラッキング(深さ優先探索)を使って各ノードをトラバース(順次訪れる)します。

560 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:15:58 ]
夏休みに入った途端に変な子が来たね

561 名前:547 mailto:sage [2008/07/20(日) 11:17:06 ]
>>557
ありがとうございます!
regex,OregKitはsprintfとは使い道が違うものなのですね。
困ったさんのおかげであやうく誤った知識を覚えてしまうところでした。

562 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:21:49 ]
例えば、Ruby on RailsみたいなWebアプリでやってるようなことをObjective-Cとかで実現したいとしよう。
プログラムには、字句解析と構文解析をする部分を作成してHTMLやXMLの中から必要な情報を抜き取る必要がある。
そういうときに、パターンマッチで必要な情報を見つける。そして、sprintf関数とかを使って適切な形に仕上げて表示させるという風に使用する。

563 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:28:39 ]
XML なら素直に既存の XML parser 使うだろ、普通。

564 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:31:52 ]
>>563
じゃ、解説して!
もう疲れてきた。適切な例を考えるのめんどい。

565 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:35:32 ]
すまんが>>514が悪あがきしているようにしか見えない。>>564



566 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:37:47 ]
>>514じゃないからw
むしろ>>553だろ

おれはちゃんと>>557を書いて説明した。>>514と言われるのは心外だ。

567 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:47:41 ]
>>566
すまん。疑心暗鬼になってて。

568 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 12:00:36 ]
lex&yacc⇔flex&bison

569 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 12:27:02 ]
Obj-C 以外の話題で盛りあがるのはやめようよ ...
夏休みだから仕方がないのかな。

570 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 13:18:46 ]
>>569
>夏休みだから仕方がないのかな。
>>495にあるように、この流れは君の嘘が元凶だったんだから反省してくれ

571 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 14:40:24 ]
個人的にはOregKit意外にもCocoaOniguruma軽くて良い感じ。

572 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 00:32:36 ]
>>495 にあげられてるのが全部同じ人だってのはどうしてわかったの?
もしかしてスーパーハッカー?

573 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 12:24:43 ]
単に嘘ついてるのを並べ得たんじゃね
語録としてまとめるのは変だが

574 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 23:08:37 ]
char* としての文字列の操作をしらなくても簡単な Cocoa プログラムは書けるというのは嘘ではないのでは ...
Apple としては C で書くときでも char* じゃなくて CFString つかってくれということだよね。

575 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 05:24:39 ]
>Apple としては C で書くときでも char* じゃなくて CFString つかってくれということだよね。

はぁ?ばかじゃねぇの?



576 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 08:44:13 ]
>はぁ?ばかじゃねぇの?
煽り煽られたいだけじゃなくて、ほんとにそう思ってるなら、
BSD の API じゃなくて Apple 製の C API で、
char* を受け取るものがどういうのがあるか反省してみてください

577 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:28:05 ]
stringWithCString?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<212KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef