1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事は 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変数を確保/解放しています。

実行例

ターミナルにてコマンドでコンパイルし、実行しました。
 
gcc.png

コードと文法の解説

冒頭の解説

  • #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登場以降でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?