CACAnet福岡フリースクールat 久留米:2001年6月6日
発表者:佐塚 秀人
最終修正:2001年6月13日
第1回CACAnet福岡フリースクールat久留米
Ruby入門(1)
1. オブジェクト指向スクリプト言語Rubyの概要と特徴
1.1 Rubyの概要
・PerlやPythonと同様に分類されるスクリプト言語
・オブジェクト指向言語の特徴を生かしたスクリプト言語
・日本で開発され(作者:まつもとゆきひろ氏)、世界に広まっている
・多くのライブラリ(インターフェース)が提供されている
1.2 Rubyの特徴
※古きよきマイコン時代のBasicのような感覚で何でも気軽プログラムできる言語処理系
・Perlのスクリプト言語としての使いやすさ(正規表現,便利なプログラム表記法)
・Scheme(Lispの方言)の柔軟性・拡張性・抽象能力
・オブジェクト指向によるモジュラリティの高さ,ライブラリ(部品)の使いやすさ
2. インストールと実行
2.1ソース・バイナリの所在
安定版 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: HTMLにRubyを埋め込むための処理系
・mod_ruby: Apache WEBサーバへの組み込みモジュール
・http://www.ruby-lang.org/ja/raa.htmlに各種アーカイブあり
2.3実行
(1) プログラムを引き数として実行
$ ruby xxx.rb # xxx.rbはRubyプログラムソース
(2) ソースの先頭行でコマンドを指定して実行(Unixの場合)
[1]ソースの先頭行 #!/usr/local/bin/ruby または #!/usr/bin/env rubyを挿入
[2]実行許可を与える $ chmod +x xxx.rb
[3]実行 $ xxx.rb
その他:mod_rubyによるApacheへの埋め込みプログラムとして実行
(3) 対話型インタプリタirb(Rubyのアプリケーションの1つ)の利用
プロンプトに従って一行つづ実行可能
3. Rubyプログラミング実践
※オンライン情報
・本家Rubyドキュメントページ – 必ずしもわかりやすい形にはなっていないのが残念
http://www.ruby-lang.org/ja/doc/html
・Programming Ruby The Pragmatic Programmer’s Guide – 英語だけどGood
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の特異クラスを定義していることでもある。