まえがき
筆者はRuby初心者ですが、習得した基礎内容を共有したいと思います。
これからRubyを始める人への手助けになれば嬉しいです。
Rubyとは
Rubyとは、まつもとゆきひろ氏により開発されたオブジェクト指向スクリプト言語です
一般にWEBアプリケーションの「システム」をつくるために用いられています。
出力
puts "○○"というコードを書くと、putsの後の○○という文字がコンソールに出力されます。
puts "Hello World"
数値と計算
プログラミングでは、数値を扱うこともできます。
数値は文字列と違いクォーテーションで囲みません。
通常の算数のように足し算、引き算、掛け算、割り算を行うことができます。
puts 37 #数値
puts 2 + 9 #足し算
puts 2 - 9 #引き算
puts 13 * 9 #掛け算
puts 32 / 8 #割り算
puts 18 % 5 #割り算の余り
文字列の連結
文字列同士に「+」記号を用いると、文字列同士を連結することができます。
puts "プログラミング言語は" + "Rubyです"
変数
変数は「変数名 = 値」で定義します。
「=」は「等しい」という意味ではありません。
プログラミングの「=」は「左の変数に右の値を入れる」という意味でこれを代入といいます。
name = "ジョン"
number = 3
変数名のルール
変数名は自由に決めることができますが、Rubyではいくつか命名のルールがあります。
2語以上を組み合わせた変数名をつけるときは、アンダーバー(_)を用いるという習慣があります。
name = "ジョン" #○
user_name = "ジョン" #○
1name = "ジョン" #☓数字開始
namae = "ジョン" #△ローマ字
名前 = "ジョン" #△日本語
変数を文字列に含める
ダブルクォート(")で囲まれた文字列式、コマンド文 字列および正規表現の中では#{式}という形式で式 の内容(を文字列化したもの)を埋め込むことができます
これを「式展開」と呼びます。
length = 9
width = 8
area = length * width
puts "面積は#{area}です"
式展開の注意点
シングルクォーテーションの場合は、式展開が行われず、そのまま文字列として出力されてしまうので注意しましょう。
name = "ジョン"
puts '私は#{name}です' #私は#{name}です と出力される
比較演算子
条件式に使った「>」は比較演算子と呼ばれる、大小比較の記号です。
「a < b」は、aの方がbより小さいときtrue, 大きいときfalseになります。
また「a <= b」とすると、aの方がbより小さいまたは等しい(つまりb以下)のときtrueになります。これは数学で用いる「≦」という記号と似ています。
「a == b」はaとbが等しければtrue、等しくなければfalseになります。
「a != b」はその逆です。
a < b #aの方がbより小さい時true
a <= b #aの方が小さいまたは等しいときtrue
a > b #aの方が大きいときtrue
a >= b #aの方が大きいまたは等しいときtrue
a == b #aとbが等しいときtrue
a != b #aとbが異なるときfalse
条件分岐
「score > 80」の部分は「変数scoreの値が80より大きい」という条件になります。
変数scoreにはいま94が代入されているので、この条件は成り立ち、処理が実行されています。
この場合条件が成り立たないときは何も実行されません。
score = 92
if score > 80
puts "よくできました"
end
配列
複数の値をまとめて管理するには、配列というものを用います。
配列は[値1, 値2, 値3]のように作ります。
配列に入っているそれぞれの値のことを要素と呼びます。
配列を使うと、複数の文字列や数値をまとめて書くことができます。
names = ["Yamada", "Suzuki", "Sato"]
numbers = [10, 20, 30]
配列の要素を用いる
配列の各要素は、配列[インデックス番号]とすることで用いることができます。(始まりは0)
names[1]とすると、配列namesの2つ目の要素の値を用いることができます。
names = ["Yamada", "Suzuki", "Sato"]
puts names[1] #Suzuki
繰り返し処理
繰り返し処理には、eachメソッドというものを使います。
eachメソッドを使うと、配列の要素を順番に取り出して処理を行うことができます。
eachメソッドは、「配列.each do |変数名|」と書き、「end」までの間に実行したい処理を書きます。
languages = ["日本語", "英語", "スペイン語"]
languages.each do |language|
puts "#{language}を話せます"
end
ハッシュ
ハッシュは、{キー1 => 値1, キー2 => 値2}のようにつくります。
配列は要素を[]で囲みましたが、ハッシュは{}で囲みます。キーと値の間は「=>」でつなぎます。また、配列と同様に、要素と要素はコンマ(,)で区切ります。
exam = {"subject" => "Math", "score" => 80}
ハッシュの要素を更新する
ハッシュ[キー] = 値と書くことで、キーと対応している値を更新することができます。
exam = {"subject" => "Math", "score" => 80}
puts exam["subject"] #Math
exam["subject"] = "Science"
puts exam["subject"] #Science
ハッシュに要素を追加する
ハッシュ[新しいキー] = 値と書くことで、ハッシュに新しい要素を追加することができます。
ただし、ハッシュにすでにあるキーを指定すると、要素の追加ではなく更新になってしまうので注意しましょう。
exam = {"subject" => "Math", "score" => 80}
exam["grade"] = "good"
#exam{"subject" => "Math", "score" => 80, "grade" => "good"}
シンボル
シンボルとは、文字を「"」や「'」で囲む代わりに、先頭に「:」をつけた書き方のことをいいます。
文字列とシンボルは厳密には異なりますが、基本的には同じように使用することができます。
puts "ruby"
puts :ruby
キーがシンボルのハッシュ
ハッシュのキーにシンボルを用いるときには、省略した書き方をすることができます。
具体的には「:key =>」を「key:」というように省略することができます。
省略した書き方の場合でも、あくまでキーはシンボルですので、要素を取得する場合には以下のようにシンボルを用いる必要があります。
user = {name: "Suzuki", age:21}
puts user[:name]
メソッド
「def メソッド名」と「end」の間に、まとめたい処理を書くことでメソッドをつくることができます。
このことを「メソッドを定義する」と言います。
メソッドは、定義するだけでは実行されません。
下のように、「メソッド名」とすることで実行できます。
メソッドを実行することを、「メソッドを呼び出す」と言います。
def introduce
puts "こんにちは"
puts "私はカズマです"
end
puts "-----自己紹介-----"
introduce
引数を受け取るメソッドの呼び出し
引数を渡してメソッドを呼び出すには、「メソッド名(値)」とします。
メソッドは、指定した値を受け取り、その値は引数に代入されます。
def introduce(name)
puts "こんにちは"
puts "私は#{name}です"
end
introduce("カズマ")
戻り値のあるメソッド
メソッドの中でreturnを使うと、呼び出し元で値を受け取れるようになります。
「return 値」と書くことで、メソッドはその値を戻り値として返します。
def discount(price)
return price / 2
end
puts "テレビがセール中です!"
half_price = discount(15000)
puts "特別価格で#{half_price}円です"
真偽値を返すメソッド
if文で使うような条件式をreturnすると、その条件式の結果として得られる真偽値(trueまたはfalse)を返すことができます。
真偽値を返すメソッドは、メソッド名の末尾に「?」をつける慣習があるので、覚えておきましょう
def shipping_free?(price)
return price >= 5000
end
if shipping_free?(3000)
puts "5000円以上のお買い上げなので送料はいただきません"
else
puts "追加で送料をいただきます"
end
クラス
クラスは「class クラス名」とすることで定義できます。
クラス名は必ず大文字で始めることと、「end」を書く必要があることに注意しましょう。
情報を持たせるためには、「attr_accessor シンボル」のようにします。
下のようにすることで、Menuクラスのインスタンスにnameという情報を持たせることができます。
また、この「name」という情報のことをインスタンス変数と呼びますので覚えておきましょう。
class Menu
attr_accessor :name
end
インスタンスの生成
クラス(設計図)を元に、新しくインスタンスを生成するには、「クラス名.new」とします。
また、「変数名 = クラス名.new」とすることで、生成したインスタンスを変数に代入することができます
class Menu
attr_accessor :name
attr_accessor :price
end
menu1 = Menu.new
インスタンス変数に値を代入する
インスタンスに情報をもたせるには、クラスで用意したインスタンス変数に値を代入する必要があります。
具体的には「インスタンス.変数名 = 値」とすることで、そのインスタンス変数に値をセットすることができます。
class Menu
attr_accessor :name
attr_accessor :price
end
menu1 = Menu.new
menu1.name = "ピザ"
puts menu1.name
menu1.price = 800
puts menu1.price
クラスの中で定義したメソッドを呼び出す
クラスの中で定義したメソッドは、インスタンスに対して使うようにして呼び出します。
具体的には、「インスタンス.メソッド名」のようにすることで、そのメソッドを呼び出すことができます。
class Menu
attr_accessor :name
attr_accessor :price
def info
puts "料理名と値段が表示されます"
end
end
menu1 = Menu.new
menu1.name = "ピザ"
menu1.price = 800
menu1.info
インスタンスメソッド
インスタンスメソッドは、インスタンスに対して呼び出す、ということ以外は普通のメソッドと同じです。
したがって、インスタンスメソッドも、引数を受け取ったり戻り値を返すことができます
class Menu
attr_accessor :name
attr_accessor :price
def show(data)
puts "私は#{data}です。"
end
end
menu1 = Menu.new
menu1.show("メニュー")
インスタンスメソッドの中でインスタンス変数を扱う
インスタンスメソッドの中では、特殊な変数「self」を用いて「self.変数名」とすることで、インスタンス変数を扱うことができるようになります。
インスタンスメソッドでは、変数「self」に、呼び出したインスタンス自身が代入されています。
class Menu
attr_accessor :name
attr_accessor :price
def info
return "#{self.name} #{self.price}円"
end
end
menu1 = Menu.new
menu1.name = "ピザ"
menu1.price = 800
puts menu1.info
initializeメソッド
インスタンスを生成した直後に処理を実行することができる、initializeメソッドがあります。
initializeメソッドは、「クラス名.new」でインスタンスを生成した直後に自動で呼び出されます。
class Menu
attr_accessor :name
attr_accessor :price
def initialize
self.name = "ピザ"
self.price = 800
end
end
menu1 = Menu.new
あとがき
今回はRuby初心者がRuby初心者のための記事を書きました。
紹介したものを含めたコードをGitHubにまとめたので併せて御覧ください。
少しでも学習の手助けになっていれば嬉しいです。
最後までお読みいただきありがとうございました。