Objective-C 基礎のところ
目次
行区切り
プログラムの行区切りには「;」を使います。
phpと同じだ!
コメント
行単位のコメントは「//」。範囲でのコメントは「/* 〜 */」。
// 行単位のコメント /* 範囲でのコメント ですよ */
これもphpと同じだ!
演算子
数値演算子
c = a + b; // 足し算 c = a - b; // 引き算 c = a * b; // かけ算 c = a / b; // 割り算 c = a % b; // 割り算の余り
代入演算子
a = b; // aをbに代入 a += b; // aにbを足してaに代入 a -= b; // aからbを引いてaに代入 a *= b; // aとbをかけてaに代入 a /= b; // aをbを割ってaに代入 a %= b; // aをbで割った余りをaに代入
インクリメント、デクリメント
++a // aに1を加え、aを返す。 a++ // aを返して、aに1を加える。 --a // aから1引いて、aを返す。 a-- // aを返して、aから1を引く。
比較演算子
a > b // bよりaが大きい場合true a < b // aよりbが大きい場合true a >= b // aがb以上の場合true a <= b // bがa以上の場合true a == b // aとbが同じ場合true a != b // aとbが異なる場合true
論理演算子
a && b // aとbが両方ともtrueの場合true a || b // aとbのどちらかがtrueの場合true !a // aがfalseの場合true
やっぱりこの辺は全言語同じなんだね!
変数の宣言とデータ型
Objective-Cで変数の宣言をする際は型を指定する必要がある。
int a; double b; float c; bool d;
ここはphpと違うな。javaやc#等と同じ感じか。
ポインタ型の変数
クラスのインスタンス(オブジェクト)はサイズがまちまちなので、名刺だけを預かっておくように、変数ではインスタンスを保管しているメモリ上のアドレスだけを管理します。
でた!C言語アレルギーの原因の1つポインタ。
つまり、こういうことか?変数はサイズが決まっていないといけないから、サイズが決まっていないオブジェクトはポインタ型としてメモリ上のアドレスだけを変数にいれる。
int型(32bit)、char型(8bit)[※objective-cではサイズが違うかもしれないですが。]等はサイズが決まっていて変数を宣言するときにその分のメモリが確保されているということなのかな。
プログラムの基礎の基礎の部分からやり直す必要があるかもね。時間はないが。。
つまり、こういうことか?変数はサイズが決まっていないといけないから、サイズが決まっていないオブジェクトはポインタ型としてメモリ上のアドレスだけを変数にいれる。
int型(32bit)、char型(8bit)[※objective-cではサイズが違うかもしれないですが。]等はサイズが決まっていて変数を宣言するときにその分のメモリが確保されているということなのかな。
プログラムの基礎の基礎の部分からやり直す必要があるかもね。時間はないが。。
ポインタ変数は変数の前に「*」をつけて宣言する。
NSString *msg;
とりあえず、クラスを使用する場合は変数宣言の際に「*」をつけると覚えておこうっと。
定数の宣言
定数は変数の宣言にconstをつけるだけ。宣言はどこでもできるがヘッダファイルや実装ファイルの@interfaceで行うのが普通らしいです。
const int A = 10;
phpとは異なるがconstをつけるだけね、簡単だね!
ヘッダファイル、実装ファイルの@interfaceって何だ?
進めていくうちにわかる時が来ると思うのでスルー!
ヘッダファイル、実装ファイルの@interfaceって何だ?
進めていくうちにわかる時が来ると思うのでスルー!
列挙型の宣言
連続した整数が入った定数などが定義できる。
enum { A = 1, B, C, AA = 11, BB, CC, ZZ = 99, } // 使用するときは↓ int test = BB;
上の例だとAに1,Bに2,Cに3,AAに11,BBに12,CCに13,ZZに99が入っている。
phpには列挙型ってなかった気がする。VBか何かのときに使った記憶があるような無いような。。。
マクロの定義
そもそもマクロって何だ?エクセルのマクロと一緒か?
違うみたい。。
コンパイルなどの前処理としてソースコードを単純に文字列置換することにより実現される。
要するにコンパイル前に文字列が置き換わるだけということかな?それによって同じことを何度も書かずにすむみたいな。
#defineで指定された文字はコンパイル前に指定された値で置き換えられる。行の終わりには「;」をつけずに改行する。
関数も定義できる。
@import "ViewController.h" // ↓マクロの定義 #define URL @"http://www.yakaron.com/" #define kansu(a, b) a + b // ↑マクロの定義 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // ↓マクロを使う MSString *abc = URL; int c = kansu(10, 20); // ↑マクロを使う } @end
上の例だと*abcにhttp://www.yakaron.com/,cに30が入っている。
定数と何が違うんだ?
関数も普通にメソッドにするのと何が違うんだろ。。。
少し調べてみたけどわかんない。。。
とりあえず次に進もう。
関数も普通にメソッドにするのと何が違うんだろ。。。
少し調べてみたけどわかんない。。。
とりあえず次に進もう。