(010) はじめのプログラム

Ippei Kishida

Last-modified:2018/03/29 22:55:03.

1 はじめに

本文書は私がかつて行っていた Ruby プログラミング科目のテキストに、修正を加えたものである 1。 11回分のテキストで、初心者として文法を知り、 最低限のプログラミングができることを目指している。 各タイトルの先頭についている 「(000)」のような括弧付きの数字は、 順序を制御するためだけに付けてあるもので、本質的な意味はない。

2 なぜ、プログラミングが必要か?

研究を進めていくために、多数の(無数の)データを処理する必要がしばしばある。 例えば以下のような問題に直面した時に、これを解決する手段を持ち合わせているだろうか?

連立方程式を解く問題において、 1つの3元1次連立方程式を解くのに10分かかるとすると、 100個の連立方程式を解くには休みなしで 16時間以上かかる。 10元の方程式だったり、連立方程式が 10000個になったりすると、 人の手では処理することが困難になる。 100個の連立方程式を解く場合、これを人の手で解くのに 16時間かかるのならば、 10時間でプログラムを作ってそれを走らせれば、 より短時間で同じアウトプットが得られる。 いや、人間は計算を間違えるものなので、 プログラムにさせた方がより良いアウトプットが得られる。

プログラミングを用いるかどうかはコストと利益の比較で決められるべきであって、 たとえば 1個の連立方程式を解くために10時間のコストをかけてプログラムを作るべきではない。 常に、問題解決のために最適な戦略を考えること。 平均を求める作業もただ1度だけなら MS-Excel で処理した方がラクだろう。 しかし「BMI の平均値、最大値、最小値を求める」という作業を 学生用に50人分以上生成したデータの1つ1つで繰り返し行いたくはないし、 これが毎年になるとなれば尚更である。 こんな問題はプログラム一発で処理できるようにしておくべきだ。 本演習の中の問題は全て、繰り返し現れる問題として考えてもらおう。

『(100) 総合課題 ドラクエ風戦闘シミュレータ』 のようなシミュレータを作成することを初心者としての当面のゴールとする。

3 プログラミング言語 Ruby

Ruby は「楽しいプログラミング」という思想のもと設計されている。 Ruby についてインターネット検索してみるとどれくらいパワフルで、 広く使われているかが少し実感できるかもしれない。 C言語よりも修得が容易で、すぐに C言語よりも労少なくプログラミングできるようになることと思う。 C/C++ でのプログラミングに憧れを持つ人でも、Ruby から C/C++ へ進むことを私は勧める。 初心者は、C/C++ のコンパイルを通すことでも一苦労なのだ。 プログラミングに使われる基本的な概念・手続きを学ぶには、 簡単で楽しい方が良いに決まっている。 もしあなたがプログラミングに強い関心を抱いていて、 オブジェクト指向について学びたいというのなら、Ruby はその好適な環境だ。 ここで培った知識の大部分はほとんどそのまま C++ や Java へと応用できる。

4 Ruby 環境のセットアップ

最近の UNIX 系 OS では標準で入っていることが多い。 インストールされているならば、which ruby コマンドでパスを知ることができる。

Windows 環境にもインストールできるが、 それについて私は詳しくないので他の情報源に委ねることにする。

5 何もしないプログラムの作成

まず、空のファイルを作る。 名前は「empty.rb」が良いだろう。 UNIX なら touch コマンドで作成できる。

% touch empty.rb

コマンドプロンプトで ruby empty.rb と入れて実行してみよう。 何も実行されず、ただプロンプトが返るだけだが、これが正しい挙動である。

% ruby empty.rb
% 

何も打ち込んでおらず、エラーが混入されていない状態なので当然といえば当然だ。 2

6 hello.rb

何もしないプログラムというのも少し寂しい。 では何か文字を打ち出してみよう。 今後何か複雑な操作をコンピュータにさせたときでも、 それを画面に出すというのが最も基本的な出力スタイルだ。 プログラミング言語修得において最初の例題の定番は、 「hello, world!」という文字列を書き出すプログラムだ。

hello.rb というファイルを作り、テキストエディタで以下のように打込み、保存しよう。

print "hello"

これで実行してみよう。

% ruby hello.rb
hello
% _

さらに表示することを増やしてみよう。

print "hello"
print "world"

これを実行すると、

% ruby hello.rb
helloworld
% _

続けて一語のようになってしまった。 改行するためには改行文字を挿入する必要がある。 改行文字は「\n」で表現する。 3

print "hello\n"
print "world\n"

% ruby hello.rb
hello
world

% _

「入力した最後で改行してくれた方が便利なのに」と思うかもしれないが、 そこはそういうものだと思って受け入れて欲しい。 将来、「プログラムの一部で行の途中まで出力し、また別の一部で途中からを出力する」 というような場面が出てくるだろう。 勝手に改行文字を追加されるより、この方が便利な場面が多いのだ。

日本語も通るので試してみよう。

print "hello\n"
print "world\n"
print "こんにちは、世界!\n"

6.1 エラーメッセージ

プログラマは、幾度となくエラーメッセージを目にすることになる。 プログラムがエラーを吐いた場合には、まず落ちついてそのメッセージを読むこと。 英語なので敷居が高く感じるかもしれないが、内容はそれほど難しくない。 そこには重要な情報が込められている。 読まずに頭を悩ますよりも、読むことに数秒〜数十秒かける方が解決への定石であり、近道である。

6.2 hello.rb の説明: print

print は文字列を表示するための命令。 表示したい内容を「“」(ダブルクォート)で挟んでやれば良い。

7 今後の方針

とりあえず本演習の目標を設定しておこう。

また、これらを実際に用いたプログラムとして、 簡単なシミュレータを作ることを目的としてみよう。 これからはこのテキストを、そのシミュレータにどのように利用できるのかを考えながら読め、 演習を進めていってもらいたい。

8 課題

  1. 自分の名前を含む適当な文を表示させるプログラムを作成せよ。 文は改行文字を使い、3行以上となるようにすること。

  2. 自分がどんなプログラムを作りたいか・作るべきかを考え、 それについての議論を加えよ。 たとえば自分の生活において、どんなプログラムを作ると便利になるか? それを実現するためにはどのような(プログラム的な)部品が必要か?


  1. なお現在 私は担当を離れ、また当学科では Ruby ではなく C でプログラミング教育を行っているため、 現在の当学科でこの内容の教育を受けられるわけではない。

  2. 「デバッグという作業がバグを取り除くことなら、 プログラミングとはバグを注入する作業に違いない」(ダイクストラ)

  3. 日本語 Windows の環境では半角の “\” (バックスラッシュ) は 半角 “¥”(円記号)と同じコードになっている。 なので、“\” になっている箇所は適宜読み替えること。