他言語から短時間Ruby入門|Ruby基礎構文(変数、配列、メソッド、クラス、制御構文)まとめ

他言語から短時間Ruby入門|Ruby基礎構文(変数、配列、メソッド、クラス、制御構文)まとめ

1990年代のリリースから、世界市場でも多くの導入実績を作ってきたRuby。国内のみならず、海外の案件数も多いことから、今後スキルを付けていきたいと思っているエンジニアの方も多いのではないでしょうか。

今回はそんな挑戦意欲の高いまだRubyに触れていないエンジニアが、Rubyの基礎を短時間で理解できるように、主に構文理解に焦点を当てて、コンパクトにまとめました。

因みに筆者はJavaでのプログラミング経験は1年ほどで、キャリアとしてはインフラ寄りの人間ですが、今回記事を作成してみると割と理解しやすく、オブジェクト指向言語経験者なら、結構とっつきやすいのではという印象を持ちました。

それでは、各章ごとの説明に入ります。

Ruby入門①ー変数

Rubyには4つの変数と、1つの定数の概念があります。特徴はそのシンプルな宣言の仕方と言えます。

■ローカル変数

小文字または`_’で始まる変数。

スコープ:その変数が宣言されたブロック、メソッド定義、またはクラス/モジュール定義 の終りまで。

宣言方法は以下の通りかなりシンプルに書きます。

a = 1

■インスタンス変数

`@’で始まる変数。初期化していない状態で参照すると、nil(オブジェクトが存在しない場合の特殊値)が返されます。

スコープ:クラス内で全メソッドで共通して使用可能。インスタンスの中でのみ有効です。

変数名の前に「@」を付けて定義します。

@instance = "instance"

■クラス変数

`@@’で始まる変数。初期化していない状態で参照すると、nilが返されます。

スコープ:クラス内およびそこから作成されるインスタンスなどのオブジェクトから参照可能です。

@@class_var = "class_var"

■グローバル変数

$で始まる変数。初期化していない状態で参照すると、nilが返されます。

スコープ:メソッド、オブジェクトを越えて有効です。

$global = "global"

■定数

大文字で始まる変数。一度定義された定数に再び代入を行おうと すると警告メッセージが、定義されていない定数にアクセス すると例外NameErrorが発生します。

Const = "CONSTANT"

Ruby入門②ー配列

javaと基本は同じですが、配列は複数のオブジェクトへの参照をまとめて管理する際に使用します。複数のオブジェクトに対し、同じような処理をする場合に役立ちます。

配列にはArrayクラスのメソッドを使用します。

■配列の定義

配列の定義方法は以下の通りです。

meat = ["chicken", "pork", "beef"]scores = [55, 75, 100, 150, 0]
上記の場合、meat[0]は”chicken”、scores[4]は0を返します。

入れ子も可能です。

meat = [5, ["chicken", 250], ["pork", 400], ["beef", 300]]

■用途1:配列に要素を追加する。

定義した配列に要素を追加するには、

Array#<<メソッド、Array#unshiftメソッド、Array#pushメソッドを使用します。

<<とpushは配列の最後に、unshiftは先頭に追加を行います。

a = [1,2,3,4,5] #=> [1,2,3,4,5]a << 99 #=> [1,2,3,4,5,99]a.push(100) #=> [1,2,3,4,5,99,100]a.unshift(101) #=> [101,1,2,3,4,5,99,100]

■用途2:配列から指定条件を満たす要素を抽出

Array#selectは条件式に一致する要素のみを抽出した配列を返却します。条件式は多くの場合、ブロック構文で与えます。

a = [1, 2, 3, 4]p a.select{|x| x % 2 == 0} # => [2, 4]b = [['Taro', 'M'], ['Hanako', 'F'], ['Jiro', 'M'], ['Sachiko', 'F']]p b.select{|x| x[1]=='M'} # => [["Taro", "M"], ["Jiro", "M"]]
上記のほかに配列のソートや要素の結合などの機能があります。

Ruby入門③ーメソッド

他のオブジェクト指向言語と同様、Rubyにおけるメソッドは、クラスを元にオブジェクトを作成し、クラスの中に定義されたメソッドをオブジェクトから呼び出します。

■メソッドの定義

書式は以下の通りです。

def printHello print("Hello¥n")end
メソッドの定義は「def」から開始し「end」までとなります。defの横に記載されるprintHelloがメソッド名です。

■呼び出し

具体的な記述方法は以下の通りです。

def printHello(msg, name) print(msg "," name "¥n")endprintHello("Hello", "Ichiro")
この場合、「Hello,Ichiro」が出力されます。因みに上記は引数を付けた場合のメソッド呼び出しです。

Ruby入門④ークラス

クラスは物体(オブジェクト)を作成する元になる設計図で、作成するオブジェクトがどの様なものかを定義します。

クラスの定義は「class」から開始し「end」までとなります。

サンプルで表すと、以下の様な形になります。

class Car def initialize(carname) @name = carname end def dispName print(@name) endendcar = Car.new("prius")car.dispName # => prius
上記の「initialize」は初期化メソッドです。クラスに対してnewメソッドを呼び出すと、newメソッドはインスタンスを作成し、そのインスタンスに対してinitializeを呼び出します。

他にも、setterメソッドを使用することで、オブジェクトごとに異なる値を割り当てることも可能です。その場合は以下の様な記述となります。

class Car def setCarName(str) @name = str end def dispName() print(@name, "¥n") endendcar1 = Car.new()car1.setCarName("prius")car2 = Car.new()car2.setCarName("aqua")car1.dispName() # => priuscar2.dispName() # => aqua

Ruby入門⑤ー条件分岐

他のプログラム同様に必須となる条件分岐ですが、こちらではRubyで使用される頻度の多い「if」、「case」を使用した文章を紹介します。

■if文

一つの値に対し、条件に一致するかを判定します。例文は以下の通りです。

amari = 10 % 3if amari != 0 then print("割り切れませんでした¥n") print("余りは", amari, "です¥n")end# => 割り切れませんでした# => 余りは1です
「if」と「then」の間にある条件式に合致すれば、「then」から「end」までの処理を上から順に実行します。

また、if文とは逆に条件に一致しない場合の処理を記述する場合は、「unless」を使用します。

■case文

一つの値に対して複数の候補の中で一致するものを探す場合には「case」を使用します。例文は以下の通りです。

sum = 0product = "Apple"case productwhen "Melon" then sum = sum 500when "Apple" then sum = sum 150endprint("料金は", sum, "円です¥n") # => 料金は150円です。

Ruby入門⑥ー繰り返し処理

決まった条件を満たす間は同じ処理を繰り返し行う構文も同様に存在します。ここでは、「while」「for」を使った文構造を紹介します。

■while文

指定した条件式が真(true)の間、繰り返し処理を実行します。例文は以下の通りです。

num = 0while num < 2 do print("num = ", num) num = num 1endprint("End")# => num = 0# => num = 1# => End
whileで条件式の評価をし、真(true)である間、「do」から「end」までの処理を実行します。

また、Rubyにはwhileの逆としてuntil文が存在します。untilは条件式が偽(false)である間、処理を実行します。

■for文

あらかじめ定義したオブジェクトから順に値を取り出しながら実行します。例文は以下の通りです。

for num in 1..3 do print("num = ", num, "¥n")endprint("End")# => num = 1# => num = 2# => num = 3
上記の「1..3」は「範囲オブジェクト」と呼ばれるもので、指定された順に最初から最後まで値を取り出してくれます。

Ruby入門⑦ーモジュール

Rubyにはクラスと似た概念でモジュールが存在します。クラスと違い、インスタンス化能力がありませんがメソッドを格納することが可能です。

例文は以下の通りです。

module HeikinModule def heikin(x, y) kekka = (x

最後に

いかがだったでしょうか。

Javaの構文と比べると、全体的に定義が簡略化されており且つ、「end」など、英語表現が日本人になじみ深いものが多い印象ですね。

今回の記事を見て頂いた方の中で、これならわかると思っていただけた方は、Ruby入門書で勉強してみてはいかがでしょうか。

SBクリエイティブから出ている「たのしいRuby 第5版」がRuby入門書の定番でオススメです。

今回の記事のようなはもちろんのこと、「実践」と「テーマ」を切り分けた構成によってRubyの実践的な応用までがわかる一冊となっています。

Rubyに興味が出てきた方は、ぜひ 「たのしいRuby 第5版」で入門してみてください!