Rubyの文法(1) 型の宣言

Rubyの文法を学ぶために、Railsコンソールを起動しましょう。
irbRailsライブラリを読み込みつつ立ち上げるので、
データベースへのアクセスも簡単に実行できます。


Windowsで実行する場合はirbと同様に日本語が正しく表示されないなど
難点もありますが、文法を理解する上ではあまり問題とならないでしょう。


ちなみにirbとはInteractive Rubyの略でrubyの式をコマンドラインから、
簡単に入力/実行できるツールです。

コマンド プロンプト

C:\Ruby>irb --noecho
irb(main):001:0> a=1
irb(main):002:0> b=2
irb(main):003:0> p a+b
3
irb(main):004:0>exit


1.Railsコンソールの起動には2つの方法があります。
(1)コマンドラインからの起動
対象のプロジェクトから立ち上げます。

コマンド プロンプト

D:\Rails_Project\appli000> ruby script/console
Loading development environment (Rails 2.3.4)
>>

>> exit
exit




(2)NetBeansからの起動
対象のプロジェクト上で右クリックして[Railsコンソール]を選択します。
    


    


2.型の宣言

前提条件として対象プロジェクトappli000は、
データベース上にAtomsというテーブルを持っていて、
すでにデータが数件入っているとします。

では次の命令を実行してみましょう。
変数aの内容を出力しなさいという命令です。

Railsコンソール

>> p a
NameError: undefined local variable or method 'a' for ...
from (irb):1



ローカル変数が未定義かメソッドがないというエラーですね。
命令を少し変えて実行してみましょう。

Railsコンソール

>> p a="ABC"
"ABC"

aの内容がABCという文字列であると出力しました。
いきなり変数aを使ってもaに"ABC"を代入する行為によって変数aの型は文字列であると定義されます。
これがRubyの文法です。


整数の計算式では整数が、浮動小数点数の計算式では浮動小数点数が定義されます。

Railsコンソール

>> p a=1/3
0
>> p a=1.0/3.0
0.333333333333333

型が異なるときの演算では対応が取れなければ実行されません。

Railsコンソール

>> p a="ABC"+"XYZ"
"ABCXYZ"
>> p a=1+0.2345
1.2345
>> p a="ABC"+1.0
TypeError: can't convert Float into String
from (irb):4:in `+'
from (irb):4

型が確定している変数により定義されると、その型を継承します。

Railsコンソール

>> a="ABC"
>> b=a
>> p b
"ABC"


3.配列
[]を使うと配列を定義することができます。

Railsコンソール

>> p a=["Alpha", "Beta", "Gamma"]
["Alpha", "Beta", "Gamma"]
>> p a[0]
"Alpha"
>> p a[1]
"Beta"
>> p a[2]
"Gamma"
>> p a[3]
nil

配列要素はゼロから始まります。
未定義の領域はnil(一般的なヌルのことでニルと云います)となります。

定義されている要素数を得たいときはメソッドcountを使います。
個数が帰ってくるので注意してください。

Railsコンソール

>> p a.count
3

この配列に要素を追加する場合は、次のようにします。

Railsコンソール

>> a<<"Delta"
>> p a
["Alpha", "Beta", "Gamma", "Delta"]
>> a<<["X", "Y", "Z"]
>> p a
["Alpha", "Beta", "Gamma", "Delta", ["X", "Y", "Y"]]
>> p a[4][1]
"Y"

このように要素の型が異なっていても構いませんが、
設計者はこの構造を理解していなければならず、
よい方法ではありません。

Railsコンソール

>> p a[4].count
3
>> p a[0].count
NoMethodError: undefined method 'count' for 1:Fixnum
from (irb):30
from :0

もしこのような構造にしたいのであれば次のようにするのがよいでしょう。

Railsコンソール

>> a=[["Alpha"], ["Beta"], ["gamma"], ["Delta"], ["X", "Y", "Z"]]
>> p a[0].count
1
>> p a[4].count
3

4.ハッシュ

データをパラメータとして受け渡すようなときによく使います。
次の例は、rowが15でcolが20を示しています。

Railsコンソール

>> a={:row=>15, :col=>20}
>> p a[:row]
15
>> p a[:col]
20

しかし、なんといっても利用価値が高いのは
テーブルに格納してあるデータを取得するときです。
次の例は、Atomテーブルから全件取得する命令です。

Railsコンソール

>> a=Atom.find(:all)
>> p a
[#,
#,
#,
#,
#,
#,
#,
#,
#,
#,
#,
#,
#,
#,
#]
>> p a.count
15
>> p a[1]
[#]
>> p a[1][:element]
"Silver"

このようにデータベースのスキーマを読んで、それぞれの項目名と実データを受け渡してくれます。

構造的には、次のように解釈します。


[{:id=>1, :symbol=>"Ac", :element=>"Actinium", :japanese=>"", :number=>89,
:created_at=>"2009-11-17 04:57:54", :updated_at=>"2009-11-17 04:57:54"},
{:id=>2, :symbol=>"Ag", :element=>"Sliver", :japanese=>"", :number=>47,
:created_at=>"2009-11-17 04:58:18", :updated_at=>"2009-11-17 04:58:18"},

{:id=>15, :symbol=>"Br", :element=>"Bromine", :japanese=>"", :number=>35,
:created_at=>"2009-11-17 05:05:21", :updated_at=>"2009-11-17 05:05:21"}]