情報科学概論(1年生)
2005.10.24

Back to index page



  1. 本日の作業内容

  2. 出席確認

    電子メールで出席確認をします.宛先など以下の情報を用いてメールを作成し, 出席申告してください.なお,キーワードは授業中に紹介します.

    提出形式

    宛先 justice@mag.shimane-u.ac.jp
    件名 AttendA10-24_ruby_s0540**
    AttendB10-24_ruby_s0540**
    (Aクラス)
    (Bクラス)
    本文 学生番号
    氏名
    キーワード
     
    (改行)
    (改行)
    キーワードは授業中に紹介
    注意 「件名」および「添付書類名」の**をそのままにしないで,必ず自分の学生番号 に修正して下さい.また,ABクラス別は指示にしたがって下さい.

  3. S@pphireのバグについて

    第1回目の授業で説明したように,S@pphireにはいくつか不具合があります.そ の中で特に問題になるのは,起動直後の何もスクリプトを入力していない状態で, 何かのファイルを開こうとしたときに,保存するかを確認するダイアローグが出 ることです.その場合には,決して保存を選択しないで下さい.新規に開こうと するファイルの中身をすべて消してしまいます.

  4. 変数

    初回の授業で紹介したスクリプトについて, 今回も考えます.まずは,スクリプトを見てみましょう.

    for i in 1..20
      printf "Iteration time: %d\n", i
      printf "Number: %d\n\n", i+100
    end
    

    このスクリプトの中に登場する文字 i が今回のテーマである「変数」 です. 前回の授業で出力メソッドを学習しましたが,そこで登場した puts などの出力メソッドは,一般的に,その出力内容(指定するものを「引数」(ひき すう)と呼びます.)には,文字だけでなく,3行目の i+100 のように,「数式」も指定することができます.

    以下のような例も試してみましょう.

    puts 12345 * 67890
    puts 12345 + 67890
    

    数式を作成するときには,上のように演算記号の両側に「スペース」を入れる習 慣をつけておくようにしましょう.スペースが無い場合には意味の変わる演算も あります.

    さて,最初のスクリプトに戻って,中身を見直してみましょう.出力の部分は printf 文です.printf が含まれる行は2行あります.そして, 各行には二重引用符( '' )で囲まれた文字列と,カンマで区切られ たもう一つの引数があります.その,最後に出てくる引数が出力したい変数もし くは計算式です.

    • 基本

      スクリプトを次のように修正します.

      for i in 1..20
        sum = i + 100
        printf "Iteration time: %d\n", i
        printf "Number: %d\n\n", sum
      end
      

      sum というよくわからないものが新たに登場しました.これは自分で 勝手に名前をつけた「変数」です.sum というのは英語で 「和」のことですので,何かの和を表す変数と言うことになります.そ して,その中身には等号の右側にあるように,繰り返しの中で順番に増 えて行くこれも変数の i に100を加えたものということにな ります.

      ところで,もともとのスクリプト自体にも変数が最初から使用されていたことに 気づいたでしょうか.1行目に唐突に i という文字が登場し ています.for は予約語として登録されているので,意味の あるものでしたが,この i も実は名前を自由につけても良い 変数でした.ただし,for を使う構文ではこの変数はとりあ えず必要ですが,大して重要な意味が無いため,簡単な名前をつけるこ とが大半です.i というのは後で出てくる整数の英語 Integer を連想させるための名前です.

    • 名前の約束

      変数は複数の文字を使って名前づけをするこ とが出来ます.ただし,数字で始まるものはダメですし,大文字で始まるもの は別の「定数」と呼ばれるものになります.さらに,途中にスペースを含むこ ともダメです.英語の小文字で始め,アルファベットと数字, アンダースコア (_) を使うのが良いでしょう.長いスクリプトや人に見せるた めのスクリプトでは,変数の名前によりその中身の意味がすぐにわかるものが 望ましいと言えます.上の例では, 「和」の英語「sum」であれば,それが意味するものが和であることも容易に想 像できます.ですので,それなりに意味を踏まえた名前づけが大事です.

      しかし,変数名には使ってはいけ ない「予約語」というものがあります.これは,これらの単語にはあらかじめ 意味のある動作が割り振られているので,変数名に使ってはいけないと言うも のです.Rubyの場合は リンク先のようなものがあります.

    • 代入

      スクリプトに戻りましょう.2行目は「代入」と呼ばれる操作です.数学では等号 (=) は両辺 が等しいと言う意味ですが,計算機言語においてはほぼ全ての場合において 右辺 の値を左辺に代入する操作になります.ここでは, sum という名前の変 数に i + 100 という式の計算結果の値を代入しています.

    • 変「数」と言っていますが,変数が扱えるのは「数値」だけではありません.前 回の授業で行った出力における「文字列」もある「値」として考えます.そのた め,自分が扱っている「値」は何なのか,把握しておかないと間違いの元になり ます.文字や数値を区別するために,変数には「型」(type)があります.

      C言語などでは,最初にユーザがその型を指定し てやらないといけないのですが,Rubyにおいてはあまり意識する必要はありませ ん.Rubyの方で,「よきに計らって」くれます.しかし,一応は意識しておかな いと重要な間違いに発展することがありますので,やはり注意は必要です.

      さて,型には次のようなものがあります.

      • 文字列 (String)

      • 整数 (Integer)

      • 浮動小数点数 (Floating point number)

      文字列は最初に見たように,文字のつながりです.これも「値」として意味があ ります.整数はたぶん分かるでしょうが,「浮動小数点数」は分かりに くい名前ですね.要は,「実数」(小数点以下の部分を含む数) です.「分数」 のような概念はありません.整数は普通に 1 とか 21 のよ うに表します.浮動小数点数は小数部分をつけて,1.0 12.3456 のようにして表現します.次のようにしてみると,整数と文字列 の型の違いの意味がわかるでしょうか?

      puts 1 + 1
      puts "1 + 1"
      

      上側の例は,二重引用符が無いので整数の演算が puts の引数になっ ていますが,下側は二重引用符があるので,その内側は数値ではなくただの文字 です.

      繰りかえしになりますが,最初のスクリプトの例や上の例のように,Rubyで数式を記述するときには演算子 の両側に一文字分空白を置くようにしましょう.二項演算子と単項演算子の処理 の違いから来る間違いを防ぐことができるので,うっかりミスを防ぐ助けになり ます.

      C言語と異なって変数の型がRubyにおいては自在に変更可能であることが次の 例で分かるでしょう.

      a = 1
      puts a
      
      a = 2.0
      puts a
      
      a = "abc"
      puts a
      

      整数型の演算において注意しなければならないことは割算(除算)における考え方 です.次回に詳しく紹介しますが,次の例を試してみて,自分で動作を確認し てください.

      puts 1 / 3
      puts 1.0 / 3
      puts 1 / 3.0
      

    • 定数他

      変数は名前のごとく変化する数ですので,スクリプトが動作する途中で値が変わ ることもよくあります.しかし,最初に決めたらそれは変更しない,という値も 必要になることがあります.そのような場合に「定数」を用います.これは,名 前をアルファベットの大文字で始めることで定数として「定義」出来ます.定数 の値を変更しようとすると,スクリプトの実行時にメッセージが表示されます.

      CONSTANT = 1
      CONSTANT = 2
      
      puts CONSTANT
      

      を試してみると,

      tmp.rb:2: warning: already initialized constant CONSTANT
      

      が出てきます.残念ながらメッセージは英語なのですが,難しくは無いのでお分 かりになるでしょう.2行目に問題があることが最初に示され,値を変更しよう とするときに定数であることを指摘されています.

      ただし,結果の方は一応変更後の値である「2」が出力されています.

      また,変数には実は「グローバル変数」や「インスタンス変数」など,いろいろな種類 があります.しかし,この授業はそのような特殊な変数は扱いません.「ローカル変 数」という変数を上では紹介して利用していますが,それをここでは変数と呼ん で,それだけを扱うことにします.

  5. 演習

    • 乱数発生

      プログラムの中ではランダムに変わる数,乱数,をよく使用します.乱数を発生さ せて,それを変数として使う練習をしてみましょう.乱数は次のようなメソッド で発生させます.

      rand(10)
      

      上の例は0から9までの整数を発生させます.0からカッコの中の数よりも1少 ない数をランダムに生成するのかこのメソッド rand です.これを使っ て,実行するたびに値の変わる変数を作ってみましょう.

           解答例

    • 値の入れ換え

      2つの変数 var1 var2 はそれぞれ値 "Arc_angel" "Minelva" を持っているとします.それらの値を入れ換えるスク リプトを作成しましょう.

           解答例

      設問で変数の値の両側に二重引用符がついているのは,文字列型であることを示 すためなので,値自体に二重引用符がついているのではありません.

    • 値の増加(インクリメント)

      変数 num に任意の数値が与えられているとします.その変数の値を1 増やすスクリプトを作成しましょう.

           解答例

  6. 小テスト

    授業の終わりに小テストを実施します.アナウンスに注意していて下さい.

    Aクラス小テスト
    Bクラス小テスト

  7. 宿題

    宿題に関する案内が授業の終わりに紹介されます.注意にしたがって提出してく ださい.

    Aクラス宿題
    Bクラス宿題

  8. 本日の用語

    • 変数

      何かの値を納めておくもの.厳密に言えばRubyでは値を指し示すものが変数の名 前ですが,C言語などの旧来の箱モデルでも最初のうちは問題ありません.

    • 引数

      メソッドや関数に渡す値や名前.関数のf(x)であれば,その xに相当するもの.ただし,プログラミングではもっと他に使う方 法があるので,注意が必要.

    • 予約語

      プログラミング言語によってあらかじめ使うことが予定されている単語.これら は勝手に変数名に利用することはできません.

    • 変数の値が文字列,整数,浮動小数点数など異なる場合にそれらを区別するもの.

    • 浮動小数点数

      小数点を持つ数値のこと.小数点の位置が小数部の桁数によって変化するので, この名前がついています.

    • 定数

      プログラムの中で一度決めたら値の変化しないもの.


目次ページに戻る