2005年05月15日
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}は、変数の置換に利用します。
一般的なスクリプト言語は記号が多用されるため"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" endnullではなく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 endfor文は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
基本的なライブラリは備えているので、オブジェクト指向スクリプト言語 Rubyのサイトでライブラリを確認しながら使用できると思います。今後Rubyが普及することで、CPANのようなライブラリポータルが生まれてくる事が予想されます。
追記(2004年07月07日) RAA-Ruby Application Archiveが存在します。
2cバイナリ・クロックRuby版
subversionレポジトリからanonymousユーザをanonymousパスワードでログインして各言語版の2cをダウンロードしてください。
Ruby入門・オブジェクト指向で説明します。
Rubyはインタプリタで開発が行えるのでデバックは標準出力にメッセージを出力することで比較的簡単に出来ると思います。
Ruby版PODの事です。別途インストールすることでドキュメント生成が可能です。
今回、数時間かけてRuby入門を書いてみました。Rubyは 純粋オブジェクト指向であることを掲げていますが、それ以上に言語習得のコストが非常に少ない事に驚かされました。。
初めて言語を学ぶ方は、すべての文法や概念を習得しなければならないため多くの時間が必要になります。ですが、ソフトウェア開発者としてHelloWorldレベルの技術習得が数時間で学べることは非常にメリットがあると思います。
今までのスクリプト言語のshやPerlもコンパイラ言語に対して学習がが容易でありましたが、Rubyはとは比較できないとおもいます。 またRubyはJava同様、インターネット時代に誕生した言語であるため、日本では、国際的に利用されているPythonなどを凌駕するのも時間の問題だと思われます。
個人的には、オブジェクト指向を学習する事とプログラム言語を学習する事は別のものだと思っています。Javaでオブジェクト指向を同時に学ぶことも業務に直結するため企業として有効ですが、このような言語を学ぶことで新たにオブジェクト指向とは何であるかを学んで欲しいとおもいます。また対とされるPythonを学習することで私が何故、習得性が高い事を上げたかを学ぶことが出来ると思いますので是非機会を見つけて挑戦してみてください。