第1章 プログラミング言語とは何か?

 まずプログラミング言語とは何かという事から始めましょう。
 そのためにはiPhone/iPad/iPod Touchの定義やアプリケーションの役割りから考える必要があります。

iPhone/iPad/iPod Touch
 iPhone/iPad/iPod Touchが何であるかは、人によってさまざまです。
 電話、メール、ビデオ再生装置、いろいろな答えが返ってきますが、ここではiPhone/iPad/iPod Touchをコンピュータとして扱います。
 では、コンピュータとは何でしょうか?

コンピュータ
 コンピュータは、メモリに記憶された数値をCPUが読み/書き/加工する装置です。

$テン*シー*シー-1

メモリ
 メモリは複数の数値を、区分けされた番地ごとに記憶(Memory)する装置です。

CPU
 CPUはこの番地を使い、メモリ上に記憶されている複数の数値を読み/書き/加工(=処理)します。
 そのため、コンピュータの中心部(Central)となりメモリを処理する装置(Processing Unit)の頭を取ってCPUと呼ばれます。

$テン*シー*シー-2

データ
 例えば10番地の数値を読み込み、20番地の数値に足し込むというのも立派な処理です。
 この時、これらの数値はデータと呼ばれます。
 例えば、メモリ10番地の値が100、20番地の値が1であった場合、

$テン*シー*シー-3

 データ処理後の20番地の値(データ)は101となります。

$テン*シー*シー-4

 最初に断ったように、メモリは数値しか記憶できません。
 しかし、コンピュータ(iPhone/iPad/iPod Touch)が扱うデータは、メールの文字、画像、音楽と様々です。これらをメモリ上に記憶するために、例えば文字なら、数値と文字との対応表を用意するなどの取り決めをして対応しています。

$テン*シー*シー-5
数値65をアルファベットのAとみなすことは、国際的に決められています。

プログラム
 また、先ほどおこなった「10番地の数値を読み込み、20番地の数値に足し込む」といった、CPUがおこなうべき処理、いわば命令書もメモリに記憶されます。CPUは、この命令書を読み込み、命令に従って処理をおこないます。
 この命令書をプログラムと呼びます。

$テン*シー*シー-6

 プログラムも文字と同じで、数値ごとに動作を取り決めています。

$テン*シー*シー-7
数値がどの命令に対応するか、どのような命令があるかはCPUによって決まっています。

プログラムコード
 メモリ上に記憶された数値は、同じ値でも解釈のされ方で、命令になったり、文字や画像になったりするわけです。
 このように、なんらかの規則を持った数値を符号(コード)ともいいます。そのため、プログラムとして並んだ数値を、プログラムコードと呼んだりもします。

プログラミング
 このプログラムコードを作る作業がプログラミングです。

サブルーチン
 ところで、CPUへの命令は、先にあげたような数値の読み込み、書き込み、足し込みといった単純なものしかありません。
 例えば、さまざまな装置の組み合わせによって、メモリ上の特定の番地を1にすれば、画面上にタイル状に配置された特定の点を黒にする事ができるコンピュータがあると仮定します。

テン*シー*シー-19

 この場合、画面にアルファベットのAを表示したかったなら、上記処理を何十という点(メモリ番地)に対しおこなう事になるわけです。

$テン*シー*シー-29

 このように単純に命令を羅列すると、Aではなく、AAAと3文字表示したい場合は、この3倍の処理が必要になるわけですが、メモリの容量には限界があるので、もう少し効率的にプログラミングする必要があります。
 そのために用意された命令が、サブルーチン呼び出しという命令で、上記の例でいえば

Aを画面に出す

 という処理を一つの処理単位にしておき、元々のプログラムから、サブプログラムとして呼び出すというものです。
 この呼び出される側のプログラムをサブルーチン、呼び出す側をメインルーチンと呼んだりもします。

$テン*シー*シー-10

 CPUはメインルーチンでサブルーチンを呼び出す命令を読み出すと、いったん、命令書読み込み先をサブルーチンに移し処理を続けます。

テン*シー*シー-21

 そして戻れという命令が現れると、そこでサブルーチン処理を終わり、呼び出し元のメインルーチンに戻り、サブルーチンを実行せよという命令の、次の命令から続きを実行していきます。

$テン*シー*シー-28

 このサブルーチン呼び出しという仕組みを応用する事で、先のAを3つ画面に表示させる処理は「####番地のサブルーチンを実行せよ」という命令を3回繰り返すだけで実現できます。
 ただし、応用と言ったように、そのまま「Aを画面に出す」サブルーチンを呼び出すだけでは、同じ場所にAが現れるだけで、AAAといったようにAが横には並びません。Aを横に並ばせるためには、サブルーチンが

Aを画面に出す

 ではなく
 
Aを画面のXの位置に出す

 というものでなくてはいけないからです。そしてメインルーチン側もこのサブルーチンを呼び出す時に、Xを指定してやる必要があります。

サブルーチンの引数
 一般に、Xようなサブルーチンの動作に影響を与えるデータを、サブルーチンの引数と呼びます。

$テン*シー*シー-23

スタック領域
 サブルーチンの引数の実現には、通常、特定の番地をメインルーチン、サブルーチンで共有する方法をとります。

テン*シー*シー-24

 この引数用のメモリ領域は、無秩序に確保したりはせずに、CPUがサブルーチン呼び出し用に確保しているメモリ領域に積み重ねていくのが一般的です。
 CPUがサブルーチン呼び出し用に確保しているメモリ領域はスタック(積み重ね)領域と呼ばれており、サブルーチン呼び出し時に、サブルーチンから戻る場所をCPUが積み重ねるようになっています。

テン*シー*シー-25

 そして、サブルーチンで「戻れ」という命令を見つけると、CPUはスタックの最上部に積まれている番地を取り出し、その場所を新しい命令読み込み先にします。

テン*シー*シー-26

 サブルーチン呼び出し時に積み重なるスタック領域は、サブルーチンの引数の領域としても最適なわけです。

$テン*シー*シー-27

 サブルーチン呼び出しと、その引数という仕組みを使う事で、コンピュータの機能はどんどん拡張できるという事がおわかりいただけたでしょうか。

OS
 このような視点から見た場合、これから作ろうとしているiPhone/iPad/iPod Touchアプリケーションも、メモリに常駐しているメインルーチンから、一時的にメモリに読み込まれ呼び出されるサブルーチンということになります。
 このメインルーチンを、一般にオペレーティングシステム(OS:オーエスと略される)と呼びます。
 iPhone/iPad/iPod TouchのOSはiOS:アイオーエスと呼ばれています。

$テン*シー*シー-14

API
 そしてiOSというメインルーチンは、いくつものサブルーチン(画面に文字を出すなど)を従えており、iPhone/iPad/iPod Touchアプリケーションからも、そのサブルーチンを呼び出す事ができます。

$テン*シー*シー-15

 iOS側のサブルーチン呼び出しの作法(事前にどのような引数を用意するか、どのような機能があるか)は、エーピーアイ(API:Application Programming Interface)と呼ばれます。

アプリケーションの役割り
 この作法に従ってユーザーのために、OS側の機能を使いこなす(応用する)事がアプリケーションの役割りというわけです。
 以上の事から、アプリケーションを作るには、OSから呼び出せるサブルーチンプログラムコードを作成すればよいということになります。

コンパイラ
 ただし、プログラムコードを数値で直接記述する作業は人間にとって苦痛です。そのため人間が扱いやすいルールで書いた文章をプログラムコードに変換するコンパイラというツール(これもアプリケーション)が用意されています。

$テン*シー*シー-16

プログラミング言語
 人間用の記述法はさまざまなものが用意されていて、このうちのひとつがC言語です。一定のルールに従ってCPUに意思を伝達するところから言語と呼ばれています。C言語、Objective-C言語、Java言語、記述法によってさまざまな言語が用意されており、これらを総称してプログラミング言語と呼びます。

リンカ
 また、コンパイラによって変換されたプログラムコードは、それだけではアプリケーション用として成り立ちません。OSと連携するための補助プログラムコードが必要とされ、これらを合わせてひとつのアプリケーションとなります。
 この作業をおこなうためにリンカというツールが用意されています。

$テン*シー*シー-17

 補助プログラムコードはライブラリなどと呼ばれ、事前にファイルとして用意されています。
 自分で用意するプログラムコードも一つだけにする必要は無く、区切りのいい単位(小さなサブルーチン単位など)で分割し、リンカに渡す事ができるようになっています。

$テン*シー*シー-18

Xcode
 iPhone/iPad/iPod Touchアプリケーションの場合は、iOS用のコンパイラ、リンカというツール、そしてC言語ソース書くためのテキストエディタ(メールやワープロのように文章を書き編集する機能を持つツール)などが必要です。
 これらを統合したアプリケーションがXcodeと呼ばれるMac用のアプリケーションです。

 次回からは、このXcodeを使ってアプリケーション作成方法を学習していきましょう。

→NEXT:(3)Xcodeを使ったC言語の学習