CACAnet福岡フリースクールat 久留米:2001年6月6日

発表者:佐塚 秀人

最終修正:2001年6月13日


 

第1回CACAnet福岡フリースクールat久留米

 

Ruby入門(1)

1. オブジェクト指向スクリプト言語Rubyの概要と特徴

1.1 Rubyの概要

PerlPythonと同様に分類されるスクリプト言語

・オブジェクト指向言語の特徴を生かしたスクリプト言語

・日本で開発され(作者:まつもとゆきひろ氏)、世界に広まっている

・多くのライブラリ(インターフェース)が提供されている

1.2 Rubyの特徴

※古きよきマイコン時代のBasicのような感覚で何でも気軽プログラムできる言語処理系

Perlのスクリプト言語としての使いやすさ(正規表現,便利なプログラム表記法)

Scheme(Lispの方言)の柔軟性・拡張性・抽象能力

・オブジェクト指向によるモジュラリティの高さ,ライブラリ(部品)の使いやすさ

 

2. インストールと実行

2.1ソース・バイナリの所在

http://www.ruby-lang.org/

安定版      1.6.4 (6/6現在)

開発版      1.7.1 (6/6現在)

 

2.2インストール

UNIXの場合:     (1) ruby-1.6.x.tar.gz configure make make install

                              (2) バイナリパッケージのインストールex. linux: rpm

Windowsの場合: (1) cygwin環境の利用(Unix中心に使う場合はこちら)

                              (2) mswin32版バイナリ(Windows環境で利用する場合はこちら)

その他:                eruby: HTMLRubyを埋め込むための処理系

                              mod_ruby: Apache WEBサーバへの組み込みモジュール

                              http://www.ruby-lang.org/ja/raa.htmlに各種アーカイブあり

 

2.3実行

(1) プログラムを引き数として実行

$ ruby xxx.rb   # xxx.rbRubyプログラムソース

(2) ソースの先頭行でコマンドを指定して実行(Unixの場合)

[1]ソースの先頭行       #!/usr/local/bin/ruby または #!/usr/bin/env rubyを挿入

[2]実行許可を与える    $ chmod +x xxx.rb

[3]実行                         $ xxx.rb

その他:mod_rubyによるApacheへの埋め込みプログラムとして実行

(3) 対話型インタプリタirbRubyのアプリケーションの1つ)の利用

     プロンプトに従って一行つづ実行可能

 

3. Rubyプログラミング実践

※オンライン情報

・本家Rubyドキュメントページ 必ずしもわかりやすい形にはなっていないのが残念

http://www.ruby-lang.org/ja/doc/html

Programming Ruby  The Pragmatic Programmer’s Guide – 英語だけどGood

http://www.rubycentral.com/

google等の検索エンジンで

※書籍情報

まつもとゆきひろ/石塚圭樹共著「オブジェクト指向スクリプト言語Ruby」アスキー

              http://www.ascii.co.jp/books/detail/4-7561/4-7561-3254-5.html

原信一郎著,まつもとゆきひろ監修「Rubyプログラミング入門」オーム社

              http://www.ohmsha.co.jp/data/books/contents/4-274-06385-2.htm

まつもとゆきひろ著「Rubyデスクトップリファレンス」オライリージャパン

              http://www.oreilly.co.jp/BOOK/rubydkr/

三並慶佐著「RubyによるCGIプログラミング」エスシーシー

              http://www.rubycgi.org/ruby_cgi_book/

その他256本など

 

3.1基本制御構造

(1)文の区切り

・改行が文の区切り

・文が完結しない場合は次の行に継続、またはバックスラッシュで改行をエスケープ

(2)基本制御構造

・代入文

・自己代入文

・条件文            if条件式 [then] … [elsif] … [else] … end

                          … if 条件式

                          unless … [then] …[elsif] … [else] … end

                          … unless条件式

                          case … when … [else] … end

・繰り返し文     while … end

                          until … end

                          for変数 inオブジェクト … end

                            #オブジェクトeach do |変数| … endとほぼ同じ

                          iterator(イテレータ:繰り返しを抽象化したもの)の利用

            ※ループ脱出  break, next, redo

(3)定義呼び出し

・メソッド(手続き)呼び出し(オブジェクトに定義されているメソッドを呼び出す)

                          [オブジェクト.]メソッド(引数, …)    # ( )は省略可

                          オブジェクト::メソッド(引数, …)

・イテレータ呼び出し(ルールに従って後のブロックを呼び出す)

                          イテレータdo |変数[,…]| … end

                          イテレータ { |変数[,…]| … end

 

3.2変数のスコープ・エクステント

Rubyのデータはすべてオブジェクト(データ内に処理手続きを含む)

         オブジェクト.methodsでメソッドを知ることができる

・変数には型はないためすべてのオブジェクトを代入可

・変数はスコープ・エクステントがある

         ローカル変数(小文字で始まる)     ブロック内で一時的に有効

         グローバル変数($で始まる)          プログラム全体で有効

         インスタンス変数(@で始まる)      インスタンスが存在する間内部で有効

         クラス変数(@@で始まる)              クラスに割り付けられた編集

         定数(大文字で始まる)                   一度だけ代入可(場所に制限あり)

         擬似変数(self, true, false, nil, … 特別な意味(副作用)をもつ擬似変数

 

3.3クラス・モジュールの組み込みと利用

クラス:           オブジェクトの種類

                         オブジェクトの定義

モジュール:    名前空間の提供

                         機能集約(関数等の機能をまとめる)

                         属性集約(変数やメソッドをクラスへの機能追加する:Mix-in

(1)クラス・モジュールの利用(ファイルの読み込み)

       require ‘クラス・モジュールファイル名

       load ‘クラス・モジュールファイル名

(2)モジュールの組み込み(mix-in

       includeモジュール名

4. Rubyにおけるオブジェクト指向プログラミング

4.1 クラス、モジュール

※オブジェクト指向プログラミングとは

    情報隠蔽     カプセル化:データ+データに対する処理手段)

    動的結合     オブジェクト主体で適切な処理を選択し実行する(ポリモーフィズム)

    継承         あるクラスの機能を継承するクラスを定義できる

(1) クラス − オブジェクトの性質(データ構造、手続き)の定義体

class クラス名 [ < スーパークラス ]

クラスの定義文

end

クラス定義の実体

インスタンス変数

インスタンスメソッド

クラス変数

クラスメソッド

(2) クラスインスタンス − クラスから生成された実体(算体)

    クラスの生成

           クラス名.new(引数,…)

※実はクラス自体がClassのインスタンスであり、newはClassのインスタンスメソッドとなっている。

(3) モジュール − インスタンスをもてない定義の集合

・includeでクラス(またはインスタンス)組み込んで使われる

・名前空間を提供する

Gtk::Button

File::LOCK_EX

 

4.2 メソッド

           def メソッド名(仮引数, …)

                手続き

           end

(1)インスタンスメソッド

インスタンスの機能を定義する

(2)クラスメソッド

クラスの機能を定義する(new, start, open, …)

※クラスメソッドはクラスのインスタンスの特異メソッドである

        def クラス名.メソッド名(引数, …)

             手続き

        end

 

4.3 継承

    仕様の継承       共通な仕様(API)をもったオブジェクト群の定義

                     C++, Javaなど大規模なライブラリで重視

    実装の継承       具体的的な機能(プログラム)の共有

                     プログラミング作業の効率化・コードの小型化

    多重継承の問題   Rubyは単純継承mix-inで対応

 

           class クラス名 < スーパークラス名

                クラス定義

           end

 

4.4特異メソッド、特異クラス

※Rubyのオブジェクト指向の特徴

特異メソッド − 既に生成されたインスタンスにメソッドを追加定義する

         defオブジェクト.メソッド(引数, …)

              メソッド定義

         end

特異クラス − 特異メソッドをまとめて定義する

           class << オブジェクト

                クラス定義

           end

※クラス定義は実はClassクラスのインスタンスに、特異メソッドを定義することであり、Classの特異クラスを定義していることでもある。