こんにちは､ そしてようこそ｡
この講義では､ 変数とデータ型の概念についてお話したいと思います｡
よし､ では､ コンピュータがそのプログラムを実行している間､ そのプログラムの命令と､
そのプログラムが作用するデータを保存する必要があることを､ 覚えておいてください｡
そこで､ あらためて「記憶」という概念をお伝えしたいと思います｡
以前の講義でもお話しましたが､ なぜメモリが重要なのか､
メモリとは何か､ 変数と直結しているので､ ここでちょっとまとめておきます｡
ですから､ このメモリの概念を理解し､ メモリとハードディスクの違いは何なのかを理解する必要があります｡
しかし､ メモリはプログラムによって使用されることが分かっています｡
プログラムがCPUに命令を送らなければならないときは､ メモリを使うことになりますし､
データも保存しなければならないときは､ メモリを使うことになり､ プログラムが役に立つためには､
この2つを必ず行うことになるのです｡
これをラム､ ランダムアクセスメモリと呼びます｡
プログラムはデータとラムを格納し､ 彼らは変数とデータを選択します｡
また､ ハードディスクも使用する｡
ラムにデータを保存する場合とハードディスクに保存する場合の違いは､
ラムに保存した場合､ コンピュータの電源を切ったり､ プログラムを終了したりするとデータが消えてしまうことです｡
さて､ 永続的なデータを保存するのであれば､ ハードディスクに保存することになります｡
プログラムはまだハードドライブ上のデータを使用することがありますが､ 通常は外部データ､ 永続的なデータ､
どこかに取得されたデータすべての変数とプログラム自体のすべてのデータは､
メモリに格納されています｡
つまり､ 記憶というのは､ 箱が順番に並んでいると考えればいいんです｡
そのために､ いいイラストを探そうと思ったんです｡
ポインタの話をするときに､ もっと詳しく説明します｡
メモリがどのように格納されるかを理解し､ イメージする必要があるからです｡
しかし､ メモリを外付けのハードウェアの一種と考えると､ マザーボードに載せる小さなスティック状のメモリに過ぎません｡
そして､ 視覚的､ 概念的に考えると､ 箱の連続に過ぎません｡
それぞれの箱が満杯の時は数字の1､ 空の時は数字の0で表します｡
そして､ 2進数の数字を記憶します｡
ゼロや1がありますが､ これは真か偽の値を表します｡
そして､ それぞれの箱はビットと呼ばれます｡
そこで､ メモリ上のビットは8個1組にまとめられ､ これがバイトとなる｡
そこで､ このビットとバイトという言葉を聞いたことがあると思います｡
データの大きさを決めるので､ メモリに関係する場合は重要なんです｡
そのため､ 各バイトにはアドレスを表す数字が付けられています｡
ハードウェアのどこかにデータが保存されている場合､ それにアクセスする方法を知っておかなければなりません｡
そして､ 住んでいる場所の住所と同じように､ 何らかのラベルでそのメモリにアクセスする方法を知る必要があります｡
つまり､ すべてのメモリのビットとバイトにはアドレスがあるのです｡
つまり､ 8バイトはメモリ上のアドレスを表し､ そのバイトを一意に参照するのです｡
このように､ データにアクセスし､ それを可視化することができるのです｡
メモリは多数のビットで構成され､ バイトと呼ばれる8つのグループに分かれており､
各バイトには固有のアドレスがあります｡ プログラムは通常識別子を使ってデータにアクセスしますが､
16進数のアドレスを使用することもできます｡
そして､ プログラムを使うメモリ､ マザーボードに搭載されているメモリは､
メモリが多ければプログラムの効率が上がり､ メモリが速ければバスが速くなり､
メモリに素早くアクセスできるようになるのです｡
16ギガのラム､ そんな言葉を聞いたことがあると思いますが､ ラムの量が多いということは､ プログラムがより多くのメモリを保存し､
より速くアクセスできることを意味します｡
そして､ プログラムがメモリを使うのは､ その方が速いからだということを忘れないでください｡
ハードディスクに何かを保存しておかないと､ アクセスするのに時間がかかってしまいます｡
そして､ CPUによって1秒間に10億の命令を実行していることを忘れないでください｡
つまり､ 多くのデータにアクセスする必要があるかもしれないわけです｡
では､ どのような関係があるのでしょうか｡
まあ､ この変数の概念に直接関係するんですけどね｡
それで､ プログラムはデータを操作できてこそ､ 力を発揮する｡
コンピューターに命令を送るのですが､ データを操作する必要があるのです｡
そこで､ 使用できるさまざまなデータ型や､ 変数の作成方法と名前の付け方を理解するために､
このメモリの概念を理解する必要があります｡
そして､ 強力なプログラムを書くためには､ 変数の概念を理解する必要があります｡
作成方法､ 名前の付け方､ そしてこのデータ型という考え方もあります｡
定数とは､ 変化しないデータの種類です｡
いつも同じようなものです｡
プログラムの期間中､ その価値観を保持し続けます｡
だから､ そのプログラムが動いている限り､ そのデータは常に同じものなのです｡
変数とは正反対です｡
変化する可能性のあるデータの種類だから､ 変数と呼ばれるんだ｡
そのため､ プログラムのライフタイムを通じて値が変化する可能性があります｡
その変数の値が異なる｡
そして､ 変数や定数は､ アドレスでメモリに格納されます｡
しかし､ そのメモリにアクセスして､ 16進数のアドレスをすべて記憶するのは､
本当に､ 大変なことだと思います｡
だから､ 意味のある名前を持つ変数を作るのはとても簡単なんだ｡
そこで､ アドレスを表すために､ メモリの位置を表す変数名をつけます｡
そうすれば､ より簡単にアクセスし､ そのデータを修正することができます｡
そこで､ 例えば､ 10と20の2つの値をプログラム中に格納したいとします｡
そして､ 後の段階で､ この2つの値を使いたいのです｡
このデータを使って行うことは､ まず､ 意味のある名前を持つ2つの変数を作成することです｡
おそらく､ 10と20が何を表しているかによりますが､
年齢を表しているようなものでしょう｡
つまり､ 1歳＝10歳､ 2歳＝20歳ということになりますね｡
常に意味のある名前を使いたいものです｡
そして､ その値を保存することができます｡
つまり､ 名前を付けて変数を作り､ その変数に10と20のデータを代入するわけです｡
そして､ その方法を紹介します｡
そして､ 後でプログラムの中で､ それらの変数に名前でアクセスし､ データを読み取ることができるのです｡
また､ 定数でない限り､ プログラムの中で後から修正することも可能です｡
そこで､ 変数の命名ですが､ プログラミング言語であるcには､ どのような名前をつけることができるかのルールがあります｡
cでは､ すべての変数名は文字またはアンダースコアで始まる必要があります｡
そして､ その後に英字､ 大文字､ 小文字､
アンダースコア､ 数字0〜9を自由に組み合わせることができます｡
だから例えば､ Jason, myFlag, i,
J5x7 my underscore data, underscore another variableという変数を作ることができる｡
これらはすべて､ 文字かアンダースコアで始まる変数で､ その後に続くものは大文字かアンダースコアか数字であれば問題ない｡
以下は､ 無効な変数名の例です｡
このような名前の変数を作成すると､ コンパイラはエラーを出します｡
tempドル記号の値を言った場合､ ドル記号は有効な文字ではないので､
コンパイラはエラーを出します｡
だから､ ドルマークは使えないんです｡
スペースがあるからエラーになるマイスペース・フラグ｡
3Jason､ それは変数が数字で始まるのでエラーになります｡
コンパイラはこれらのルールをチェックしているので､ 間違っていたら教えてくれることを忘れないでください｡
Int, intも実はエラーなんです｡
英数字で始まるので大丈夫そうです｡
ここで問題なのは､ キーワードである｡
どのプログラミング言語にも､ 名前に使えない特別な意味を持つ単語があります｡
また､ intはc言語特有のデータ型なので､ 変数名として使うことはできません｡
以上､ 良くない変数名の例を挙げてみました｡
先ほど､ 変数名を作るときは､ 意味のある名前にしたいと書きました｡
コメントについては､ 自己記録とコード理解のためのコメントの重要性についてすでにお話しましたが､
意味のある名前もまったく同じことです｡
コードに意味のある名前をつけると､ プログラムの能力を高めることができますし､
よりわかりやすくなり､ デバッグやドキュメント作成の際にも役立ちますので､
意味のある名前を使いましょう｡
そして､ 私たちは､ すべての例を通して､ それを行っていきます｡
では､ 変数に名前を付けて変数ができたら､ その変数に関連するデータはどうするのか｡
それをデータ型と呼ぶ｡
つまり､ プログラム中のデータの種類には､ 数字､ 文字､ 単語があるわけです｡
先ほど､ 値として10や20があるという話をしましたが､
英数字や文字列､ キャラクターも可能です｡
ですから､ データの種類によっては､ それを識別して特定の処理ができるようにする必要があり､
それがメモリ内のデータのサイズや保存方法に影響します｡
つまり､ データ型はデータの種類を表し､ プログラムを使って処理することができるのです｡
データの種類の例として､ 数字､ 文字､ 単語を挙げましたが､ これらはプログラミング言語の特定のキーワードで表現されます｡
そこで､ cでデータ型を表すキーワードの例として､ ints､
floats､ doublesがあります｡
そして､ これらの具体的なデータ型とその意味については､
別の講義でお話しする予定です｡
しかし､ データ型が重要なのは､ 変数を作るときにそのデータを指定しなければならないからです｡
そして､ データ型は､ OSやプログラムのアーキテクチャによって､
バイトサイズに対応することになります｡
つまり､ 繰り返しになりますが､ すべてはサイズと､ このようなものがどのようにメモリに格納されるかに関係しているのです｡
プログラムは､ 8バイト､ 4バイト､ 6バイトのどれを割り当てる必要があるかを知る必要があり､
それはすべて保存するデータによって異なります｡
また､ プリミティブデータ型という考え方もありますし､ この言葉を聞いたことがある方もいらっしゃるかもしれません｡
これらはオブジェクトではない型であり､ あらゆる種類のデータを格納する｡
cでは､ オブジェクトがないので､ プリミティブなデータ型しかないのです｡
つまり､ cではすべてがプリミティブなデータ型なのだ｡
さて､ 実際にプログラムの中で変数を使い始めるには､ まず変数を宣言しなければなりません｡
変数の宣言とは､ 変数の種類を指定し､ その後に変数名を指定することです｡
つまり､ データ型に続いて名前を使うわけです｡
そしてこれは､ 特定の変数がプログラムでどのように使われるかをコンパイラに伝えるもので､
8バイト､ 4バイトなど､ メモリに格納するデータの量も理解する｡
例えば､ cにはintという予約順キーワードがあるわけです｡
これは､ integer型のデータ型を宣言するために使用されます｡
そのため､ プログラム内でそのようなデータを作成する場合､
まずintというキーワードでデータ型を特定する必要があります｡
そうすると､ 識別子とも呼ばれる変数名が必要になってきますね｡
そして､ 最後にセミコロンが必要です｡ C言語ではセミコロンがすべてのステートメントを終了させることを覚えておいてください｡
つまり､ 実際の構文は､ 変数名の後にセミコロンをつけて､
型指定やデータ型指定のようになります｡
また､ カンマを使うことで1行に複数の変数を宣言することもできますし､
別々の行で変数を宣言することもできます｡
全ては人によりますが､ カンマで区切られた変数のための構文があります｡
また､ cでは､ すべてのプログラム変数が事前に宣言されていることを指定する必要があります｡
このように､ 宣言は基本的に､ プログラムに対して「私はこれを持っています」と伝えるだけです｡
使い方を教えてくれないんです｡
これは私のプログラムにあるものだと言っているに過ぎません｡
intという変数を持っています｡
10進数を格納する変数があるのですが､ そのようなものです｡
そこで､ 一例をご紹介します｡
データの型はintで､ 変数名はxで､
セミコロンを入れています｡
別の例として､ 同じ行に複数の変数を作りたい場合は､
カンマで区切るとよいでしょう｡
つまり､ この例では､ x y zという3つのint型変数を持っています｡
そして､ これを変数の宣言といいます｡
変数にデータを代入していません｡ これは存在する変数というだけで､
プログラムで起こることは､ プログラムがメモリ上にこれら3つの変数を作成しますが､
それらの値にはまだ何もありません｡
イコール演算子を使って値の変数を代入することができますが､ これについては演算子について説明するときに詳しく説明するつもりです｡
しかし､ これは非常に簡単で､ 変数に値を代入するには､ equalsを使用し､
次にその型の実際のリテラル定数を使用すればよいことを理解しているはずです｡
この場合､ xは整数で10進数なので､ 112を代入し､ セミコロンを入れているわけです｡
それは､ 値を割り当てることです｡
値を代入することと密接な関係にあるのが､ 変数の初期化である｡
変数の初期化とは､ 基本的にその変数に初期値を持たせることです｡
変数を初期化することは重要です｡ なぜなら､ もし変数にデータも値も関連付けられていなければ､
プログラムで問題が発生する可能性があるからです｡
だから､ 初期化の習慣を身につけたい｡
また､ 初期化は宣言の一部として行うことができますが､ 必ずしもそうする必要はありません｡
基本的には､ 変数を宣言して､ これが私の変数名で､
これが私の変数型ですと言うと､ すぐに等号演算子と変数の値の後にセミコロンが付きます｡
例えば､ indexが21になるように｡
その場合､ int型のactという変数を宣言し､
さらにそれに21の値を代入して最初の値を初期化していることになり､
それが初期化です｡
別の例として､ yが32､ zが14に等しくなるように｡
同じ行で､ 同じ型の2つの変数を初期化する､ int z equals
94はコンパイラがやってもいいのですが､ この場合､ 実際には両方の変数を初期化していないことになるのです｡
zのみ初期化されます｡
Xは初期化されない｡
つまり､ zは94に等しくなり､ xは値を持たないことになる｡
だから､ それが大事なんです｡
そして､ コードのいたるところで初期化変数を宣言することになるのです｡
それでは､ コードブロックの簡単なプロジェクトを立ち上げて､ これらの例のように､
基本的にどのように変数を宣言できるかをお見せしましょう｡
そこで､ コードブロックの中に入っています｡
これは､ これまでのプログラム例で見慣れたものでしょう｡
1行目から6行目まで､ 複数行のコメントを通して､ 上部にいくつかのコメントを入れています｡
8行目にincludeディレクティブがあり､ 標準ライブラリを使用することを述べています｡
そして､ 10行目にプログラムのエントリポイントであるメインルーチンがあります｡
そして､ 私たちのプログラムでは何もしていないのです｡
さて､ 繰り返しになりますが､ プログラムが面白いほど本質的なことをするためには､
変数を作って使いたいと思うものです｡
そして､ いろいろな方法がある｡
今はまだ､ すべてのデータ型を把握しているわけではないので､ いろいろな種類のデータを作ることはできないのです｡
今､ intの例を挙げましたが､ もう一度言いますが､ データ型を指定するだけでいいんです｡
intと入力すると､ 統合開発環境のインテリジェンスによって､
intで定義できる他のすべての事柄が表示されるのです｡
実際にIを完成させる｡
fを入力すると､ もしかしたら他のものが完成しているかもしれません｡
しかし､ 繰り返しになりますが､ 変数を宣言するには､ データ型と有効な名前を言うだけです｡
有効な名前は英数字またはアンダースコアで始まり､
数字で始まることはできませんのでご注意ください｡
だから､ ここでは「int Jason」と言えばいいんです｡
そして､ セミコロンで宣言を終わらせています｡
そして､ これが変数の宣言方法です｡
この変数を初期化したい場合は､
宣言時に等号演算子を使って､ 正しいデータ型を指定します｡
intは10進数なので､ 数字と言わなければならないわけです｡
ここに単語を入れられないのは､ 単語を指定したのではなく､ 数字を指定したからで､
これではコンパイラが出る｡
しかし､ データの種類に基づいて指定し､ その後にセミコロンを付ければよいのです｡
セミコロンとステートメントを覚えておいてください｡
しかも､ 変数の初期化と宣言を同じ行で行っているのです｡
また､ プログラムの後半で変数に値を代入することもできます｡
だから､ 宣言するだけで､ 実際に初期化することができるんだ｡
仮に5と同じにして､ 別の行で上書きすればいいんです｡
ジェイソンは8と同じと言える｡
変数が値を変えることができるので､ 変数を変えたい｡
ここでは､ 等号演算子を使ってデータを代入しています｡
そして､ 14行目にはデータ型がないことにお気づきでしょう｡
その変数にアクセスするためには､ 名前を指定して修正するだけでよい｡
イコールの操作については､ オペレーターの話をするときに詳しく説明します｡
しかし､ これは変数のための基本である｡
プログラム内のデータを表し､ これらの命名規則に従って変数からアクセスされるメモリに格納され､
プログラム内でデータ型と代入値を初期化し､ 宣言します｡
ありがとうございます｡