情報科学概論(再履修)
2004.10.29

Back to index page



  1. 本日の作業内容

  2. 出席確認

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

    提出形式

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

  3. 変数

    次のような計算をしてみましょう.

    1から100までの連続する整数の和を求めなさい.ただし,1から n までの 数の和を求める次の公式を用いる.

    n       n (n + 1)
    Σ k  =  --------------
    k=1       2

    手で計算するのは面倒なので,Rubyを使って計算させます.四則演算の記号は後 で詳しく紹介しますが,+が足し算,*がかけ算,/が割算です.

    puts 100 * (100 + 1) / 2
    

    前回の授業で出力メソッドを学習しましたが,そこで登場した puts などの出力メソッドは,一般的に,その出力内容(指定するものを「引数」(ひきすう)と呼びます.)には,前回 のような文字だけでなく,このように「数式」も指定することができます.

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

    これを実行すると,答えの「5050」が得られます.では,次に1000までの和を求 めることにするとどうでしょうか.もちろん,先ほどのスクリプトの数値を変更 すれば簡単に計算できるのですが,100が2回出ているので2ヵ所修正する必要が あります.ちょっと面倒ですね.数学公式のように文字 (変数) を使った方が便 利では無いでしょうか?

    • 基本

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

      n = 100
      sum = n * (n + 1) / 2
      
      puts sum
      

      このように文字を使って計算を行うと,一ヶ所の修正で済みます.ここでは,1 行目の n というのと,2行目の sum が「変数」です.

      実際のプログ ラムにおいても,いろいろな場所で同じ数値や文字を何度も扱うことが多いので, 変数を使ってスクリプトを作成することが必須です.では,このスクリプトを見 ながら,重要な点について,いくつか確認していきましょう.

    • 名前の約束

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

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

    • 代入

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

      2行目は数式になっていますが,これも代入です.等号と代入で何が異なるのか, については,後ほど「自己代入」のときに改めて紹介します.

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

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

  4. 小テスト

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

    再履修クラス小テスト

  5. 宿題

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

    再履修クラス宿題

  6. 本日の用語

    • 変数

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

    • 引数

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

    • 予約語

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

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

    • 浮動小数点数

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

    • 定数

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


目次ページに戻る