[CG実習 >  Rubyによるプログラミングの基礎 >  Rubyでプログラムを書きはじめる前に]

Rubyでプログラムを書きはじめる前に

Rubyスクリプトの実行方法

Rubyスクリプトを実行するには,次の3通りの方法があります. まずは1番目の方法を覚えて下さい. 他の二つの方法は覚えていなくても実習には差し支えありませんが, 使えれば,より便利でしょう.

  1. ファイルに記述したスクリプトを実行する
    もっとも一般的な方法です.実習でも,主にこの方法を利用します. たとえば,foo.rbに書かれたプログラムを実行する場合には次のようにします.
    $ ruby  foo.rb
    [補足]

  2. コマンドラインにスクリプトを書いて実行する
    短い処理は, わざわざファイルにかかなくても,rubyのオプションとして 処理内容を渡してやることで実行できます.
    $ ruby  -e 'print "%x%x%x\n" % [250,235,215]' 
    faebd7
    この例は,250,235,215を16進数で表示させてみたものです.

  3. 対話的インタプリタ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"
すると,次のように表示されるはずです.
$ ruby  has_error.rb
has_error.rb:3: undefined local variable or method `b' for #<Object:0x2ac3ace0> (NameError)
これは,プログラムにエラー(間違い)があることを意味しています. 詳細は省きますが,先頭の「has_error.rb:3:」は, ファイルhas_error.rbの第3行でエラーが発生したことを意味しています. このような場合には,ファイルの該当する行をみて, そこで何がエラーとなったのかを判断してプログラムの修正を行う必要があります. なお,エラーの原因は,必ずしもエラーが発生した行にあるとは限りません.

ところでemacsで特定の行に移動する際に,いちいち先頭から行を数える必要はありません. 画面下のモード行の右の方に「L???」のような表示があるはずです. それが現在の行(カーソルのある行)を示しています. その表示を見ながら, 各種移動コマンドを使えば比較的楽に目的の行を発見できます. また,次のgoto-lineを使うことで指定した行に直接移動することもできます.

M-x  goto-line 指定した行にジャンプする

このコマンドを実行するとミニバッファに次のように表示されますので, 行き先の行番号を指定します.

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!"

「=begin」から「=end」までの行はコメントとみなされます. この例のように,「=begin」と「=end」は必ず行頭に書きます.

また,「__END__」とだけ書いてある行があれば, そこでプログラムは終わりとみなされます. その行より後には何を書いてもエラーになりません. ところで,「__END__」以降は,単に無視されるのではなく, データ書く領域として利用することができます. この実習の環境設定パッケージmedia-setup.rbでもこれを利用しています.

スクリプトでの日本語の利用について

日本生まれのRubyは,日本語の処理をキチンとしてくれます. そこで,Rubyスクリプトでは,かなり自由に日本語を使うことができますが, 基本的には,日本語を使うのは次の2点に限ることをすすめます.

これら以外にも日本語を利用できるのですが,混乱のもとになりますので, これら以外では日本語の利用は避けた方が無難です.

[CG実習 >  Rubyによるプログラミングの基礎 >  Rubyスクリプトを書きはじめる前に]