Objective-C Primer 番外編 徹底C復習 3.データ型

ではここでは使用頻度の高い3つのデータ型を紹介して、さらにそのデータ型を組み合わせる3つの仕組みについて見て行きましょう。

1.  int 型
マイナス21億4千7百48万3千648からプラス21億4千7百48万3千647までの整数を保持することができます。最高値を超えた場合は最初のマイナス21億〜に戻り、最低値をマイナス1すると最高値にもどります。

2. char 型
マイナス128からプラス127までの整数を保持することができます。最高値や最低値を超えた場合はint型と同じ動きをします。
 この型は文字というか文字コードを保持するのに使われることが主な目的です。例えばアルファベットだと各種の記号をいれても127までで事は足ります。日本語の場合は1文字に対してこのchar型を2つ使うことによって対処されます。しかしこの 復習編 ではそのことを気にする場面に行くことはまずないと思います。なおObjective-CではNSStringというオブジェクトを使って文字および文字列を表すことが一般的です。したがってこの char 型はC言語では文字を保持するために重要ですが、Objective-Cで重要なデータ型は int 型と次のポインター型の2つという事になります。

3. ポインター 型
C言語から導入された新しいデータ型で、int や char などの他のデータ型の変数が確保されているメモリのアドレスを保持するために使われます。関数に渡される引数としての変数や戻り値として返ってくる値は、実はその度にコピーされてやりとりされています。つまり、その度ごとに新たなメモリ領域が必要になるということです。 int は4バイトでcharは1バイトですが、実際のデータは次回で説明する配列や構造体やオブジェクトという仕組みを利用して巨大なもになっている可能性があります。音楽データや画像データを考えてみると分かると思います。ところがそのメモリ上のアドレスを覚えるだけなら常に4バイトだけで済みます。つまり4バイトのポインター型変数をコピーするだけでそのデータの情報をやりとりできるようになるという事です。したがって現在ではこのポインター型が多用されています。
 宣言の仕方は、「 int * value; 」などと宣言します。int 型の変数のアドレスを入れるポインター変数という意味です。「*(アスタリスク)」を使う点に注意してください。なおObjective-Cで使われる id 型というのはオブジェクトが存在するメモリのアドレスを入れるポインターでオブジェクト型と呼ばれています。



次にこれらのデータ型を組み合わせて作る3つの仕組みです。
なおこれらのことは次回からの制御文編でいくらでもでてきますから
無理して覚える必要はないです。理解することに努めてください。

1. 配列
同じデータ型の集合で、1つ1つには0から始まる整数の通し番号がつけられます。
int   array1[];
int   array2[100];
1つ目はint型の配列を宣言していますが、何個のint型の配列なのかは決めていません。何個の集まりにするかは後でいくらでも増減ができます。
2つ目は100個のint型の配列を宣言しています。当然このままでは100個の場所を確保しただけで中には何のデータも入っていません。

2. 構造体
違うデータ型の集合を作れる仕組みです。よく例えられるのが名簿や成績表などのデータベースです。
例えば、ある学校の生徒のデータベースを作るとします。1人1人に対して次のようなデータが必要になるとしましょう。
1.名前(文字列データ)
2.学生証番号(整数データ)
3.住所(文字列データ)
4.国語のテストの点数(整数データ)
5.国語の成績評価(A,B,C,Dのいずれかの文字データ)
6.数学のテストの点数(整数データ)
5.数学の成績評価(A,B,C,Dのいずれかの文字データ)

以上のように型の違うデータを例えば1つの「student」という名前のデータ型にまとめることがC言語の登場の少し前からできるようになりました。一般的にはこのデータ型のことをレコードと呼びますが、Cでは構造体と呼んでいます。同じ型のデータを集めた配列との違いを認識してください。さらにこの「student」と名付けた構造体を配列にすれば学生のデータベースの出来上がりです。
  この構造体と次のオブジェクトはプログラマーが自由に組み立てることができるので「ユーザー定義型」とも呼ばれています。逆に言えば新しい構造体を作るたびに新しいデータ型が出来上がるという事に注意してください。この構造体を入れる変数を作る場合には、
この新しく作った構造体の型の名前を指定して変数を宣言するのだという事に注意してください。

3. オブジェクト
構造体で学生一人のデータを1つの「student」という形にまとめることができました。もっと欲を出せばテストの点数を入力すれば自動で「A,B,C,D」の4段階の評価をしてくれると助かります。そこでこの構造体にテストの点数から自動で評価を出してくれる関数を付けることにしました。またテストの点数は0〜100点までです。うっかり120点と入力したり、あるいは-50点と入力された場合に「点数の入力が正しくありませんよ」と注意を促してくれる関数もあればより安全です。それでこれも付けることにしましょう。
 こうして生まれたものが種類の違う複数のデータとそのデータを処理する関数(オブジェクト指向ではメソッドと呼ばれることが多いです)によって構成された「オブジェクト」というものです。非常に便利なものですが、残念ながらC言語でサポートされているのは構造体までです。そこでアップルではオブジェクトに対応しているObjective-Cという言語を採用したわけです。
 そしてここまで見て来ると、このオブジェクト1つ1つが今までのデータ型とは違って巨大な容量を持つ可能性に気付くでしょう。そこでObjective-Cではすべてのオブジェクトをポインター型変数を使って指し示すようにしました。こうすればメモリの節約にもなります。
[PR]
by vivacocoa | 2007-04-30 11:01


<< Objective-C Pri... Objective-C Pri... >>