この章では、 Ruby という言語について解説すると共にプログラミング言語の扱いに ある程度慣れて貰う事を想定しています。
この授業では、 数ある言語の中で、何故 Ruby という言語を使用するのか、 という疑問があるかと思います。 その疑問を紐解きながら Ruby という言語への理解と、 プログラミング (という行為) の理解を深めていきます。
Ruby を使ってプログラムを書く場合、非常に単純に書く事が出来ます。
例えば、色々な所で見られる書き方には、下記の様ものがあります。
# coding: cp932
print('ハロー世界')
このプログラムを書いたファイルを実行する事で、
"ハロー世界" という文字列をプロンプト (ターミナル部分) に表示する事が
出来ます。
また、1 行目の # coding: cp932
という文字は
Ruby で日本語を入れる時は書くべき物です。
忘れずに書く様にして下さい。
"print" という言葉は "表示" や "印刷" という意味 (和訳) を持っており、 実際、その和訳通りの動作をします。 プログラミングは英語を元に言葉を決めている事が多いので、 使いたいメソッド等は和訳すると何をするか理解できるかもしれません。
' (シングルクォート) もしくは " (ダブルクォート) によって挟まれた 文字 (もしくは文字列) は、 プログラムの中で命令としてでは無く、 人間に読んで貰う為の、メッセージとしての "文字列" として扱われます。 そして、print 文は、その "文字列" を受け取る事を想定しています。
このようにメソッドには受け取るものが決まっている為、 何を受け取る事が出来るのかを常に考えながら書く事が大事です。
"文字列" の他には "配列"、"ハッシュ"、"数値" 等の属性を持ったものが存在します。 この属性の事を Ruby ではクラスと呼びます。
プログラミング言語には様々な機能があります。 機能には、そのプログラミング言語が特別に持っている機能や、 他のプログラミング言語が持っている様な一般的な機能まで存在します。
一般的な概念から説明していきます。
先ず変数という言葉から覚えて下さい。
変数は、プログラミングでは不可欠といえる要素で、 データをプログラムの上で名前をつけて保存する為に使用します。 名前を付けて保存する事で、 必要な時に必要なデータを使用する事が出来る様になります。
この変数を登録 (プログラミングの世界では定義と言う。以後定義を使用) するには、 先頭の文字が小文字のアルファベットで始まる英数字と特定の記号の文字列に何か値を代入する。
変数への代入は下記の様に行なう。
num = 10
string = "String"
代入には = という記号を使う。左辺 = 右辺と書く事で、 右辺のデータを左辺の名前として定義する。 数学の = (イコール) とは意味が異なる為、注意が必要。
上記の変数を使用する場合、下記の様な書き方が出来る。
puts(num) #=> 10
puts(string) #=> String
puts メソッドは print メソッドのように出力するが、 指定文字列の出力後に改行を入れる。 この書き方から分かる様に、変数は定義後であれば、 使用したい変数名をプログラム中に記述する事で、 変数名とデータを置き代えて実行する。
#=> という記号は期待される出力を指します。 10 と String という文字が出力された事から、 先程代入した変数を、正しく扱えている事が分かります。
プログラミングを行なっていく上で、 どの変数にどの様な値が代入されているのかを理解する事は 非常に重要です。
また、配列という機能についても説明します。 先ずはそのプログラムを見て下さい。
array = [] # 配列のサンプル(空の配列作成)
array[0] = 1
print(array[0]) #=> 1 と出力される(sample_array[0] の中身を出力)
array[1] = 2
. # 以下同じように好きな数の配列を定義できる
.
.
print(array) #=> [1, 2, ...] 配列名だけを指定した場合、配列の全体と置き換わる
配列の中の 1 つのデータを要素と呼びます。
上記プログラムの通り、"配列" は []
によって定義されます。
また、配列名の末尾に [数値]
をつけることで、
その配列の指定した要素のデータを取得出来ます。
Ruby を含め、多くのプログラミング言語では、配列の先頭は 0 である為、
1 が先頭だと勘違いしないように注意が必要です。
プログラミングには、条件分岐という文を扱う機能があります。 ここで言う文とは、文章の事だと思って貰って大丈夫です。 プログラミングには、文と式という物があり、 この 2 つを組み合わせる事で、複雑な処理を実行可能にします。
因みに、式とは、先程の変数の代入や、数値の計算、 メソッドの実行等が挙げられます。
if 文の使い方に関しては、プログラミングについて で解説した通りです。 卵の話を、 妻の求める通りにプログラミングとして書くと下記の様になります。
buy(milk, 1)
if egg_selling? == true
buy(egg, 6)
end
因みに、if 文には elsif や else も機能として含まれます。
Ruby には buy というメソッドはありませんが、 ここでは既に定義されている事とします。 buy メソッドは 2 つの引数を受け取ります。 前から順番に買いたい物を文字列で書き、 次の要素に買いたい数を記述します。 この順番は定義する時に決めるので、 どれが正解であるというのはありません。
また、== や true といったキーワードが出てきていますが、 順番に説明していきます。
先ず、== は比較を行なっています。 数学の等号と同様、左右の式の結果を比較し、 結果が同じであれば "真" を返します。 また、結果が異なる場合は "偽" を返します。 if 式はこの "真" と "偽" を用いて条件分岐を行ないます。 さらに、ここでは使用していませんが、 不等号は数学で使用する物と同様の "<" や ">" を使用します。 境界を含む場合は、"<=" や ">=" という書き方も出来ます。
ここまでで、学習内容をまとめる為に問題を問いて貰います。
egg が下記プログラムの様に 1 以上の時、 "卵を購入した" とメッセージを表示する。 egg が 1 未満の時は "牛乳を購入した" と表示する。 条件分岐 if を使用する事。 今回は egg に 1 を代入しているが、 他の数値が代入されていたとしても正常に動作する様に作る事。
egg = 1
Ruby では、繰り返し文には複数の文法が存在しますが 今回は loop 文という物を学びます。 この文は Ruby 特有の機能ですが、 ゲームの作成に都合が良いのでこの文を選択しています。
そもそも繰り返し文とは何かという所を理解する必要があります。
繰り返し文とは、 特定の条件から外れるまで、特定範囲のプログラムを実行し続ける文の事です。
それでは、その条件とは何か? という事になってくるのですが、 その条件の書き方は使用する文によって変わってきます。
今回使用する loop 文に関して言うと、 文そのものには条件の指定はありません。 何故なら、無条件でループし続けるからです。
使用例としては、下記の様になります。
loop do
puts 'loop now'
end
このプログラムでは無限に "loop now" という文字を表示し続けます。 ここで、初めて見る単語があるので解説をしておきます。 "do" という単語は、繰り返しを行なう際に範囲を示す為の単語です。 範囲の終わりは "if" と同じで "end" という単語を使用します。 Ruby では何かの範囲の終わりを示す単語は全て "end" です。 そのように記憶しておいて下さい。 開いた物を閉じるというイメージが必要です。
話は戻りますが、 果たして終了する事が出来ないのかという疑問があるかと思います。 勿論、実生活同様、プログラムも予期せぬ事態というのは存在するので、 その様な時に繰り返しを終了させる命令があります。
それが、break という命令です。和訳は "壊す" です。 和訳の通り、break 命令が実行されると、繰り返しを壊します。
先程のプログラムを例に使用すると下記の様になります。
loop do
puts 'loop now'
break
puts 'not break'
end
実行をしてみると分かりますが、"loop now" という表示は 1 度きりで、"not braek" という表示に至っては実行されていません。 この事からは、無事繰り返しを抜け出す事が出来ている事が分かります。
但し、このままでは繰り返し文の価値が無くなってしまっています。 その為、特定の条件の場合のみ、 繰り返しを終了する様な文章を考える必要があります。
実は、今迄に習った機能を組み合わせる事で出来ます。 if 文をこの中に組み込みます。
例えば、loop を 3 回実行してから終了したい場合は下記の様になります。
count = 1
loop do
puts(count)
if count >= 3
break
end
count = count + 1
end
このプログラムでは count という変数に 1 を代入していますが、 代入する数値を変更する事で、実行出来る回数が変わってしまいます。 そして、count を定義する位置も重要な意味を持っています。 loop 文の範囲の中で定義をしてしまうと、 繰り返す度に 1 を代入してしまう為、 どれだけ繰り返しても数を 3 にする事が出来なくなります。 その為、繰り返し文を書く場合には繰り返し開始時の値と、 終了予定時の値の変化に注意する必要があります。
また、count = count + 1 というのは、 count の数値と 1 を足し、count に代入しています。 プログラミングでは良く使う考え方なので覚えましょう。
それでは、恒例の問題による練習をしましょう。
"卵を購入した" というメッセージを 6 回表示し、終了するプログラムを書いて下さい。
1 から 10 (10 を含む) までの数値を配列のそれぞれの要素に代入し、 繰り返し文を使用して全て表示する事。