プログラム入門。ソースコードってなに? 初心者にも判る基本から

ソースコードのことをプログラムの設計図と呼んだりします。プログラムの動作を細かく記載したものなのでその通りなのですが、なんかイマイチ、ピンときません。

ソースコードを初めて見た人は、なにか得体のしれない不気味な文字の羅列に見えるかも知れません。
たとえば、Java のソースコード

Javaを知らなくてもプログラム経験者ならなんとなく意味がわかるかもしれませんが、プログラムなど見たことも触ったこともない人には謎の文字列です。

でも

もちろん謎の文書ではありません。
一行一行にちゃんとした意味があります。それぞれの行がコンピュータに対する 命令 になっており、その命令をコンピュータは 上から順に 読み取ります。そして、読み取った命令を忠実に実行していきます。

この点は Windows だろうが Mac だろうがスマホだろうが全て同じで、いわばソースコードの基本ルールです。そして、そうしたルールさえ押さえれば、初心者でも必ずプログラムを読み書きできるようになります。

このページでは、ソースの基本的なルールを紹介していきます。

- 目次 -

スポンサーリンク

ソースは上から順に

ソースには 命令 が大量に書いてありますが、ちゃんと順番に並んでいます。順番というのはコンピュータが実行する順番のことで、基本的に上から下にむかって並んでいます。

コンピュータ側の目線でいうと、ソースの上の行から順番に 命令 を読み取り、その順番どおりに実行していきます。

pg_order

命令は細分化

命令とは、具体的にどんなものなのでしょうか。

コンビニのレジ端末を考えてみます。お客さんが「弁当とお茶を買って 1000円札を出した」とします。レジ端末のコンピュータは
弁当とお茶の合計金額を計算し、1000円との差額を計算してお釣りとして出金する という一連の行為を行います。
それはつまり、ソースコードとしてそのように命令が書かれているわけですが、問題はその書き方です。上のように言葉でダラダラ書いてもコンピュータは理解してくれません。コンピュータには少し噛み砕いてやる必要があります。どういうことかと言うと

  • 合計金額を計算しなさい
  • 1000円との差額を計算しなさい
  • 差額を出金しなさい

と、一連の流れを細かい命令に分割してやります。そして、細分化された命令を順番通りに上から並べます。こうすることで、初めてコンピュータは期待通りに動いてくれます。

pg_dtl

命令の結果は変数へ

命令を細分化するのは判りました。でも、ここで疑問が・・・

3番目の命令「差額を出金しなさい」を実行するためには
2番目の命令「差額を計算しなさい」の 結果 が必要です。

2番目の命令「差額を計算しなさい」を実行するためには
1番目の命令「合計を計算しなさい」の 結果 が必要です。

つまり、一行一行の命令は実行して終わりではなく、その 結果 をちゃんと記録しておき、後で使えるようにしなくてはなりません。

そこで出てくるのが 変数 です。

変数って?

いきなり変数と言われてもピンとこないかもしれません。そこで説明のため、架空のプログラム言語でコンビニの例をコーディングしてみます。弁当が 500円、お茶が 200円だとします。

pg_sum

上の例の sum と charge が変数です。プログラムにおける変数とは データの入れ物 みたいなもので

と書くと、500 + 200 の結果 700 が sum という入れ物 にセットされます。(右辺を左辺に代入しています)
そして sum は700 を入れたまま後の命令で利用されます。2行目がそうで、

と書くと、1000 – 700 の結果 300 が charge という入れ物 に入ります。
最後の行で out とあるのは後で説明しますが関数です。とりあえず、何かのおまじないと思ってスルーしてもらってかまいません。out の () の中に数字を入れると出金されると考えてください。

pg_var

上から順に、じゃないケース

ソースコードは上から順番に実行されると書きましたが実は例外があります。例外があるというのは、つまり、上から下ではない、変則的な動きがあるということです。しかも例外は 1 つだけではなく 3 つあります。
順番に見ていきます。

例外1 if 文 による分岐

コンピュータは上から順番に命令を実行していきますが、場合によっては命令をとばして欲しいことがあります。たとえば先ほどのコンビニの例だと、お釣りを出金するのは 1000円との差額がある場合です。1000円ちょうどなら出金しません。

こうした場合 if 文 というものを使います。if 文の書き方はこうです。

これは、差額があれば出金するし、なければなにもしない という意味です(if は英語の “もし~なら” からきています)。

if 文を一般化すると

条件が成り立てば命令を実行する。成り立たなければ命令を実行しないという意味です。

さらに細かく

条件が成り立てば命令1を実行する。成り立たなければ命令2を実行するという書き方もできます。

補足

割愛しますが if 文によく似た書き方に switch 文 というのがあります。

例外2 ループ処理による繰り返し

プログラムを書いていると、同じことを何度もつづけて繰り返したいケースがよくあります。その際

と同じ命令をズラズラ書いても間違いではないのですが、ちょっと面倒です。回数が 3回ならまだいいのですが、100回とか 1000回になるとさすがに無理があります。

そこで登場するのが ループ処理 です。

ループ処理をざっくり説明すると

という書き方ができ、これで XX が 3回繰り返されます。

たとえば Java の場合

と書くと、画面上に

と表示されます。
Java や C言語 などメジャーな言語では for 文、while 文 という書き方が主流です。

例外3 関数の呼び出し

プログラムが大きくなると似たような処理があちこちで必要になります。たとえば、数字の四捨五入の計算なんかはけっこういろいろな場面で必要になります。必要になるたびに、同じ命令をあちこちで書いてもいいのですが、効率を考えると、あまり良い方法ではありません。

そこで登場するのが 関数 です。

関数とは?

なんらかの処理(たとえば四捨五入)を独立させ、どこからでも利用できるようにするというのが基本的な考え方で、独立させた処理を 関数 と呼びます。

pg_fuse

関数の処理を利用することを 関数を呼ぶ と言います(呼び出す、コールする、と言ったりもします)。関数について、基本的なポイントは以下の3点です。

● 関数名

関数は 1 つだけではなく、いくつでも作ることができます。そこで 1 つ 1 つの関数を区別するため名前をつけます。関数の名前なので 関数名 といいます。名前は勝手に決めてかまいませんが、アルファベット、数字、一部記号の組合せというルールがあります。

● 呼び方

関数を呼び出したければ

と、関数名に()をつけます。

● 引数と戻り値

もし、関数になんらかのデータを渡したければ、() の中に置きます。

() の中のデータを 引数 と言います。

上のコンビニの例では、out という関数に charge を渡していました。

out 関数に出金の命令が書かれており、それを呼び出しているというイメージです。
charge には 300 が入っているので、out 関数は 300円を出金します。

また、関数には 戻り値 というものがあります。これは、関数の処理の結果を呼び出し元に知らせるために使われます。

pg_arg

たとえば四捨五入の関数なら、引数 172.3 を渡すと、戻り値 172 が返ってきます。

補足

Java のようなオブジェクト指向言語では、関数ではなく メソッド と呼びます。
(関数とメソッドの違いについては立ち入りません)

コメント

ソースはコンピュータに命令するために書かれますが、実は命令以外のことも記述されています。いわゆる コメント です。

ソースが長くなったり複雑な内容になると、人が見ても理解しづらくなります。そこで、人間の言葉(日本語 OK)で注釈を入れておくことで、ソースを判りやすくします。その注釈部分がコメントです。

コメントの書き方は 言語によって異なります。
C言語や Java の場合、

  • // の後から行末まで
  • /* と */ で挟まれる箇所

がコメントに該当します。

Java の例です。

コメントはコンピュータにとっては無意味なので読み飛ばされます。

まとめ

ソースコードは 一行一行が命令。
命令は上から順に実行される。
ただし例外が 3 つある。

  • if 文による分岐
  • ループによる繰り返し
  • 関数呼び出し

命令の実行結果は変数に記憶する。
ソースを理解しやすくするためコメントを書く。




基本的なことは以上です。
最後に、ちょっとだけ補足的な話として、エントリーポイントという言葉を紹介して終わりにします。

エントリーポイント

ある程度、規模の大きなプログラムは大量の命令で構成されています。その命令が 1 つのソースに収まるわけですが、では、プログラムはどこから動くのでしょうか。ここまでの説明だと「上から順番でしょ」と答えたいところですが、実は必ずしもそうではないのです。

たとえば C言語の場合は main という関数を必ず 1 つ作ることになっており、この main がプログラムの開始位置になるという規則があります。そして、この開始位置のことをエントリーポイントと呼びます。

そしてややこしいのですが、言語の種類(C言語、Java、perl、Ruby・・・)によって開始位置の決め方が異なっています。perl はソースの先頭から開始しますが、Java は C言語と同じく main から、といった具合です。

pg_funs

エントリーポイントが決まるとあとは上から順に命令が実行されます。上の例だと、

XX、SS、TT、YY、ZZ

の順に実行されて終了します。

特定の言語を選んで勉強を始めるときは、開始位置がどこになるのかも意識しておく必要があります。

スポンサーリンク
その他の記事
  1. とても分かりやすかったです。正直、参考書とかりも理解しやすくすんなりと頭に入ってきました。出来れば他のものも上げてほしいです。

  2. C言語勉強中 says:

    初心者でプログラミングの勉強中です。
    専門用語がたくさん出てくるのでどれを何に使うのか、どう組み合わせるのかが分からずモヤモヤしていました。
    この記事は初心者にもすごく分かりやすく書いてあったので理解が深まりスッキリしました。
    ありがとうございます。

  3. ifでコードがぐちゃぐちゃなのを繰り返しと関数呼び出しで整理する感じですかね、とても分かりやすかったです!
    まずは立ち上げたとき自動で行われるコードから表示する画面と分岐点を作ってみればいいんですよね、頑張りますー!!

  4. コンピュータプログラムといった類いのものには触れずに生きてきましたが、今まで見てきた中で、一番簡潔でわかりやすかったです。
    ありがとうございます。

コメントはお気軽に