<<戻る

2005年05月15日

Ruby入門

目次

はじめに

 

 

目次へ戻る

動作環境

 

 

目次へ戻る

対象者

 

 

目次へ戻る

Rubyとは?

 

 

目次へ戻る

環境構築

 

 

目次へ戻る

最終目的

 Ruby版の2cバイナリクロックを作成します。私はこの記事を書くまでにGASアセンブラ入門、FORTRAN、COBOL、Perl、Java、shなどのソフトウェア開発の学習と仕事をしてきました。Rubyの純粋なオブジェクト指向と業務で多く使われているJava言語の生産性を意識して学習してみたいと思います。

 

目次へ戻る

コメント

# シャープがコメントです。

 

目次へ戻る

コーディング規約

多分ないでしょう。

 

目次へ戻る

基本構造

#!/usr/bin/ruby

上記を1行目に記述しなければなりません。

 

目次へ戻る

ハローワールド

hello.rb

#!/usr/bin/ruby
# ハローワールドサンプル
print "Hello World\n"  

$ruby hello.rb

 

目次へ戻る

データ形式

文字列

a = "hoge"
b=a
c = "\t\n test #{b} \\"
d = 'not expand'

数値

aa = 1

目次へ戻る

演算子

C言語と多くの点で同様です。Ruby独自の演算子もありますが、基本的な部分を学習してから調べてみてください。

 

目次へ戻る

配列

Rubyではすべてがオブジェクト型なので、配列とは言わずArrayオブジェクトといいます。

#!/usr/bin/ruby
aryObject = ["ruby","java","python"]
print aryObject[0]

ArrayオブジェクトはJavaでのVecterなので当然動的に可変が可能です。

#!/usr/bin/ruby
aryObject = ["ruby","java","python"]
print aryObject[0]
aryObject[5] = "Smalltalk\n"
print aryObject[5]

$ ruby array.rb
rubySmalltalk

またIteratorパターンを採用しています。

#!/usr/bin/ruby
aryObject = ["ruby","java","python"]
print aryObject[0]
aryObject[4] = "C#\n"
aryObject[5] = "Smalltalk\n"
print aryObject[5]

# Iterator Pattern
aryObject.each{ |i|
        print i , "\n"
}

 
目次へ戻る

ハッシュ

Perlの連想配列、Javaのjava.util.Mapと同様な機能としてハッシュがあります。

#!/usr/bin/ruby
lang = {
"java"=>"James Gosling",
"Ruby"=>"Yukihiro Matsumoto" }
print lang["java"]

キー一覧、値一覧、要素一覧を取得できます。

#!/usr/bin/ruby
lang = {
        "java"=>"James Gosling",
        "Ruby"=>"Yukihiro Matsumoto" }

print "*****get keys\n"
lang.each_key { |key|
        print key,"\n"
}
print "*****get values\n"
lang.each_value { |value|
        print value,"\n"
}
print "*****get elements\n"
lang.each { |key,value|
        print "#{key}=#{value}\n"
}
 

#{variable}は、変数の置換に利用します。

 

目次へ戻る

I/O

一般的なスクリプト言語は記号が多用されるため"Write Only"と呼ばれます。これは一度コーディングしたプログラムの可読性が悪いためです。このような例を踏まえてRubyは非常にシンプルな標準入出力処理の記述が可能です。

#!/usr/bin/ruby
input_data = STDIN.gets
input_data = input_data.chomp
print input_data

すべてがオブジェクトということなので推測ですが、STDINはIO系のオブジェクトを継承してgets(getString)で標準入力からデータを取得します。
.chompはPerlでもおなじみの関数なので改行を削除するメソッドと推測できます。

 

目次へ戻る

制御構造

分岐

#!/usr/bin/ruby
data = 100
if data == 100
        print "#{data}\n"
elsif data <= 100
        print "aaa"
else
        print "bbb"
end

if true == true
        print "true\n"
end

empty=
if empty == nil
        print "nil\n"
end
 

nullではなくnilが不定を意味するのでこれはJavaなど違います。どの言語から参考にしたのでしょう?各自調査してみてください。

 

反復

#!/usr/bin/ruby

strAry = ["Java","Ruby","Python"]
cnt = 0
while cnt < strAry.length
        print strAry[cnt]
        cnt += 1
end

cnt = 0

for cnt in strAry
        print cnt
end

size=0
while true
        size += 1
        if size == 100
                print size
        break;
    end
end
 

for文はJava,C/C++とは異なりBourne Shellのfor文と同じ書き方です。データに対してIterateします。

 

目次へ戻る

正規表現

Perlと同様、正規表現用の式 =~ が存在します。

#!/usr/bin/ruby
a="happy ruby"
if /^happy/=~ a
        print a
end

 
目次へ戻る

関数(メソッド)

メソッドの定義はRuby入門・オブジェクト指向で説明します。

サンプル

def 関数名 [( [引数...] ) ]
処理
end

#!/usr/bin/ruby
def hello_method
    print "hello method\n"
end

hello_method
 
目次へ戻る

API

基本的なライブラリは備えているので、オブジェクト指向スクリプト言語 Rubyのサイトでライブラリを確認しながら使用できると思います。今後Rubyが普及することで、CPANのようなライブラリポータルが生まれてくる事が予想されます。

追記(2004年07月07日) RAA-Ruby Application Archiveが存在します。

 

目次へ戻る

その他

宝石たちの語らい

2cバイナリ・クロックRuby版

subversionレポジトリからanonymousユーザをanonymousパスワードでログインして各言語版の2cをダウンロードしてください。

 

目次へ戻る

オブジェクト指向

Ruby入門・オブジェクト指向で説明します。

 

目次へ戻る

デバック

Rubyはインタプリタで開発が行えるのでデバックは標準出力にメッセージを出力することで比較的簡単に出来ると思います。

 

目次へ戻る

RD

Ruby版PODの事です。別途インストールすることでドキュメント生成が可能です。

 

目次へ戻る

最後に

 今回、数時間かけてRuby入門を書いてみました。Rubyは 純粋オブジェクト指向であることを掲げていますが、それ以上に言語習得のコストが非常に少ない事に驚かされました。。

初めて言語を学ぶ方は、すべての文法や概念を習得しなければならないため多くの時間が必要になります。ですが、ソフトウェア開発者としてHelloWorldレベルの技術習得が数時間で学べることは非常にメリットがあると思います。

今までのスクリプト言語のshやPerlもコンパイラ言語に対して学習がが容易でありましたが、Rubyはとは比較できないとおもいます。 またRubyはJava同様、インターネット時代に誕生した言語であるため、日本では、国際的に利用されているPythonなどを凌駕するのも時間の問題だと思われます。

個人的には、オブジェクト指向を学習する事とプログラム言語を学習する事は別のものだと思っています。Javaでオブジェクト指向を同時に学ぶことも業務に直結するため企業として有効ですが、このような言語を学ぶことで新たにオブジェクト指向とは何であるかを学んで欲しいとおもいます。また対とされるPythonを学習することで私が何故、習得性が高い事を上げたかを学ぶことが出来ると思いますので是非機会を見つけて挑戦してみてください。

目次へ戻る

参考資料

オブジェクト指向スクリプト言語 Ruby

目次へ戻る