JRuby のインストール
以下のサイトからJRubyのバイナリを取得します。
http://jruby.org/
現在のリリースは JRuby 1.4.0 となっており、Ruby 1.8.7 と互換性があります。今回は JRuby 1.4.0 Binary を使用します。jruby-bin-1.4.0.zip をダウンロードし、任意のディレクトリに解凍します。ここでは Windows を前提に C:\Program Files\jruby\jruby-1.4.0 とします。
環境変数の設定
環境変数を設定します。Winキー + Pause → 詳細設定 → 環境変数 にて以下を設定します。
JRUBY_HOME | C:\Program Files\jruby\jruby-1.4.0 |
PATH | %PATH%;%JRUBY_HOME%\bin |
Win + R → cmd と入力しコマンドプロンプトを立ち上げ以下を入力します。バージョン情報が出力されれば完了です。
> jruby -v jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (Java HotSpot(TM) Client VM 1.6.0_12) [x86-java]
Hello World
hello.rb というファイルを以下のように作成します。
puts "Hello World !!" # say hello
実行してみます。
> jruby hello.rb Hello World !!
Hello World が出力されました。rubyでは1行に1文ずつ書く限り文末のセミコロンは不要です。またコメントは#で始まり行末まで続きます。
Hello World の改良
hello.rb を以下のように改良します。
def say_hello(name) result = "hello #{name} !!" return result end puts say_hello("Thom")
Rubyではインデントを2つのスペースとすることが通例です。実行結果は以下となります。
>jruby hello.rb hello Thom !!
ここでは def キーワードにてメソッドを定義しています。メソッド名と括弧付きのメソッド引数を指定して定義します。上記ではメソッドの戻り値を明示的に return にて指定していますが、戻り値はメソッド内で最後に評価された式の値となるため以下のようにかいても同じです。
def say_hello(name) result = "hello #{name} !!" end
文字列リテラル
ダブルクオートで囲まれた文字列リテラルでは #{・・} で囲まれた式の展開が行われます。#{・・} 構文にはいくらでも複雑な式を指定できます。式が単純なグローバル変数・インスタンス変数・クラス変数の場合にはブレースを省略し、# のみとすることもできます。
def say_hello(name) $g_name = name # $g_name はグローバル変数 result = "hello #$g_name !!" end
文字列リテラルはシングルクオートで囲むこともできます。シングルクオートで定義した文字列リテラルは、前述の式展開やエスケープシーケンスの置換(改行が\nなど)が行われません。
Rubyの変数名
Rubyでは変数名の先頭文字で利用用途を表します。
種別 | 定義 | 例 |
---|---|---|
グローバル変数 | $で開始 | $debug |
インスタンス変数 | @で開始 | @name |
クラス変数 | @@で開始 | @@count |
その他に以下のルールがあります。
- クラス名・モジュール名・定数は先頭を大文字にする。
- ローカル変数・メソッドの引数・メソッド名は全て小文字または_で始める。
クラス
クラスの定義は class〜end キーワードにより行います。
class Hello attr_accessor :name def say_hello puts "Hello #@name !!" end end hello = Hello.new hello.name = "Thom" hello.say_hello
上記を実行すると、先程までと同じ「hello Thom !!」が出力されます。
attr_accessor はクラス属性へのアクセッサを定義するショートカットです。これによりname というインスタンス変数(@name)とそのアクセッサが自動的に定義されます。読み取り専用の「attr_reader」と書き込み専用の「attr_writer」もあります。
:name という構文は name という変数の Symbol オブジェクトを返す式です。:name は変数 name の名前を意味し、コロン無しは変数の値を意味することになります。
コンストラクタ
Ruby での標準のコンストラクタ呼び出しは new です。
hello = Hello.new
コンストラクタ呼び出しはオブジェクトのメモリ領域を確保してから、そのオブジェクトの initialize メソッドを呼び出します。initialize メソッドを定義した例を見てみます(属性として年齢も加えてみましょう)。
class Hello def initialize(name, age) @name = name @age = age end def say_hello puts "Hello #@name #@age !!" end end hello = Hello.new("Mick", 50) hello.say_hello
属性
前述の例では attr_accessor により属性へのアクセッサを定義しましたが、このショートカットを使用しないこともできます。
class Hello def name @name end def name=(name) @name = name end end hello = Hello.new hello.name = "King" # setter 呼び出し puts hello.name # getter 呼び出し
上記を実行すると、「King」と表示されます。getter としてnameというメソッドを定義しています。setter は等号で終わるメソッドを作成することで定義できます。
継承
継承はクラス名の後に < により親クラスを指定することで定義します。以下の例では HiHello クラスが Hello クラスを継承している例です。
class Hello attr_accessor :name def say_hello "Hello #@name !!" end end class HiHello < Hello def say_hello "Hi " + super end end hello = HiHello.new hello.name = "Thom" puts hello.say_hello
サブクラスではsuperキーワードにて親クラスの同じ名前のメソッドを呼び出すことができます。
blog1.mammb.com
に続く。