連載
» 2013年03月13日 18時00分 公開

Xcode/Objective-Cで始めるプログラミング基本のキiOS SDKで始めるObjective-C入門(4)(2/2 ページ)

[平井祐樹,クラスメソッド]
前のページへ 1|2       

Objective-Cのデバッグに欠かせない「NSLog」

 18行目を見てみましょう。「NSLog」というものがありますね。これはデバッグエリアのコンソールに文字を表示するための“関数”です。

 ちなみに、「デバッグ」とは、「Debug」と書き、プログラムの「バグ(Bug)」を取り除く(De)ことです。バグとは、簡単にいうと、プログラムの欠陥や誤作動のことです。欠陥があるとプログラムを実行する際に思い通りに動かせくなるので、これを取り除く必要があります。「関数」というのは、簡単にいってしまえばプログラムの小さな集合です。

 以下のコードで「"表示したい文字列"をコンソールに表示して!」という意味です。

NSLog(@"表示したい文字列");

 「NSLog」は主にプログラムの途中経過を確認するために使用されます。プログラミングをやったことがある人にとっては、CやPHPではprintf、JavaであればSystem.out.printf、JavaScriptであればconsole.log、Flashではtraceのようなもの、といった方が分かりやすいですね。

 実はコンソールに文字を表示するためにもたくさんのプログラムを書かなければなりません。こういうよく使う処理はiOS SDKであらかじめ用意されており、私たちはこの恩恵を受けて単に「NSLog」と書くだけで良くなっています。

 さて、今回のサンプルでは「Hello World!」と1行だけコンソールに表示しましたが、複数行にわたって表示するには、どうしたら良いのでしょうか。答えは2つの方法があります。

 1つは以下のように、NSLogを2つ書くことです。

NSLog(@"1行目ですよ?");
NSLog(@"2行目ですよ?");

 もう1つは以下の書き方です。

NSLog(@"1行目ですよ?\n2行目ですよ?");

 ここで出てくる\n(「\(バックスラッシュ)n」)は「改行すること」を表しています。この\nのような文字を「エスケープシーケンス」といいます。NSLogで使えるエスケープシーケンスの代表的なものは以下の通りです。

エスケープシーケンス 説明
\n 改行
\t タブ
\' シングルクォーテーション
\" ダブルクォーテーション
\\ バックスラッシュ

 例えば、

私は"iOSアプリ"のプログラマの卵です。
以後お見知りおきを!

と表示するには以下のように書きます。

NSLog(@"私は\"iOSアプリ\"のプログラマーの卵です。\n以後お見知りおきを!");

Objective-Cの変数

 「変数」とはデータを入れる箱のようなものです。この箱はデータの種類によって入れられるものが決まっています。このデータの種類を「変数の型」といいます。変数の型はたくさん用意されていますが、Objective-Cでは主に以下のものがあります。

種類 変数の型
符号付整数 NSInteger、int
符号無整数 NSUInteger、uint
浮動小数点型の数値 float、double
真理値 BOOL、bool、Boolean

 そして、この変数をプログラム中で使うには、どの種類の変数の型の箱を用意するか宣言しなくてはなりません。具体的には、以下のように書きます。

NSInteger price;

 これは「『NSInteger』という型で『price』という名前の箱を用意する」ことを表しています。プログラマっぽくいい換えると、「NSInteger型の変数priceを宣言する」といいます。

 後は、この箱にデータを入れるだけです。用意した箱にデータを入れるには、以下のように書きます。

price = 100;

 これは「『price』という名前の箱に『100』という数値を入れる」ことを表しています。プログラマっぽくいい換えると、「変数priceに100を代入する」といいます。

 変数を使ったプログラムを見てみましょう。ViewController.mを以下のように変更してみましょう。

/*
 初めてのObjective-Cプログラミング
 
 ファイル名:ViewController.m
 作者:平井 祐樹
 作成日:2013/02/12
 */
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSInteger price;
    price = 100;
    NSLog(@"お会計は%d円になります。", price);
}
@end

 これを実行すると、以下のように表示されます。

変数の初期化

 17行目で「NSInteger型の変数priceを宣言」し、18行目で「変数priceに100を代入」しています。この例では2行に渡って変数の宣言と代入を行っていますが、以下の1行にまとめることもできます。

NSInteger price = 100;

 さて、ここで「=(イコール)」が出てきました。試しに18行目を以下のように変更してみましょう。

100 = price;

 一見正しそうに見えますが、エラーになります。「=」は数学では「左辺と右辺が等しい」という意味でしたが、Objective-Cの世界では「右にある値を左にある変数に代入する」ということを意味しているからです。

 今度は、18行目を元に戻して、以下の行を変更して実行してみましょう。

price = 100;
price = 200; // <- 追加
price = 300; // <- 追加

 実行してみると「お会計は300円になります。」と表示されます。実は変数は最後に代入した値しか残らないのです。これはとても重要な性質の1つなので、覚えておきましょう。

フォーマット指定子

 NSLogにはもう1つの使い方があります。それは、以下の使い方です。

NSLog(@"フォーマット", 値[, 値...]);

 19行目を見てみましょう。

NSLog(@"お会計は%d円になります。", price);

 「%d」というものがありますが、これを「フォーマット指定子」といいます。勘の良い方は、すでにお分かりかと思いますが、NSLogでは「%d」の部分をpriceに格納されている値に置き換えてくれるわけです。フォーマット指定子は表示したい値の型によって決まっています。

 例えば整数や真理値ならば%d、浮動小数ならば%fを使います。

 フォーマット指定子は複数指定することもできます。複数指定する場合は以下のように、出現する順番に合わせて値を指定します。

 試しに、18行目と19行目を以下のように変更してみましょう。

NSInteger a = 3;
NSInteger b = 2;
float c = 1.5;
NSLog(@"%d割る%dは%fです。", a, b, c); // 「3割る2は1.5です。」と表示される

 当然、値を直接指定することもできます。

NSLog(@"%d割る%dは%fです。", 3, 2, 1.5); // 「3割る2は1.5です。」と表示される

 このように、NSLogとフォーマット指定子を上手に使うことで変数の中身を確認することできるようになります。

次回は、Objective-Cの式と演算子、制御文

 今回はObjective-Cの基本的な説明から変数、NSLogの使い方を解説しました。このぐらいは楽勝でしょうか。難しいと感じた方もいるかもしれませんが、ここであきらめてはいけません。プログラミングが嫌いで1年留年した私がいうのですから間違いありません!

 次回は式と演算子、そして制御文について解説します。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。