4.プログラミングの基本 (2015.2.16)

プログラムを書くには当然ルールがあるので、最低限次のような基本的なことは覚えておく必要があります。

●ファイル名は半角文字を使用する。ただし、OSによる文字制限に従うこと。基本的にアンダースコアと英数字だけを使えば良い。
●プログラムは半角文字を使用する。ただし、プログラム言語の予約語等は使えない。
●行頭にスペースを入れてはいけない。
●コメントを書いて後で内容を把握しやすいようにする。下記のようなコメント文は、#から行末までがプログラム実行時に無視される。
# coding: utf-8
●見やすいように空の行を入れたり、1行が長い場合は改行(半角のバックスラッシュを入れて改行)すると良い。

文法に間違いがあると、Pythonはエラーメッセージで教えてくれます。単純な文字の入力ミスや、コーテーションで文字を囲うのを忘れる等、案外簡単なミスが多いものなので注意します。何にでも言えることですが、頭で考えているだけでは身に付くものも少ないので、後は実践を通して学んでいけば良いと思います。

プログラミングの実践の前に、まずはコンピューターにおける数値の話を簡単にしておきます。コンピューターで扱う情報量の最小単位をビット(bit)と呼びますが、1bitは0か1のどちらかの値をとります。1がオン、0がオフとすれば、丁度1本の信号線に電気が通ったか通らないかで表せるので、単純で扱い易いことになります。1bitを8個並べたものがバイト(byte)です。HDDやメモリー量を表す時に使うので見かけることも多い単位です。bitは0、1、10のように値が2になると桁上げするので、2進数と呼ばれます。我々が普段使う10進数は、値が10になると桁上げするので考え方は同じです。1byte(8bit)は下記のように表されます。

最小値はビットで表すと00000000で、10進数では0
最大値はビットで表すと11111111で、10進数では255 (2の8乗)

つまり1byteは0~255の256通りの数値を表すことができるわけです。コンピューターではもう1つ、16進数と言うものを扱います。数字は9までしか無いので10からはアルファベットを使い、10はA、11はB・・・15はFと書きます。16進数は丁度4bit(最大値は15)の塊を1つの単位として扱えるので、2進数よりも人間にとってわかり易くて扱い易い数値となります。上の1byteの最大値11111111を16進数で表すとFFになります。一般に16進数はそれと明示するために、数値の後にHを付けることになっています。だからこの場合はFFHと書けば良いわけです。(プログラム中の表記では、数値の前に0xと付けます)

コンピューターでは数値の他に論理演算を扱います。数値の1と0のように、結果が真(True)か偽(False)かを扱うもので、このようなデータ型をブール型(次章で扱う)と呼びます。演算には次の3種類があります。

●論理積(AND)→2つ条件の両方が真の時のみ結果が真、他は偽
●論理和(OR)→2つの条件のどちらかが真なら結果が真、他は偽
●否定(NOT)→条件が真なら結果が偽、条件が偽なら結果が真

なんとなく直感でわかると思いますが、テキストの真理値表を見て、もう一度良く確認して下さい。Pythonでは2つの論理値a、bがあるとすると、論理積ならa and b、論理和ならa or b、否定はnot a等と記述します。

プログラムでは、この論理演算を条件分岐に使うことが多いのです。実例は追って学びますが、ある条件を判定して結果によって異なる処理をさせるような場合です。コンピューターは条件判定ができるからこそ、プログラムで自由に制御を行えると言っても過言ではありません。制御においては、論理演算をビット演算で利用されることが多くあります。例えば8本の信号線があって、特定の線の状態を調べるとします。いちいち全線の状態を調べていては大変なので、目的の線だけを調べたいと思います。そのためには目的のビットのみ1で他は0の数値と論理積をとれば良いのです。例えば一番上位の線の状態を得るには次のようにします。

1001 0101 ←信号線
1000 0000 ←調べたい線(一番上位)
--------論理積を実行
1000 0000 ←結果が1であることがわかる

コンピューターにおける文字は、数値で置き換えられたコードで表されます。古くから使われているのがASCIIと呼ばれる文字コードで、1文字を1バイトで表します。これには半角の英数字等を含めて128種類あります。プログラムで扱う文字は基本的にこの中のものを使います。参考までに、日本語のような膨大な文字を扱うには2バイト以上が必要となり、その割り当て方法によって色々なコードが存在します。そのため互換性に問題が発生する場合があり、文字化け等の原因にもなっています。それでは困るので、新たにユニコードと呼ばれる標準的な文字コードが考えられました。Pythonで用いるUTF-8もその1つで、これを明示しておけば安心して日本語を使えるようになります。

さて、基本中の基本はこれくらいにして、次は少し専門的な内容に入りましょう。プログラムでは1つのまとまりを関数、メソッド、モジュール等と呼びます。重要な概念なのでしっかり覚えておくべきです。

■関数
数学では関数を y = f(x) と書きます。これは、ある引数xを与えた時、結果がyになるような規則を表しています。プログラムの場合も同様の形をとり、Pythonで例えば y = int('5') と書いた場合、半角文字の5を引数として与え、それを整数値に変換して結果のyに入れる意味になります。Pythonには関数がいくつも定義されていて、「組み込み関数」と呼ばれています。

■メソッド
メソッドを説明する前に、オブジェクト指向と言う概念を知る必要があります。オブジェクト指向とは、プログラミングの世界ではよく聞く言葉です。自分なりに解釈すると、プログラミングには大きく2つの種類があって、1つはシーケンサのように一連の流れによって目的を実現しようとするもので、もう1つはそれぞれ独立した処理(プログラム)の塊があり、お互いが強調することで目的を実現しようとするものです。昔は単純な処理が多くて前者が主流だったのですが、最近はより複雑なものを実現するために、後者を重視するようになってきました。オブジェクト指向の利点は、手続きを分類・単純化することで、プログラムをわかり易くする点にあると思います。その分、全体量としては冗長的で大きくなり、処理速度も低下することになりますが、ハードウェアが進化した現在ではさほど問題にはなりません。昨今のように、多くの人間で1つの大きなプログラムを作るような場合には、効率的で良い方法なのです。

メソッドとはオブジェクト指向プログラミングにおいて、オブジェクトに対して行う何らかの操作のことです。オブジェクトはデータとメソッドで構成されており、関数等もメソッドのくくりの中に含まれます。だからプログラムで扱うあらゆるものがオブジェクトになるわけです。身の回りの物で言えば部品と言えばわかりやすいでしょうか。プログラムでメソッドを使うには、オブジェクト.メソッドの形で記述します。

■モジュール
工学の分野ではよく用いられる言葉です。システムを構成するひとまとまりの独立性の高い要素をモジュールと呼びます。プログラムに当てはめれば、1つのまとまった処理の塊と言えばわかりやすいでしょう。Pythonには関数やメソッドに加えて様々なモジュールが用意されており、簡単な手続きで利用することができます。一例がテキストに載っているので、参考までに見ておきましょう。プログラムでモジュールを使うには、プログラムの先頭でimport モジュールの宣言が必要です。その上で、モジュール.関数の形で使用します。

例えば先頭で
import time
と宣言し、処理内では
time.sleep(1)
と言った具合です。