この記事は Hello World あたたたた Advent Calendar 2025 の記事です。
今回は Objective-C 言語で 「Hello World あたたたた」 を実装して解説していきます。
そもそも「Hello World あたたたた」が何かは 1日目の記事 をご覧ください。
コーディング例
paiza.io で実際に動かしてみることができます。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// 出力した文字をためていくバッファ
NSMutableString *hako = [NSMutableString string];
BOOL running = YES; // ループ継続フラグ
while (running) {
// 0 または 1 を生成
int x = arc4random_uniform(2);
// あ or た を選ぶ(
NSString *ch = (x == 0) ? @"あ" : @"た";
// 出力(改行無し)
printf("%s", [ch UTF8String]);
// hako に追加
[hako appendString: ch];
//末尾が "あたたたた" か判定
if ([hako hasSuffix: @"あたたたた"]) {
printf("\n%s", [@"お前はもう死んでいる\n" UTF8String]);
running = NO;
}
}
//[pool release];
}
return 0;
}
Paiza.io では、
@autoreleasepool { }がエラーとなったので、pool変数を確保/解放しています。
実行例
コードと文法の解説
冒頭の解説
-
#import <Foundation/Foundation.h>: Foundationライブラリを使用 -
int main( ) { 処理 }: C プログラムの 実行開始地点(エントリーポイント)。プログラムを実行すると、最初に必ず main() が呼ばれる
変数の宣言・代入
NSMutableString *hako = [NSMutableString string];
BOOL running = YES;
- Objective-C は静的型付けで、変数には必ず型が必要
-
NSMutableString: ミュータブル(更新可能な)文字列型 -
BOOL: boolean型
繰り返し
while (running) {
// 処理
}
条件式が 0 以外の間ループします。
条件判定
// 3項演算子
NSString *ch = (x == 0) ? @"あ" : @"た";
// 次のif文に同じ
NSString *ch;
if (x == 0) {
ch = @"あ";
} else {
ch = @"た";
}
-
==は比較 - else if は
else if(条件式2) { 処理 }
文字の出力
printf("%s", ch); // 文字列を出力
printf("\n"); // 改行
標準出力は printf を使います。
文字列の連結
[hako appendString: ch];
-
NSMutableString::appendStringを使う -
Swiftならhako += chと書く
文字列の末尾を判定
[hako hasSuffix: @"あたたたた"]
-
NSMutableString::hasSuffixを使う。含んでいれば真を返す - “あたたたた” を含んだ時点で終了
乱数生成
int x = arc4random_uniform(2); // 0 or 1
-
sarc4random_uniform(N)は N未満の整数をランダムに返す 関数
Objective-C の歴史と特徴
Objective-Cは、C言語をベースに、Smalltalk由来のオブジェクト指向機能を追加したプログラミング言語です。
歴史
- 誕生 (1983年): ブラッド・コックス氏とトム・ラブ氏によって開発されました。C言語の効率性とSmalltalkの柔軟性を融合させることを目的として設計。
- NeXT社の採用 (1988年): スティーブ・ジョブズ氏が設立したNeXT社がライセンスを取得し、同社のOS「NeXTSTEP」の開発言語として採用しました。
- Appleへの移行 (1996年): Apple社がNeXT社を買収したことで、Objective-CはmacOS(当時のMac OS X)の標準開発言語となりました。
- iOS開発の主役に (2008年): iPhone SDKの公開とともに、iOSアプリ開発の公式言語として広く普及しました。
- 現在: 2014年に後継となるSwiftが登場して以降、新規開発の主流はSwiftに移りましたが、依然として既存アプリの保守やレガシーなフレームワークの維持に不可欠な言語です。
主な特徴
- C言語の完全な上位互換: C言語のコードをそのままコンパイル・実行でき、既存のC資産をシームレスに利用可能です。
- 動的なメッセージングシステム: オブジェクト間の通信を「メッセージ送信」という形で行います。実行時に呼び出すメソッドを決定する「動的ディスパッチ(動的結合)」を採用しており、高い柔軟性を持ちます。
- カテゴリ (Categories): 既存のクラスを継承することなく、新しいメソッドを後付けで追加できる強力な仕組みです。
- プロトコル (Protocols): Javaなどの「インタフェース」に相当し、クラスが実装すべきメソッドを定義できます。
- 独特な構文: メッセージ送信を表す [object method:argument] という、角括弧を用いた独特な表記法が特徴です。
Objective-Cは、その歴史の長さから多くのiOS・macOSアプリ開発で今も活用されています。
個人的なコメント
自分が初めて iOS アプリを作成するときに使用した言語がObjective-Cでした。
初めは [object method:argument]の書式に慣れず苦労したことを覚えています。
Swift言語の登場後も、Swiftだけで完結することはできず、しばらくはObjective-Cが必要でした。Swift言語だけでアプリを書くようになったのは、Swift 4.0登場以降でした。
