[iOS] 変数と型 3 | プログラミング初心者向けObjective-C入門

2013/04/16

今回は前回紹介した各型の紹介です。
その前に変数名の付け方のルールを忘れてました。

変数名のつけかた

・英数字、_(アンダーバー、アンダースコア)のみ
・はじめの文字は_か英語文字のみ
・大文字と小文字は区別される

例)

        //OK
        NSInteger num1;
        NSInteger _num2;
        NSInteger MyNumber;
        NSInteger MYNUMBER;

        //エラー
        NSInteger 3num;

例のMyNumberとMYNUMBERは区別され、別の変数と認識されます。
ただ間違えやすいので、全く別のスペルにした方がよいです。

また変数のつけかたは言語ごとに慣例のようなものがありますので、「この言語ではこんな感じのつけかたをよくしているなー」という感じで調べてみるとよいと思います。

※余談ですが今回、変数名をためしているときに、$を変数名の最初や途中に使っていてもコンパイルエラーが出ませんでした!JavaScriptライブラリの影響なんでしょうか、、? ただ、いまのところ$をObjective-Cでは積極的に使う必要もないので、変数名での記号は_のみにしておいた方がよいと思います。

では、次から型の説明です。

NSInteger

符号付き整数を表します。
この型の変数に小数を代入しても、自動的に整数に切り下げられます。

        NSInteger myint = 3;
        NSInteger myint2 = 4.56;
        NSLog(@"%ld", myint); //output = 3
        NSLog(@"%ld", myint2); //output = 4

”符号付き”とありますが、これは+ か – を表すことが可能という意味です。
符号なしもあり、符号なし整数は NSUInteger という型になります。

CGFloat

実数を表します。小数を表したいときはこちらを使います。
数値の後ろにfをつけて代入する場合があります。
3行目でNSIntergerと同様の3を代入したときの、出力の違いに注目してください。

        CGFloat myfloat1 = 1245.8;
        CGFloat myfloat2 = 2.3f;
        CGFloat myfloat3 = 3;
        
        NSLog(@"%f", myfloat1); //output = 1245.800000
        NSLog(@"%f", myfloat2); //output = 2.300000
        NSLog(@"%f", myfloat3); //output = 3.000000

BOOL

真偽値を表します。真偽値とは、YESかNOかのような2択の値です。
C言語ではtrue / falseで表しますが、Objective-CではYES / NOで定義されています。
またこの値は実際には整数の1か0を表しています。そのため、出力するときは%dを使います。

        BOOL mybool1 = YES;
        NSLog(@"%d", mybool1); //output = 1
        
        BOOL mybool2 = NO;
        NSLog(@"%d", mybool2); //output = 0

NSString

文字列を表します。変数を宣言するときは、*(アスタリスク)をつけて、使うときはつけません。
また、NSStringは次に説明するObjective-Cオブジェクトのうちのひとつです。
C言語で文字列は@をつけずに”(ダブルクォーテーション)だけで囲みますが、Objective-Cでは前に@をつけます。

        NSString *mystr = @"Hello my srring";
        NSLog(@"%@", mystr);

Objective-Cオブジェクト

Objective-Cで使われる様々なオブジェクトです。オブジェクトはざっくりいうとデータのまとまりのようなものだと思ってください。クラス(Class)というものを定義してから使うことになるのですが、クラスについては大分先に説明します。ここではそういうものがあるとだけ知っていれば大丈夫です。

NSStringの項目でも説明しましたが、変数を宣言するときは、*をつけて、使うときはつけません。

        NSLocale *myloc = [NSLocale currentLocale];
        NSLog(@"%@", myloc);
        
        NSValue *myvalue = [NSValue valueWithSize:CGSizeMake(20, 30)];
        NSLog(@"%@", myvalue);

補講)ポインタとは?

これはObjective-Cでは特に覚える必要もないので、流してもらって大丈夫です。

変数の前に*をつける場合、その変数はポインタとなります。
ポインタとはメモリ上のアドレスを差します。前回、ノートを使って型の説明をしたと思いますが、何ページ目にそのメモが書いてあるかを表すものがポインタとなります。

例1)プログラムでなくノートでのたとえ
ある数学のメモが書いてある場合
そのメモのポインタはそのメモがノートの何ページ目に書いてあるかを表す(例えば14ページ目とか)

例2) C言語の場合

        NSInteger mynum = 5;
        NSInteger *mypointor = &mynum; //1
        NSLog(@"%d", mypointor); //2
        NSLog(@"%ld", *mypointor); //3

//1 mynumのポインターmypointorは、変数に&をつけることで得られる。
//2 出力は1606416552となるので、mynumはメモリでは1606416552のアドレスに書いてあることとなる。(実行環境によってメモリのアドレスは変わりますので、出力結果は変わります)
//3 ポインターの中身を知りたいときは ポインター変数に * をつけるともとの値を得られる

例3) Objective-Cオブジェクトの場合

        NSDate *now = [NSDate date];
        NSLog(@"%d", now); //1 ouput = 1060496
        NSLog(@"%@", now); //2 output = 2013-04-16 01:13:09 +0000
        NSLog(@"%d", *now); //3 エラー

//1 出力フォーマットをメモリのアドレスとした場合、変数nowのアドレスが出力される
//2 出力フォーマットをObjective-Cオブジェクトとした場合、メモリのアドレスではなくその中身が出力される
//3 C言語のようにObjective-Cオブジェクトに*をつけても、中身をみられない。

いろいろと書きましたが、今のところObjective-Cでは

・宣言時に*をつける
・使うときは*をつけない

とだけ覚えておいておけば大丈夫です。

次回は数値計算について説明予定です。


自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る