Objective-Cの第一歩(仕切り直し)
公開日:
:
最終更新日:2014/06/12
iOSアプリを書く! C言語, Objective-C, Xcode
前回Objective-Cの第一歩として挙げたコードであるが、綺麗さっぱり忘れてほしい。というのは、NSLogは決してC言語のprintfのトランスクリプションではないから。ついでに言うと、JavaScriptのdocument.printInについても、全然別物だろう。まあ、書いたプログラムの結果をどこかの画面に表示するという意味で、最初の達成感を得られる第一歩ではあるのだが、そこは少し厳密になろう。なにせ折角記念碑的な第一歩目であるし。
というわけで、Objective-CでC言語のHello, World!にあたるプログラムを書いてみよう。前回と同じくコンソールベースのアプリケーションテンプレートを選んで、main.mのNSLog部分を消して以下のように書き込む。
printf("Hello, World!"); |
これそのまんまC言語だ!そう、Objective-CはC言語にオブジェクト指向部分を建て増した言語なので、C言語で書いて動いてしまう。だから”Hello, World!”はC言語と同じ。C言語からObjective-Cに入った人は第一歩目がいきなり空回りだ。
Objective-Cの第二歩(C言語修得者には空回りが続きます)
第二歩目。とりあえず関数を宣言して呼んでみよう。サンプルプログラムとして、1からコンソールに入力した数字までの和を求めるプログラムを書いてみる。
// main.m #import <Foundation/Foundation.h> int summary(int x){ int i,sum=0; for(i=x;i>=1;i--){ sum += i; } return sum; } int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... int x,sum; printf("数字を何か入力して下さい\n"); scanf("%d",&x); sum = summary(x); printf("1から%dまでの和は%dです",x,sum); } return 0; } |
これもC言語そのまま。念のためC言語経験の無いウェブプログラマ用の補足をすると、#importの行はプログラムの実行に必要なライブラリの読み込み。Cの教科書だと、stdio.hなどを#includeで読み込んでいるはず。今や懐かしのC++だとiostreamかな。
次にmainループの外に書いているのが、関数summary()の内容。合計値をint型で返す。引数としてはint型を一つだけ受ける。戻り値・引数とも型を明記。
変数宣言時にも、やはり型を宣言しなければならない。JavaScriptならvar、PHPなら$を付ければ、変数の型は推測してくれただろうけど、C言語/Objective-Cではダメ(実は、今回新登場したSwiftでは型推論がつくらしいけど。モダン!)。for文やらインクリメントやらはウェブ系の言語と同じなので説明を省略。
main部分には、メインの処理を書く。@autoreleasepoolというのは、デフォルトでついていた物なので説明は後回し。printfやscanfは出力・入力する値の型を指定する。たとえば”%d”だったら十進数、”%s”だったら文字列など。scanfはコンソールからの入力を受け付けて、第二引数に与えた変数(へのポインタ)に代入する。ポインタというのはメモリのアドレスのこと。xという変数へのポインタは&xという書き方をする。
これが、C言語/Objective-Cで関数を使いたくなった時の書き方。全然難しくない。iOSアプリの入門書で出てくるような@interfaceとか@implementationとかself=[super initWithCoder:coder];とか訳の分からない物は全然登場しない。
つまり、iOSアプリの入門書は関数宣言をすっとばして、関数的な働きをするものを全てクラスのメソッドにしてしまっているのだ。
というわけで次回はやっとC言語修得者のための第一歩です。
関連記事
-
Objective-CでiOSアプリの第一歩 新規プロジェクトで生成されるコードの解説
しけたコンソールアプリばかり作っていたけれど、ようやっとiOSプログラミングに入るとしよう。急がない
-
Objective-CでiOSアプリの第二歩 とにかく立ち上がればというレベルのHello, World!アプリを作成
前回はiOSアプリ作成の第一歩として、Empty Applicationを選択した際に書いてあるコー
-
Objective-Cの第四歩 インスタンスプロパティ・メソッドを定義する
Objective-Cの第三歩では、ピュアC言語からのObjective-Cのクラス入門ということで
-
Objective-Cの第六歩 プロトコルの宣言と実装
Objective-Cの第五歩では、親クラスの継承とメソッドのオーバーライドについて説明した。そこま
-
Objective-Cでは何故.hファイルと.mファイルを作成させられるのか
前回説明したように、Objective-Cでプログラムを書く際には、別にC言語そのもののつもりで書い
-
Xcode 6の正式リリースまでに、Objective-Cでアプリを一つ仕上げる!
Swiftに早速触れてみたい!でもXcode 6がベータ版の間は、有料(7800円/年)のDevel
-
iOSプログラミング入門書では、まず最初のHello, World!すら難しい
Hello, World!が第一歩 新しくプログラミング言語を習得するときに、「この言語でのH
-
Objective-Cの第五歩 クラスの継承とメソッドのオーバーライド
前回Objective-Cの第四歩では、等差数列の和を計算するプログラムGaussTesterの作成
-
Objective-CでiOSアプリの第三歩 UIViewControllerの必要性を理解する
前回はUIViewControllerの存在を無視して"Hello, World!"アプリケーション
-
Objective-Cの第三歩 クラスとクラスメソッドを定義する
Swiftの事をひとまず置いておいてObjective-Cの入門編を書いているわけだが、前々回の"H