情報科学概論
2001.5.1


明日5.2(水)は13:30から1号館8階の教室において種々の質問に答える時間とするので疑問、質問等のある人は有効に活用してください。


  1. 本日の作業内容


  2. スクリプトと実行権限

    教科書p.10

    今まで作成したスクリプトの実行は、例えばスクリプトファイルの名前がhoge.rbであれば、ターミナル(コンソール)において、

    $ ruby hoge.rb

    のように、Rubyでファイルを実行するように指定した。それは、hoge.rbというファイルがただのテキストファイルであるためであった。UNIX系のシステムにおいてはファイルに読みとり、書き込み、実行という3つの権限をユーザに与えるかどうかの選択が出来るようになっている。(詳しくは「リテラシー」教科書のp.206とp.211)マルチユーザを前提としているUNIXでは一つのハードディスクの内容を複数のユーザが利用するため、ユーザごとにファイルにアクセスする権限(属性という)を指定して個人情報を保護するための手段である。その中の実行という属性はディレクトリに対してはその中のファイルの名前を検索できることを意味し、通常のファイルであればそれ自身で動作可能なファイルであることを示している。

    実行属性に関しては、デスクトップの「Home directory」アイコンをダブルクリックして..で示されている上位のディレクトリのうち、/binなどを見てみるとよく分かる。実行権限のあるファイルは書類アイコンではなくピストンのアイコンで示されている。また、より簡単には、ディレクトリ内のファイル一覧を表示するlsコマンドに-Fのオプションを与えてみると、実行権限のあるファイル名の末尾に*がついていることから確認できる。
    教科書にあるようにスクリプトファイルの属性にchmodコマンドにより実行権限を与えると、ファイル名を直接指定して動作を確認できるようになる。なお、ここでも教科書にあるようにカレントディレクトリという現在自分がいるディレクトリを指し示す . の意味を理解しておく必要がある。

  3. オブジェクト

    教科書p.11

    オブジェクト指向言語という分類があり、種々の言語において機能を拡張することによりオブジェクト指向の要素を取り入れることが行われている。C言語に対するC++のように名前を変えてしまう物もあれば、Perlのようにその中に組み込んでいる物もある。Rubyは開発当初からオブジェクト指向であったという点で他の言語よりもより自然な形でオブジェクト指向を実現していることが特徴である。ただし、そのオブジェクト指向の意味は初めから理解することは難しい。教科書にあるように、Rubyで何かを扱う際に、そこに出てくる物はほとんどがオブジェクトであり、オブジェクトは自分自身の情報を知っており、メソッドと呼ばれる手続きを施されるときに自分がどのように振る舞うかを知っているということだけを念頭に置いておけば良いだろう。p.12の例文のように、文字列に対してsizeを聞かれると文字数を答えるが、後に出てくる「配列」(p.35およびp.102)に対してsizeを聞くと配列の要素数を答える、というように、sizeというメソッドに対する応答を自分自身が規定していることを理解してこれから進めば良い。

    教科書のp.13の上にあるスクリプトにおいてputs p の違いを指摘しているが、これは何処が違うのかよく見て、理解しておこう。

  4. 変数

    数学で変数と言えば扱う人間が値を変化させることの出来る数を示すが、プログラム言語においても同様の扱いで考えることが出来る。ただし、数学的には

    x = 1

    というのは、変数 x の値が1であることを言うが、プログラミング言語においては一般に変数 x に1を代入することを意味する。すなわち、等号(=)はプログラミング言語においては「代入」という動作を示す。そこから、自己代入という便利な方法が用いられるので数学との違いに注意すること。これは、

    x = x + 1

    と言うように記述され、数学的には 0 = 1 となるので正しくないが、プログラミング言語においては、x の値に 1 を加えることを意味している。これは、後に出てくる繰り返しの構文と一緒に使用して、例えば、x が 0 から 100 までの整数であるような場合に順次 x の値を使用するような場合(y = f(x)というグラフの描画)などには必ず使用される大事な物である。これについては、for文やwhile文などが出てきた段階で改めて説明する。

  5. 関数

    ここでも問題になるのは数学的な関数との相違である。オブジェクト指向言語においては命令させるためのコマンドも実は「メソッド」に分類される物であるが、ある値をその命令に対して入力すると結果を表示するような動作を関数形式と呼ぶ。たとえば、putsというメソッドにある値を操作させる(与える値を「引数」と呼ぶ)と、引数に従った結果を出力することになる。また、出力させる対称などを指定しないで動作せせることが可能である。

  6. 標準入出力

    教科書p.18

    プログラムの実行結果は何も指定しない場合には画面に表示される。それは、画面が「標準出力」であるからである。この標準出力は自分で変更することも出来る。UNIX系のアプリケーションはフリーな形式のオープンソースとして発展してきた経緯から、それ自身で完結するような大がかりな商用アプリケーションの様な物は少なく、ちょっとした動作に限った小さな物が多く作られてきている。その結果、ある処理を行うのに複数の小さなプログラムを組み合わせて実行することが多く行われている。「リテラシー」教科書のp.193から詳しく説明があるが、リダイレクトやパイプという機能により、出力結果を画面に表示するのではなくファイルとして保存したり、出力結果にさらに処理を付け加えたりすることが可能になる。詳しいことはLinuxの操作に慣れてきてから再び実習することとするが「入門」教科書に書いてあることは良く読んでおくこと。

    教科書のp.18の中に

    $ cat

    のように実行してみるコマンドがあるが、それを実行するとターミナルの画面はキー入力を待ち受けている状態となり、そのままではもともとのcatコマンドを終了できない。終了するためにはctrl + Dと言う操作が必要になるので注意すること。

  7. 本日の課題

    • ファイルの実行属性

      適当なスクリプトに実行属性を与えてそれ自身で動作できるようにしてみること。

    • 標準入出力

      パイプやリダイレクトを使用した操作の実習を行ってみること。また、次の操作を行うと何が起こるか確認してみること。

      $ lsとして表示されたファイル名ではない何か別の新しいファイル名をhoge.txtとする。

      $ cat > hoge.txt

      としてみると、画面に何も表示されずキー入力待ち受け画面となる。そこで、

      puts "This is hoge.txt\n"

      としてEnterキーを押した後、ctrl + Dで終了する。次に、やはりターミナルで

      $ ruby hoge.txt

      とする。実行結果を確かめてみること。

  8. 宿題

    授業の終わり頃に次回までに提出する課題を発表するのでアナウンスに注意すること。

目次ページに戻る