プログラミングとプログラム言語
人が書いたプログラムが機械の言葉に変わるしくみを知り、コンパイラとインタプリタの違いや、関数を分ける利点を説明できるようになります。
ねらい
プログラムがコンピュータで動くまでのしくみを学びます。このレッスンを終えると、人の言葉に近い記述が機械の言葉に変換される流れを説明でき、代表的な言語の性格を見分けられるようになります。
機械が分かるのは0と1だけです
コンピュータが直接実行できるのは、0と1で書かれた機械語だけです。しかし人が0と1を書き並べるのは現実的ではありません。
そこで、人が読み書きしやすい言葉でプログラムを書き、それを機械語へ変換します。人が書くほうをソースコード(原始プログラム)といいます。
変換のしかたには2つあります。
| 方式 | 変換の時期 | 性格 |
|---|---|---|
| コンパイラ | 実行の前にまとめて変換する | 実行は速い。変換に時間がかかり、直すたびに変換し直す |
| インタプリタ | 実行しながら1行ずつ解釈する | すぐ試せる。実行は比較的遅い |
ポイント
どちらも「人の言葉を機械の言葉に訳す」点は同じで、違うのは訳す時期です。まとめて訳しておけば実行は速く、その場で訳せば書いてすぐ動かせます。
プログラムの組み立て方
プログラムは、変数・制御構造・関数で組み立てます。
- 変数… 値を入れておく箱です。名前を付けて出し入れします。
- 制御構造… 順次・選択・繰返しです。処理の流れを決めます。
- 関数(手続き)… まとまった処理に名前を付けて、呼び出せるようにしたものです。
関数に分ける利点は3つあります。
- 同じ処理を何度も書かずに済む。修正するときも1か所で済みます。
- 名前が説明になる。
税込金額を計算するという名前が付いていれば、中を読まなくても何をするか分かります。 - 分担できる。関数の単位で人を分けられます。
関数に渡す値を引数、返ってくる値を戻り値といいます。
言語の型
- 手続き型言語… 処理の手順を順に書く型です。
- オブジェクト指向言語… データとその操作をひとまとまり(オブジェクト)にして組み立てる型です。現実のものになぞらえて設計できます。
- スクリプト言語… 手軽に書いて、すぐ実行できる言語です。
代表的な言語には、次のような性格があります。
- Python… 読みやすい書き方で、データ分析や機械学習でよく使われます。
- Java… 環境の違いを吸収するしくみを持ち、業務システムで広く使われます。
- JavaScript… ブラウザの中で動き、Webページに動きを付けます。
- C言語… 機械に近い操作ができ、組込みシステムなどで使われます。
- R… 統計解析に向いた言語です。
見つけやすい誤り、見つけにくい誤り
プログラムの誤りをバグ、それを取り除く作業をデバッグといいます。
- 文法の誤り… 書き方の規則に反しているもの。変換の時点で機械が見つけてくれます。
- 論理の誤り… 文法は正しいが、意図と違う結果になるもの。機械は誤りと気づけないので、テストで見つけるしかありません。
動いたからといって、正しいとは限りません。この区別が、テストが必要な理由です。
まとめ
コンピュータが実行できるのは機械語だけなので、人が書いたソースコードを変換します。コンパイラは実行前にまとめて訳し、インタプリタは実行しながら1行ずつ訳します。関数に分けると、重複が減り、名前が説明になり、分担できます。誤りのうち文法の誤りは機械が見つけますが、論理の誤りはテストでしか見つかりません。
理解の確認
作成したプログラムが変換の段階でも実行時にもエラーを出さず、最後まで動作しました。この結果から「プログラムは正しい」と判断してよいでしょうか。
答え: 判断できません。エラーが出なかったことが示すのは、文法の誤りが無く、実行を中断させるような異常も起きなかったという事実だけです。文法が正しくても、意図と違う結果を出す論理の誤りは残り得ます。たとえば税率を掛ける場所を間違えても、計算そのものは成立するのでエラーにはならず、金額だけが誤ります。機械は「作った人が何をさせたかったか」を知らないため、この種の誤りを指摘できません。期待する結果を用意して照合するテストを行って初めて、正しさを確かめられます。
分からなかった点・気になった点
読み込み中です。