Rubyスクリプトの実行方法
Rubyスクリプトを実行するには,次の3通りの方法があります. まずは1番目の方法を覚えて下さい. 他の二つの方法は覚えていなくても実習には差し支えありませんが, 使えれば,より便利でしょう.
- ファイルに記述したスクリプトを実行する
もっとも一般的な方法です.実習でも,主にこの方法を利用します. たとえば,foo.rbに書かれたプログラムを実行する場合には次のようにします.$ ruby foo.rb[補足]
- コマンドラインにスクリプトを書いて実行する
短い処理は, わざわざファイルにかかなくても,rubyのオプションとして 処理内容を渡してやることで実行できます.$ ruby -e 'print "%x%x%x\n" % [250,235,215]'この例は,250,235,215を16進数で表示させてみたものです.
faebd7
- 対話的インタプリタirbを利用して実行する
ファイルに記述してからrubyで実行する方法と コマンドラインに記述して実行する方法の中間に位置する 方法と言えるかもしれません. irbという対話的なインタプリタを使えば,(メモリ機能付きの)電卓を 使うような感覚で処理を行うことができます. いろいろなことをちょっとテストしてみるのにも便利かもしれません.$ irb
irb(main):001:0> def p2(x)
irb(main):002:1> 1<<x
irb(main):003:1> end
=> nil
irb(main):004:0> p2(8)
=> 256
irb(main):005:0> p2(16)
=> 65536
irb(main):006:0> p2(24)
=> 16777216
irb(main):007:0> p2(32)
=> 4294967296
irb(main):008:0> exit
$
エラーへの対処
たとえば,次のようなプログラム(has_error.rb)を実行したとしましょう.
a = 1
c = a + b
print c,"\n"
has_error.rb:3: undefined local variable or method `b' for #<Object:0x2ac3ace0> (NameError)
ところでemacsで特定の行に移動する際に,いちいち先頭から行を数える必要はありません. 画面下のモード行の右の方に「L???」のような表示があるはずです. それが現在の行(カーソルのある行)を示しています. その表示を見ながら, 各種移動コマンドを使えば比較的楽に目的の行を発見できます. また,次のgoto-lineを使うことで指定した行に直接移動することもできます.
M-x goto-line | 指定した行にジャンプする |
このコマンドを実行するとミニバッファに次のように表示されますので, 行き先の行番号を指定します.
バグとデバグ
プログラムに潜むエラー(間違い)のことをコンピュータ業界の用語で, バグ(bug)といいます. またプログラムを修正してバグをなくすことを デバグ(debug)といいます.
コメントのつけ方
プログラムで「#」以降は,行末までコメントになります. 一般にコメントは,プログラムにメモを書き込むのに使います. 通常,プログラムを読むときに役立つであろう解説などを書いておきます. コメント部分は,プログラムの内容とは無関係なものと見なされますので, 何をどう書くのも自由です.
長いプログラムになると,コメントなしでは, その全体像を把握するのが困難になってきます. たとえプログラムを書いているときには,全て分かっているつもりでも, 一週間後には同じプログラムがまったく読めなくなっている自分を発見するのは, プログラマであれば,誰しも体験することです (だろうと思います.少なくとも日置はたっぷり体験しています). プログラムには,普段からマメにコメントを入れるようにすることを お奨めします.
#すべての行にコメントをつける必要はありません.
#何事も「中庸」が肝心です.
# aは1,2,3,4を要素とする配列(通常こんなコメントは不要でしょう)
a = [1,2,3,4] #行の途中からコメントを入れても構いません.
#次のようなものにはコメントを入れておかないと
#後で訳が分からなくなります.
## ちなみにこの例が意味不明だからといって恐れることはありません
## 実習では,おそらくこういったものを扱う必要はありません
LETTER='[A-Za-z]'
LETDIG='[0-9A-Za-z]'
LDH_STR='[0-9A-Za-z\-]+'
DOMAIN_LABEL="#{LETTER}(?:(?:#{LDH_STR})?#{LETDIG})?"
FQDN_REGEX="#{DOMAIN_LABEL}(?:\\.#{DOMAIN_LABEL})*"
POPCONFIG_REGEX=/^(\w+@)?(\d+>)?(#{FQDN_REGEX})(:\d+)?(%#{FQDN_REGEX})?(#\d+)?$/
さきほど述べた通り,コメント部分は,何を書いてもプログラムの動作には, 影響しません. したがって,プログラムの一部を一時的に無効にしたいときや, プログラムを書き換えたときに書き換える前の状態を残したいときなどに, その部分をコメントにして対処することもできます. ただし,これはあまりお行儀のよい方法とは言えません. コメントには本来の意味のコメントだけをつけるようにするべきです (とはいっても,そういうときにRubyではどう記述するのか日置は知りません).
プログラムに説明をつける方法として,「#」でコメント行を入れる他に 「=begin...=end」で行を括る方法もあります.
=begin
helloworld.rb:
このプログラムを実行すると世界に挨拶をします.
printを使ったこのプログラムはもっとも一般的な(平凡な)ものでしょう.
=end
print "Hello, World!"
また,「__END__」とだけ書いてある行があれば, そこでプログラムは終わりとみなされます. その行より後には何を書いてもエラーになりません. ところで,「__END__」以降は,単に無視されるのではなく, データ書く領域として利用することができます. この実習の環境設定パッケージmedia-setup.rbでもこれを利用しています.
スクリプトでの日本語の利用について
日本生まれのRubyは,日本語の処理をキチンとしてくれます. そこで,Rubyスクリプトでは,かなり自由に日本語を使うことができますが, 基本的には,日本語を使うのは次の2点に限ることをすすめます.
- コメント
- メッセージ("……"で括られた部分)
これら以外にも日本語を利用できるのですが,混乱のもとになりますので, これら以外では日本語の利用は避けた方が無難です.