プログラムってなんだ?
パソコンってイロイロできるよね。それはプログラマーがイロイロなことができるようプログラミングしてるからなんだ。
プログラミングを要約すれば『ある"目的"を達成するために"設計"や"手順"を考え、それを実行させ目的を果たすこと』です。もっとザックリ書けば『コンピューターに何かしらの"命令"を出す』という感じですね。たとえば『リモコンのスイッチを押すと、エアコンが作動する』的なプログラミング。ここでは『エアコンに対しスイッチを利用して空調を行う』が目的ですね。
この目的を達成するため必要なのは『リモコン・エアコン』です。で、リモコンには『スイッチ』があり信号を発信する機能が、エアコンはそこから発信された信号を受信し、実際に空調を行う機能がある。ここまでが『設計』と言えるでしょうか? まあ物理的な環境に関して言えばって感じですが。
で、コンピューター上でのプログラミングの本題は『リモコンのスイッチを押すと、エアコンが作動する』を実現させるための『手順』です。ボタンを入力すると起動のための信号が送られ、受信機を搭載したエアコンがカチッと作動するための"プログラム"を作っていきましょうという流れ。ただ機械は『人間のことば』がわからないという問題があります。なので、まずは機械に人間の言葉を理解できるような機能をもたせ、そのなかで『機械に理解できる言葉』を書いていく必要があります。そのツールが『プログラミング言語』というわけ。その言葉を読んで、機械が求められた命令を次々と実行していきます。
わたしたちがカタカタ打ち込んでる文字だって、キーボードのある位置から電気信号が発せられたときアーシロコーシロっつうプログラムが働いてるから、こうやって文字を打ち込むことができるのです。こういった『入力・出力』はプログラミングというより機械の仕様というか、まあ電気工学の方面になってしまうと思うのでここで書くのはパスします。そもそもわたしそんな詳しくないし。ここで書くのは『プログラミング言語の初歩的な書き方』的なアレです。わたし自身、ちょっとだけプログラムを書くくらいならできるので、まあほんのすこーしだけ紹介してみようと思った次第です。
わたしがほんの少しでも触ったことがある言語は『C言語』『Java』『HTML』『JavaScript』らへんです。言うて何年も前のことなので今じゃからっきしですが、まあたまにJavaScriptで遊んでるくらいですかね。C言語は派生言語がたくさんありますが、まあほのり『C++』なら見られるくらいでしょう。
あ、JavaとJavaScriptはまったく別言語なので勘違いしないように。これは大人の事情ってやつです。さて、今回は『C言語』で基本中の基本を書いていきましょうか。
注意:ここでは言語紹介だけしかしません。なので『環境』の整え方に関する記述はないですよ。まあとりあえず『Eclipse』か『Visual Stdio 〇〇』を使えば良いんじゃないでしょうか。
プログラム初心者がはじめに行うプログラムは『コンピューターに"文字を表示"させる』ことです。全世界共通で、これは『Hallo World』なんて呼ばれますね。じゃあC言語におけるハローワールドを見てみましょう。
1:#include <stdio.h>
2:
3:int main(void)
4:{
5:printf("hello world\n");
6:
7:return 0;
8:}
なんとなく『5行目でHallo Worldを表示するんだな』というのがわかると思いますが……いやーワケワカメですね。まずは、こういったプログラムが書かれたモノを『ソース(コード)』と呼ぶのを覚えときましょう。
C言語の入門書では『printd(〇〇)』が文字列を表示すつ関数だよと説明しますが、上記の大半をおまじないと呼んで説明をスルーしてしまったりするので後腐れが残ったりします。説明が難しいから『おまじない』にしてるんですけどね。でもまあせっかくなので、ここでは1行目から細かく説明していきますか。
printf(〇〇)は文字列を表示する関数と書きましたが、関数ってなんでしょう? 数学でいうアレコレではなく、プログラム上では『与えられた値をもとに、内部で様々な処理を行う機能』です。ただ1列にまとめていますが、これ機械の中ではとんでもない作業が行われてたりするんですよね。
文字を表示するってかんたんなように思えますが、実は『メモリに情報を入れる → CPUへデータ処理を行う → ディスプレイと連携する → 入出力機能と連携する』的な作業をすべてぶっこんだ上で『文字表示してね』とプログラムする必要があるんです。これを1から10までプログラムするとなるとどんだけ手間暇がかかるか――昔の人はそれぜんぶやってたそうですが、少なくともわたしが学んだ時代はそんなことしませんでした。なので上記手続きを行うプログラムはまったく知りません。
が、そういったメンドウな手続きを『printf(〇〇)』はたった1行のシンプルな言葉でやってのけるのです。すごくね? すごいだろ? すごいといえ!
この『関数』ですが自分でも作ることができます。たとえば『2つの数字を比較し、大きい方を知りたい』とかね。
#include <stdio.h>は『予め用意された関数群を呼び出す命令』です。冒頭で書いた"人間のことばを理解できるようにする機能"によって、上記のようなべんりな関数たちが詰め込まれたファイルを予め読み込んでおくことで、それらの機能を使えるようにしてもらうことを指します。
#includeが「予め読みこんでね」という命令。後ろの<stdio.h>は『入出力に関する関数』です。読み方は「スタンダード、アイオー」です。ioは『インプット・アウトプット』ってことで、これが入出力の標準的な関数などを実装したファイルだということがわかりますね。
『.h』という拡張子はヘッダーファイルを表しています。まあjpgとかhtmlとかと一緒で、機械がファイル名を識別するためのアレです。
他にも算数や数学系の演算関数がたくさんある<math.h>ってのもありますし、プログラミングをする上で便利な機能を搭載してる<stdlib.h>なんてのもあります。で、printfは『()の中にある文字列をそのまま表示する』機能をもってます。文字は『""』で囲むのがルールで、たとえばprintf("こんにちは");と書けばそのまま表示されます。最後の『\n』は改行をしめす命令で、プログラムの最後に必ず『;』を記述するルールがあります。じゃないとまだ記述が続いてることになりエラーになってしまいます。
printfは『int main(void)』という関数の中で記述していますね。これ実は重要な関数で、C言語の仕様として『main関数から実行する』というものがあります。つまり、ソースコードにmain関数がなければなにも始まらないですし、あればそこから始まるのです。難しいことは考えず「そういう仕様なんだな」と受け止めてください。実際そのとおりなんだから。
intは『データ型』を表しています。メモリに情報を詰め込むのはわかるのですが、じゃあどのくらいの大きさの情報を詰め込むの? って機械が迷うわけですよ。なのでデータの大きさを『int』にしているのです。int型の大きさは4バイト、以下の通りです。
-2147483648 ~ 2147483647
まちがってたらごめんね。で、(void)ってのは『その関数に渡せる値はなんも無いですよ』という意味です。関数は『printf("こんにちは");』のように()の中にいろいろな値を入れられる(これを"引数"と呼びます)のですが、中には入れられないものもあります。voidは『何もない』をより強力に明文化するための言葉です。
さて、C言語の関数には必ず『データの大きさ』を指定してあげる必要があります。『int main(void)』とありますし、自分せ制作する関数でも『int hoge()...』と記述する必要があります。それで何ができるか? というと『値を返すことができる』のです。それが7行目の『return 0;』ですね。main関数の場合、仕様として『0が返されたら正常終了。それ以外の値が返されたらなんらかのエラー』ということになっています。まあ選択肢は4バイト分あるからよりどりみどりですね。これがなんの役に立つか? たとえば『ある数を足した数を代入したい』場合などです。
int Plus(i,j)
{
return i + j;
}
int a = Plus(1,2);
こうすれば、aには『3』が代入されます。ちなみにint型にはint型の値しか入れられない仕様があり、C言語には『char型』など複数の大きさがあるため細かい記述が必要になります。また返す値を必要としない場合以下のような記述もできます。
void hoge()
{
~なんか適当なプログラム~
}
とまあこのように、実は『文字を表示する』だけのプログラムをより詳しく解説すると、ほんとに細かい作業を(機械が)してることがわかるのです。これは感謝するしかないね!
かなり急ぎ足でしたが、プログラムってけっこー細かいことしてるんですね、自分で書いててもしみじみしました。これらはプログラミング言語が登場した当初は存在せず、関数やらウラの設定やらをぜーんぶ自分で書いてたってのだから恐ろしいわ。
現代プログラムの進化に脱帽しつつ、とりあえずJavaScriptでも書き書きしてみましょうかね。
ああ! また見たことのないエラーが!!




