情報科学概論
2002.5-7
出席に関する注意事項を説明しますので,その注意を良く聞いてから,電子メールにより出席の申告をしてください.自分が操作しているパソコ
ンの時計があっているかも確認してく
ださい.「件名」は
gairon 5-7 attend s0240**
のように自分の学生番号を使って下さい.なお,入力ミスがあると出席として認
められないことになりますので,慎重に行ってください.文
字はすべて1バイト文字 (半角英数字) です.途中に入るスペースは一度に一個だけと
してください.スペースは全部で3個です.また,**の部分は自分の学生番号の下二桁
です.
今回もテキストの表現に関する約束は先週と同じです.今後もこの形式で進めま
すが,以後はこのような注釈を用意しませんので,各自で良く覚えておいてくだ
さい.
さて,先週の授業で等号の記号である = は,プログラミング言語では
「代入」を意味すると説明しました.今回は,等号と代入の違いについて少し説
明します.以下の例を実際に試してみましょう.
結果を各自で表示してみましょう.何かエラーが出たでしょうか.プログラムの
記述にエラーがなければ,このスクリプトは問題なく答えを表示してくれます.
= が等号であれば,上記の2行めは間違いですが,ここでは代入なの
で間違いではありません.2行目の意味は,
ということです.このような代入を「自己代入」と呼びますが,これは,プログ
ラムにおける繰り返し処理という不可欠の要素と密接な関係があります.これが,
感覚的に理解できるようになると,今後の作業はずいぶんと分かりやすくなりま
す.
また,余りに頻繁に登場するので,省略して記述することができるようにもなっ
ています.上の例の2行目は次のように書くこともできます.
演算の記号を「演算子」と呼び,上のようなものを自己代入演算子と言いますが,
他にもたくさんあります.また,四則演算以外の演算子との組み合わせもあり,
使いこなせれば便利ですが,今のところは四則演算子との組合わせの例を試して
みてください.
先週と同様,自己代入も文字列に適用することは可能です.各自で試してみましょ
う.
どういうことが行われたのか,考えてみてください.
また,代入であることが理解できる例として次のようなものもあります.
最初,a には2を代入しますが,3行めでは b の値を a
に代入しています.その結果,puts
により確認すると,a の値は変化しますが,
b の値はそのままです.等号はあくまで代
入なので,b には変化がありません.
上のスクリプトや先週までのスクリプトで,結果の表示をいろいろと行ってきま
したが,Rubyをはじめとするほとんどの言語で出力コマンドの引数内でそのまま
演算が可能ですので,より簡潔な表現が可能です.たとえば,上記のスクリプト
は以下のように書き換えられます.
また,上の例は引数が一つだけでしたが,複数組み合わせることも可能です.次
の例はどうでしょうか.
この例では,カンマで区切った5つの要素があります.二重引用符でくくったも
のは「文字列」であり,print 命令によりそのまま出力されます.変
数のところは変数の値が出力されます.また,最後に改行文字を置いて,出力後
新しい行に進むようにしています.複数の変数や文字列を出力するには,このよ
うに print を使い,カンマで区切って命令すれば良いのです.
数学では「関数」の扱いが非常に重要です.たとえば,y = f(x) では,
xの値が決まると,yの値が決まります.
また,「数列」では,項が何番目かが分かれば,その
値が求まります.
それらとはまた少し異なるのですが,たとえば,全部で5段の引き出しに上から
順番に番号を1から5とつけ,その中に順にシャツ,セーター,ズボン,肌着,ハ
ンカチを片付けるとします.すると,引き出しの番号が分かれば,その中に納め
ているものが何かが分かります.引き出しの番号と中身が対応づけられているか
らです.
プログラミング言語における「配列」は,上の例のように,納めてある順番が分
かれば,その中身が分かるものであり,場合によっては数列や関数のように扱う
こともできる便利な道具です.はじめは難しく感じますが,使いこなせないと複
雑な処理が出来ないので,しっかりと理解できるまで,簡単な例から試して覚え
ていきましょう.
次のようなスクリプトを考えます.
配列は,上の例のように [ ] でくくって定義します.また,配列の要
素はカンマで区切ります.p コマンドで array という配列
の意味を出力すると,配列であることが分かります.また,配列の特定の要素を
表すには,配列名の後に [1] のように要素番号をつけます.しかし,
上の例で,array[1] の値はどのように出力されたでしょうか.配列の要素の順番を表す序数は0から始まることに注意しましょう.
配列の1番目の要素の序数は0になるのです.
上でのべた自己代入やこの配列などは「繰り返し」という重要な手法のための準
備です.繰り返しは次回以降登場しますが,そのときにまた合わせて説明するこ
とにしますが,一つだけ配列を利用した例を挙げることにします.
スクリプトを書いて実行させることを覚えると,コマンドライン引数を利用した
計算などを実行してみたくなります.たとえば,二つの数の積を求めるスクリプ
トを書くとします.
上の例では,別の数を掛け合わせようとすると,いちいちスクリプトを訂正しな
ければなりません.それよりも,
$ ruby product.rb 3 5
のように実行できるとずいぶん楽になります.そのようにコマンドラインからの
引数を取り込んでくれる定数に ARGV があるのです.しかし,この,
ARGV は配列なので,配列の要素を取り出さ
ないと計算などは出来ません.また,取り込んだ段階
では,要素を文字列としているので,そのままでは数
値として計算できません.その辺りを考慮して,以下
のようなスクリプトを作ると,先ほどのような二つの
数値の積を求めることが可能になります.
結果の方は,いかがだったでしょうか.ARGV[0].to_i という表現です
が,まず,to_i というのは,整数 (integer) にしなさい,という命
令で名前が意味を反映しています.そして,ドットで繋げる方式がRubyのやり方
で,ドットの前にあるもの (オブジェクト) に対して,ドットの後ろにあるもの
(メソッド) を作用させることを表現しています.ドッ
トで繋ぐのはいくつ繋いでも良いので,このやり方を
マスターすれば,スクリプトをかなり簡潔に書くこと
が出来るようになります.
授業の終りに宿題 (AクラスとBクラス別々) について説明しますので,アナウンスに注意してください.
ターミナル上でのコマンド操作 $ に続いてコマンドを表示
エディタで記述するスクリプト 薄い青色の背景で表示
スクリプトプログラムの出力結果 薄いピンク色の背景
a = 1
a = a + 1
puts a
a に1を加えたものを再び a に代入する
a += 1
str = "first "
str += "second"
puts str
a = 2
b = 3
a = b
puts a
puts b
a = 1
puts a += 1
a = 10
b = 20
print "a = ", a, ": b = ", b, "\n"
array = [1,2,3]
p array
puts array[1]
a = 3
b = 5
puts a * b
puts ARGV[0].to_i * ARGV[1].to_i
目次ページに戻る