はじめに
本記事はRubyの基本的な構文についてまとめています。
初心者向けではなく、他言語を1つでも学んだことがある人を対象としています。詳細な説明はせず、「プログラミングにfor文があるのは知っている。Rubyではそれをどう書くか?」といった具合に流しで確認できるような内容にしています。
基礎構文
コメント
# 行コメント
# 複数行コメント
=begin
複数行コメント (beginとendで挟みます)
=end
コンソール操作
# コンソール出力
puts("文字列")
# コンソール入力
str = gets.chomp
value = gets.chomp.to_i # 数値で受け取る場合は.to_iでの型変換が必要。
文字列操作
文字列結合
puts("abc" + "de") # abcde
結合には「+」を使用します。
変数展開
value = 30
puts('abc #{value} de') # abc #{value} de
puts("abc #{value} de") # abc 30 de
文字列は「ダブルクォーテーション(“”)」と「シングルクォーテーション(”)」で囲うことができますが、
ダブルクォーテーションの場合、#{変数名}を埋め込むことで文字列結合「+」なしに文字列結合がなされます。
変数
# 定義
str = "str"
value = 300
Rubyでは明示的に型を宣言することがありません。
関数
# 通常の定義
# 引数なしの場合()を省略できる。
def myMethod
定義
end
# キーワード変数あり
def myMethod(a: b: c:)
処理
end
# キーワード変数ありの場合、関数呼び出し時、仮引数名の明示を強制できる。
myMethod(a: 10, b:20, c:30)
Rubyでは明示的に型を宣言することがありません。
nil
# 定義
value1 = ""
value2 = 0
value3 = []
value4 = {}
value5 = false
CやJavaでいうnullのこと。
nil判定
# 定義
puts value1.nil? # false
puts value2.nil? # false
puts value3.nil? # false
puts value4.nil? # false
puts value5.nil? # false
nil?関数でnilかどうか判定できる。
上記は全てnilに合致しない。
変数の実体(value1 ~ 5)が存在している場合は、nilになりえない。
nilとなる場合
# 配列の存在しないインデックスの指定
puts value3[9999].nil? # true
# ハッシュの存在しないキーの指定
puts value4["undefined_key"].nil? # true
参照したい変数の「実体」が存在しない場合にnilとなる。
true と false
nil以外はtrueとなる。
空文字 ""
"0" (文字列の"0")
0 (数値の0)
falseとなるのは以下の通り
nil
配列とハッシュ
配列
# 定義 (型混在可能)
arr = [10 , "str", 30]
# 参照
arr[2]
# イテレート
arr.each do |変数名|
処理
end
ハッシュ
定義
# 空定義
x = {}
# 定義には3つの記法があるが、3.が一般的。
# 1.キーが文字列の場合
map1 = {"key1" => "value1", "key2" => 30}
# 2.キーがシンボル (:キー名)の場合
map2 = {:key1 => "value1", :key2 => 30}
#3.キーがシンボル (:キー名)の場合 (省略形)
map3 = {key1: "value1", key2: 30}
Javaのmap、Pythonの辞書と同様に、キーと値をセットで持つ構造をしています。
参照
# 1.キーが文字列の場合
map1["key1"] # 文字列でキーを指定
# 2.キーがシンボル (:キー名)の場合 または 3.省略形の場合
map2[:key1] # シンボルでキーを指定
追加
map1["new_key1"] = "new_value1"
map1[:"new_value1"] = "new_value2"
定義の1~3によらず、追加は文字列でもシンボルでも追加できます。
しかし、可読性などを考慮するならば1.で定義したならばキーは文字列指定、2.3.ならシンボル指定のほうが混乱が少なく済んでよいでしょう。
制御文
if文
if 条件式1
処理
elsif 条件式2
処理
else
処理
end
endが必要なことに注意!
for文
arr.each do |変数名|
処理
end
型変換
# 文字列 ⇒ 数値変換
"300".to_i ⇒ 300
外部ファイル読み込み
# 拡張子の (.rbは省略)
require ファイルパス/ファイル名
クラス
定義
class Animal
# インスタンスフィールド
attr_accessor :変数名
attr_accessor :param1
attr_accessor :param2
# インスタンスメソッド
def info
return self.変数名 # インスタンスフィールドへはself.を付けてアクセスする。
end
# コンストラクタ
def initialize(param1, param2)
self.param1 = param1
self.param2 = param2
end
end
コンストラクタ名は「initialize」で固定です。
インスタンス生成
animal = Animal.new(100, 200)
継承
# 継承先 < 継承元
class Cat < Animal
# コンストラクタ
def initialize(param1, param2, param3)
# 親コンストラクタの呼び出し
super(param1, param2)
end
end