情報科学概論
2003.5.13

Back to index page



  1. 本日の作業内容

  2. Ruby紹介

    この授業でRubyというプログラミング言語を使ってどの程度のことが出来るのか, 過去に行った例題や 宿題をまとめたページがあるので,それを見て下さい.プログラミン グの入門なので大したことは出来ませんが,このようなスクリプトをつくっ て遊んで行きます.

  3. プログラミングの流れ

    先週の時間でテキストエディタを練習しました.エディタでプログラムを作成, 編集して,その後,保存を行い,ターミナルでプログラムを実行します.流れを 図示すると,図1のようになります.

    エディタを開いて,スクリプト(プログラム)を作成, 編集する.


    エディタの編集内容を保存する


    ターミナルでコマンドを使って実行する

    図1 プログラム作成から実行までの流れ

    では,実際にプログラムを作成しながら,基本的なことを学習して行きましょう.

    • 作業ディレクトリの確保

      ホームディレクトリで作業を行うと,たくさんのスクリプトファイルが出来てし まい,見栄えも効率も良くありません.ぜひとも,作業用のディレクトリを用意 しましょう.これまで作ったことの無い人は,

      $ mkdir ~/script

      のように,ディレクトリを作りましょう.さらに細かく分類したい人は自分でそ の中に作成するようにしてください.また,この作業は1回行えば良いので,何 度も実行する必要はありません.2度目からはすでにディレクトリが存在する旨 のアラートがターミナルで出るはずです.

      作成が終わったら,カレントディレクトリを移動しましょう.先ほど作成した, script ディレクトリに移動します.

      $ cd script

      自分がどこに居るのか,pwd コマンドで確認してください.

    • エディタの起動

      先週紹介したgEditで作業してみます.起動はGNOMEのパネル(タスクバー)から出 来ますが,ここは是非ターミナルからコマンドで起動してみて下さい.コマンド 名は

      $ gedit &

      のようになっています.最後の & を忘れないで下さい.

      ターミナルからエディタを起動する利点は,デフォルトのディレクトリが自動的 にカレントディレクトリになることです.パネルのアイコンをクリックして起動 した場合には,保存を行う場合にまずホームディレクトリが表示されるので,メ ニューから script ディレクトリを探してダブルクリックして移動し て保存になりますが,ターミナルからコマンドで起動していれば,最初から script ディレクトリが表示されます.

      さらに言えば,ファイル名を指定して起動すると,最初からファイル名が決まっ ているので,一発保存できるようになります.これは,起動時に,

      $ gedit sample.rb &

      などとすれば可能です.ダイアローグウィンドウが出て来て,そのようなファイルを 新たに作成するかを聞いて来ますので,「はい」の方を選択すればファイル名が 決まった状態で開始できます.

  4. 実際のプログラミング

    • 始めの一歩

      まず,最初に学習するのは画面に "Hello, world!" と表示させるスク リプトです.これは,言語を学習するときの決まりです.エディタのテキスト編 集領域に,次のように入力して下さい.

      puts "Hello, world!"

      入力が終わったら,保存します.名前は,hello.rb としましょう.今 後は,Rubyのスクリプトには拡張子として .rb をつけることにします. 保存したら,ターミナルに移って,

      $ ruby hello.rb

      と入力します.無事にターミナルに以下のような結果が表示されたでしょうか.

      Hello, world!

      ここまでの作業でつ まづいてしまった場合には,質問なりなんなりして,かならず解決してください. ここがもっとも重要なポイントの一つです.Rubyという言語で書かれたスクリプ トをターミナルで実行する際のコマンドはそのまま ruby です.この ときの実行方法は上で紹介したように,図2のようになります.

      図2 スクリプトの動作方法

      コマ ンドの引数としてスクリプトファイルの名前を指定します.名前を指定しないと, 入力を待っている状態のまま止まっているように見えます.間違ってそ の状態にしてしまったら,C - c で抜けましょう.

      また,このテキストでは,ターミナルにおけるコマンド入力は以前から紹介して いるように,$マークのコマンドプロンプト付きで例示します.エディタへのス クリプトの入力は

      薄い青色の背景付き

      で紹介し,ターミナルへのスクリプトやコマンドの出力結果を

      薄いピンク色の背景付き

      で示します.違いに注意して下さい.

    • 結果の出力方法いろいろ

      先ほどのスクリプトで使用したプログラミング言語の「命令」は,puts と言うものだけです.これは,結果の文字を画面に出力するだけです. 今後実行して行くスクリプトは,結果を画面に表示するものが大半ですの で,このように画面に表示させるコマンドは重要です.これは,puts 以外にもいくつかあります.

      一般的に,プログラム言語で出力する際には,print が使用されます が,これは,各言語で大体共通の利用法になっています.先ほどと同じ結果を表 示するスクリプトは,次のようになります.

      print "Hello, world!\n"

      これを,例えば,print.rb のように名前をつけて保存し,ターミナル で実行してみて下さい.

      $ ruby print.rb

      結果はどうだったでしょうか.同じになったでしょうか.スクリプトの方では, puts print でほとんど違いが無いように見えます が,出力する文字 (このように文字が連なったものを「文字列」と言いま す.英語では text strings と言います.その,文字列の最後に記号があ る点が違います.ここにある, \n は「改行文字」と,言います. この記号は通常は単なる改行ですので,目には見えません.実行結果でも 表示されないように見えますが,実際には意味があります.試しに,それ が無いとどうなるか,確認してみて下さい.

      今のように,print を使用すると,改行が必要な部分で「改行文字」 を自分で意識的に挿入しないと行けません.面倒なように思えるかも知れません が,実際に自分が出力したい文字列をきちんと成形して出すには,print 文の方が重要です.puts は最初,なれるまでの間の便 宜的な出力方法だと思って下さい.

    • 複数の文字列の出力

      以下に示すように,3つの単語を1行に出力することを考えます.

      blitz buster duel

      まずは,puts を使って1行で表示するようにしてみましょう.

      #names.rb

      puts "blitz buster duel"

      とすれば,出来るでしょう.

      最初に#で始まる行がありますが,Rubyでは多くの言語と同様に,#で始まる行, もしくは,行の途中の#以降を「コメント文」として扱います.コメント文とは 注釈などを挿入するために用意された文の形式で,その部分はプログラムの実行 とは関係が無くなります.今の場合は,このスクリプトのファイル名として例え ば,names.rb というのが考えられるので,最初に名前として示してい るだけです.もちろん,自分で別に好きな名前をつけて構いません.

      では,次に,出力命令の引数を複数に分けることを行ってみます.

      #names.rb

      puts "blitz", "buster", "duel"

      二重引用符とカンマの数と位置に注意して下さい.引用符は二つで一組です.ど ちらか一方が欠けるとエラーが表示されます.例えば,最後の " が無 くなるとどうなるでしょうか.次に示すようなエラーメッセージが表示されます.

      names.rb:1: unterminated string meets end of file
      names.rb:1: parse error

      このメッセージの意味は,大体以下のようなものです.

      names.rb:1行目,未だ終わっていない文字列がファイルの最後に来て しまった.
      names.rb:1行目,構造に関する文法的な関係のエラー

      すなわち,二重引用符で最後に囲むべき文字列が囲まれていないため,文字列指 定がまだ終了していないのに,プログラムが終わっていることを示しています. 本来は良い例ではないですが,次の行に " が来ていたら,一応き ちんと動作します.

      #names.rb

      puts "blitz", "buster", "duel
      "

      さて,以上のようなことを今度は print 文を用いて試してみましょう.

      #names2.rb

      print "blitz", "buster", "duel"

      print 文では改行文字を自分で入れないと,1行に表示されます.しか も,文字列の間にすき間を空けずに出力します.この違いを良く理解しておく ようにしましょう.

    • 特殊な文字 (記号)

      先ほど,改行文字を学習しました.他にも,特殊な文字がいくつかあります.こ れらは,その本来の意味を打ち消すために,文字の前に \ がついてい ます.この記号は,フォントの環境によって,「\」(バックスラッシュ)に見え たり,「¥」マークに見えたりしますが,どちらも機能は同じですので,気にし ないで下さい.表1に特殊な記号の一部を示します.実際にどのような動作をす るのか,確認してみましょう.

      表1 文字列中で利用できる特殊記号の例

      記号意味由来
      \n改行文字New line
      \s空白文字Space
      \tタブTab
      \rキャリッジリターンCarriage Return
      \aベルAlarm

      また,引用符を含む文字列を出力するには,引用符の前にバックスラッシュを置 き,引用符自体の意味をバックスラッシュにより打ち消すことで実現可能です. 次の例を試してみて下さい.

      #quote.rb

      print "``blitz\"\n"

    他にも,プログラミングでは種々の作業に記号を使用します.記号本来の意味で はなく,別の目的で使用したい場合にはこのようにバックスラッシュを用いて意 味を打ち消しますが,これを「バックスラッシュ記法」と呼びます.

  5. 実習作業

    • プログラミングの流れをつかむ

      最初に紹介した,エディタを利用したプログラムの作成や修正,適切な名前をつ けて保存,ターミナルからファイル名を引数として ruby コマンドに より実行,の流れ (図1および図2) を確実に理解して下さい.これが出来ないと,今後の授業では 何もわからなくなります.

    • 複数行の出力

      以下に示す出力結果が得られるようなスクリプトを作ってみて下さい.

      1. puts の利用例1

        012 345 6789
        abc def ghi
        

      2. puts の利用例2

        012, 345, 6789
        abc, def, ghi
        

      3. print の使用例1

        012 345 6789
        abc def ghi
        

      4. print の使用例2

        012, 345, 6789
        abc, def, ghi
        

      5. 上のa〜dの例をそれぞれ1行のスクリプト (すなわち,puts もしくは print を1回だけ使用) で実現

  6. 小テスト

    授業の残り20分くらいでAクラスBクラス別々の小テストを行いますので,アナウンス に注意してください.

  7. 宿題

    授業の最後にAクラスBクラス別々の宿題の案内も出しますので,アナウンスに注意してください.


目次ページに戻る