[目次]
[次回]
[重要語索引]
第1週:プログラムとは
1. 1 プログラミング言語
1. 2 Java 言語
1. 3 プログラムを実行する手順
1. 4 プログラムを書いてみる
1. 5 練習問題
1. 6 変数
1. 7 数値の入力
1. 8 練習問題
1. 9 プログラムを書くときの約束
1.10 エラー
1.11 練習問題
1.12 宿題
1.1 プログラミング言語
- プログラム(program)とは、コンピュータに対して、ど
のような手順で仕事をすべきかを、書いたものです。(情報処
理Ia第6回参照)
- コンピュータが動いているのは、誰かがプログラムを書いたからです。も
し、何もプログラムが入っていなければ、コンピュータに電源を入れても動き
ません。
- プログラミング言語(programming language)とは、プログラ
ムを書くのに用いられる言語です。自然言語とは違い、文法が厳密に定められ
ている人工的な言語です。
- コンピュータが実行するのは機械語(machine language)で書
かれたプログラムです。
- emacs (mule, meadow) で /usr/ucb/ls の内容を見てみましょ
う([Files]→[Open File...] C-x C-f)。
- 機械語は人間には理解できないので、人間に理解しやすいプログラミン
グ言語で書き、それを機械語に翻訳します。翻訳することをコンパイル
(compile)、そのためのソフトをコンパイラ(compiler)と呼
びます。
- コンパイルする元のプログラムをソースプログラム(source
program)、結果のプログラムをオブジェクトプログラム(object
program)と呼びます。
- オブジェクトプログラムを作らず、ソースプログラムを同時通訳しながら
実行する方式もあります。同時通訳するソフトをインタープリタ
(interpreter)と呼びます。
ソフトは買ってくればよいから、プログラミング
を勉強する必要はないと思う人もいますが、既製のプログラムを使っている限
り、その枠を越えることはできません。創造的な仕事をするということは、自
分の発想を具現化するということです。実際のプログラミングは他人に任せる
としても、コンピュータを自分の仕事にどう生かすかという発想の時点で、プ
ログラミングの経験が有るのと無いのとでは大きな差が生じます。
|
1.2 Java 言語
- 自然言語にいろいろな種類があるように、プログラミング言語にも用
途に応じていろいろな種類があります。
- Java 言語は、インターネットでプログラムをやりとりしやすいように作
られた言語で、急速に普及しつつあります。
- Java 言語はコンパイラとインタプリタの両方を使います。コンパイルし
た結果は本当の機械語ではなく、現実には存在しないコンピュータを想定した
機械語です。これをインタプリタが本当の機械語に翻訳しながら実行します。
- 機械語にコンパイルしない理由は、インターネットを通してプログラムを
送ったとき、相手のコンピュータが違う種類の機械語を使っていると困るから
です。そこで、プログラムは仮想的な機械語で送り、それぞれのコンピュータ
でそれを実行するためのインタプリタを用意します。
- Java 言語のコンパイラ、インタプリタ、その他プログラムの開発に必要
なソフトをまとめたものを JDK (Java Development Kit)と呼びます。
JDK にはいくつかのバージョンがありますが、授業では 1.2.1 を基準にします。
どのバージョンを使っているかは、
% java -version
を実行すれば分かります。
|
1.3 プログラムを実行する手順
Java 言語でプログラムを書いて実行する手順は次のようになります。なお、
この手順はアプレットという種類のプログラムを実行するときのもので、アプ
リケーションという種類のプログラムでは違う手順になります。詳しくは第10
回で勉強します。
- ソースプログラムのファイルを作ります。ファイル名の最後には必ず
.java を付けます。
- javac コマンドでソースプログラムをコンパイルします。する
と、ファイル名の最後が .class になったファイルが新しくできま
す。この中にオブジェクトプログラムが書き込まれています。
- applet 要素を含んだ HTML ファイルを作ります。これにより、
実行時のウィンドウの大きさやパラメータを指定します。
- appletviewer コマンドで HTML ファイルを表示すると、その
中で指定されたオブジェクトプログラムを実行します。
これからファイルをたくさん作りますから、ホー
ムディレクトリに適当な名前のサブディレクトリを作り、その中で作業しましょ
う。
|
いきなり何もないところからプログラムを書き始めるのは大変なので、練習用
の土台になるプログラムが用意してあります。とりあえず、これをコンパイル
して実行してみましょう。
1.4 プログラムを書いてみる
プログラムを書くのにはテキストエディタを使います。CNS では mule または
emacs、ラップトップでは meadow が使えます。ここではまとめて emacs と表
記します。
|
SfcTemplate.java はテキストフィールドやボタンを表示するだけの
プログラムです。これではつまらないので、Process ボタンをクリッ
クすると、Outputのところに Hello, world! というメッセー
ジを表示するように作り替えてみましょう。
- まず、これから作るプログラムの名前(クラス名と呼びます)を決めます。
普通は、英単語を空白無しでつなげて、各単語の先頭を大文字にします。ここ
ではHelloWorld という名前にしましょう。
- SfcTemplate.java と SfcTemplate.html は、これか
ら作る他のプログラムにも土台として使いますから、別のファイルにコピーし
たものを編集します。さっき決めた名前に .java と
.html を付けた HelloWorld.java と
HelloWorld.html というファイルにコピーしてください。
% cd 自分の作業ディレクトリ
% cp SfcTemplate1.java HelloWorld.java
% cp SfcTemplate1.html HelloWorld.html
%
|
- HelloWorld.java を emacs に読み込みます([Files]→
[Open File...] C-x C-f)。ファイルの内容
はまだ理解できなくても、2個所変更するだけで自分のプログラムを作れます。
- 上から9行目に(モードラインに行番号が「L9」という具合いに表示され
ます)
public class SfcTemplate1 extends Applet implements ActionListener {
|
という行があります。この中の SfcTemplate1 を、最初に決めたプ
ログラム名である HelloWorld に変更します。
public class HelloWorld extends Applet implements ActionListener {
|
- 最後の方に
void sfcProcess () {
//ここに自分のプログラムを書く
}
|
という部分があります。この「{」と「}」の間に、自分で
考えたプログラムを書き込みます。
void sfcProcess () {
//ここに自分のプログラムを書く
sfcOutput("Hello World!");
}
|
sfcOutput() は、括弧の中の文字列を出力用テキストフィールドに
表示する命令です。このように、ある仕事を実行する単位をメソッド
(method)と呼びます。
sfc が前に付いているメソッドは、練習
のプログラムを簡単に書くために用意したもので、本来の Java 言語の機能で
はありません。
|
- バッファの内容をファイルに保存 ([Files]→[Save Buffer]
C-x C-s) します。
- ファイルをコンパイルします。
% javac HelloWorld.java
%
|
- 次に、HelloWorld.html を emacs に読み込みます([Files]
→[Open File...] C-x C-f)。
- 8行目に
<applet code="SfcTemplate1.class" width=300 height=110>
|
という行があります。この SfcTemplate1.class を、先ほどコンパ
イルして出来たオブジェクトプログラムである HelloWorld.class
に変更します。
<applet code="HelloWorld.class" width=300 height=110>
|
- これを実行します。
% appletviewer HelloWorld.html
|
- ウィンドウの Process ボタンをクリックしてみてください。
1.5 練習問題
- HelloWorld.java のメッセージを自分の好きな文章に変えて、
コンパイル、実行しなさい。オブジェクトプログラムのファイル名は変化しな
いので、HelloWorld.html は変更する必要はありません。
1.6 変数
上のプログラムをさらに改造し、名前を入力すると、その人に挨拶するように
しましょう。そのためには次の二つのことが必要です。
- 入力用のテキストフィールドから名前を読み取る。
- 読み取った名前のデータを "Hello " という文字列と結合し、出力用の
テキストフィールドに転送する。
入力用のテキストフィールドは、マウスでクリックすると、キーボードから文
字を入力することができます。入力された文字を読み取るために、
sfcInput というメソッドを用意してあります。
その次の処理に移るために、読み取った名前を記憶しておくことが必要です。
データを記憶しておくには変数(variable)を使います。「数」と
ついていますが、数値だけでなく文字などのデータを記憶することもできます。
プログラムは次のようになります。(青字の部分は説明なので打ち込む必要は
ありません)
void sfcProcess () {
//ここに自分のプログラムを書く
String s; // 変数 s の宣言
s = sfcInput(); // 次の処理に使うために s に記憶しておく
sfcOutput("Hello, " + s + "!"); //"Hello, " と s の値と "!" を結合して出力
}
|
プログラムは上の行から順に実行されます。各行の意味は次の通りです。
- String s;
- s という名前の変数をこれから使うことを示しています。これ
を変数の宣言(declaration)と呼びます。
- 変数名の前には、その変数の型(type)を書きます。この場合
は String で、この変数に入れるのは文字列であることを示してい
ます。型については第4回で詳しく勉強します。
- s = sfcInput();
- s という名前の変数にデータを記憶させることを示しています。
これを変数への代入(assignment)と呼びます。
- = の左には変数、右には代入する値を計算する式を書きます。
この場合、右側は入力用テキストフィールドの値を読み取るメソッドの呼び出
しです。
- sfcOutput("Hello, " + s + "!");
- 出力用テキストフィールドへ文字列を書き込むメソッドの呼び出しです。
- + は文字列をつなげることを表します。
- " " で囲まれた部分は変化しない文字列です。変数
s はその時点で記憶している内容に置き換わります。
HelloWorld.java を上のように変更し、コンパイルし直して、実行
しましょう。ウィンドウの Input のところに自分の名前を入力して、
Process をクリックしてみましょう。
変数を宣言するときに、同時に初期値(最初の値)を代入できるので、
上のプログラムは次のように書くこともできます。
void sfcProcess () {
//ここに自分のプログラムを書く
String s = sfcInput();
sfcOutput("Hello, " + s + "!");
}
|
1.7 数値の入力
今度は数値を入力して計算するプログラムを考えましょう。アメリカドルの金
額を入力し、それを日本円に直すプログラムを作ります。
SfcTemplate1.java を ForeignExchange.java というファ
イルにコピーして、以下の内容を書き込みましょう。
public class ForeignExchange extends Applet implements ActionListener {
|
void sfcProcess () {
//ここに自分のプログラムを書く
int dollar, yen; // 整数型変数の宣言
dollar = Integer.parseInt(sfcInput()); // 入力した文字列を整数に変換して dollar に代入
yen = dollar * 106; // dollar の内容を円に変換して yen に代入
sfcOutput(String.valueOf(yen)); // yen の内容を文字列に変換して出力
}
|
- int dollar, yen;
- 整数型の変数 dollar と yen を宣言しています。
- int は整数を記憶する型を表します。
- 同じ型の変数はコンマで区切って何個でも一度に宣言できます。
- dollar = Integer.parseInt(sfcInput());
- Integer.parseInt() は、文字列を整数に変換するメソッドで
す。例えば、Integer.parseInt("123") の計算結果は
123 という整数値になります。文字列の "123" と整数の
123 は違うものですから注意しましょう。
- 式の中に括弧が何重にも出てきたときは、一番内側の括弧から計算します。
- まず sfcInput() を呼び出し、入力された文字列を結果として返
してもらいます。
- 次に、その文字列を Integer.parseInt()が処理して、その文字
列が表す整数値に変換します。
- 最後に、その結果を変数 dollar に代入します。
- yen = dollar * 106;
- ドルの値に106を掛けて変数 yen に代入します。
- 掛け算は * で表します。
- sfcOutput(String.valueOf(yen));
- String.valueOf() は、Integer.parseInt() の逆
で、整数を文字列に変換するメソッドです。
- 変数 yen が記憶している内容を
String.valueOf() で文字列に変換します。
- その結果を sfcOutput() が出力します。
1.8 練習問題
- ForeignExchange を実行し、入力欄に何も入力しない、あるい
は数字ではない文字を入力してProcess をクリックすると、どうなる
でしょうか?
1.9 プログラムを書くときの約束
空白・改行・注釈
- 空白は、単語を区切るために必要です。さらに余分な空白を入れても構い
ません。
- 行の左端の空白は、プログラムを読みやすくするために、構造に合わせて
多く入れたり少なく入れたりします。なお、emacs のjava-mode では TAB キー
を押すと自動的に適当な数の空白を入れてくれます。
- 改行は空白と同様に扱われます。単語の途中でない限り、どこで改行して
もかまいません。
- // は、そこから行の終りまで無視せよという印です。この部分
には何を書いてもプログラムの実行に影響しません。プログラムについての注
釈などを書くときに使います。
名前のつけ方
- クラス名(プログラムの名前)や変数名には好きな名前をつけることができます。ただし、
class や extends など、あらかじめ特別の意味を持って
いる語は使えません。
- 名前はアルファベットと数字を自由に組み合わせて作ることができます。
ただし、途中に空白や記号があったり、先頭が数字で始まったりしてはいけません。
- 名前である: 'abc', 'a123', 'ThisIsANiceName'
- 名前でない: 'A Name', '1a', 'a-b'
- 英単語をつなげた名前は、単語の先頭文字を大文字にする習慣です。
- 日本語文字を使うことも可能ですが、漢字コード変換に関する知識がない
とトラブルの原因になります。アルファベットだけにしておく方が無難です。
1.10 エラー
- プログラミング言語の文法は厳密に決まっているので、一文字でも間違えると
正しく動きません。
- プログラムに含まれる間違いをバグ(bug)と呼びます。
- バグを含むプログラムを動かそうとした場合、コンパイル時に何かがおか
しいということが分かる場合と、コンパイルして実行してみてからおかしいこ
とが分かる場合があります。
- コンパイル時に発見された場合、コンパイラはエラー(error)
として処理します。通常はエラーが発見された場所(ファイル名、行番号)と、
エラーの種類が画面に表示されます。
- 実行時に発見された場合、インタプリタがエラーを表示します。
- 文法的には正しいけれど、思っていたのと違う結果が出ることもあります。
これは、エラーにはなりませんから、結果を見てどこが間違っているか考える
しかありません。
1.11 練習問題
わざと間違いをして、どのようなエラーが出るか見てみましょう。
- コンパイルするときに指定するファイル名を間違える。
% javac SfcTemplate.java
- 実行するときに指定するファイル名を間違える。
% appletviewer SfcTemplate1.java
- ファイル名とクラス名(プログラムの名前)が一致しない。
HelloWorld.java の9行目を次のようにして、コンパイル、
実行。
public class HalloWorld extends Applet implements ActionListener {
- メソッド名を間違える。HelloWorld.java の中の
sfcOutput を sfcoutput にして、コンパイル、実行。
1.12 宿題
-
ForeignExchange.java を変更し、日本円を入力し、アメリカドルを
出力するようにしなさい。割り算は / で表します。1ドル未満の端
数はどうなるでしょうか?
- 誤りをたくさん含んだファイル
/pub/sfc/ipl/1bc/Erroneous.java を自分の作業ディ
レクトリにコピーし、コンパイルしてみなさい。出てきたエラーを見て、正し
くコンパイルできるように修正しなさい。一つのエラーを修正すると、隠れて
いた他のエラーが現れることがあります。
[目次]
[次回]
[重要語索引]
慶應義塾大学の授業以外での無断利用、複製はご遠慮下さい。
Copyright (c) 2000 慶應義塾大学