Ruby 初心者向け基本事項
この記事は以下の読者を対象にしています
- Ruby初心者
- 最低限知るべき知識、コードが知りたい
- 各コードの意味が知りたい
Rubyの傾向
括弧を使わなくてよい言語。空白で代用するか、endでスコープを指定することが多い。行の終わりは改行で判断する。改行忘れ、end忘れに注意。オブジェクト指向の言語
出力
コード | 意味 |
---|---|
puts "文字列"または変数 | 出力+改行.変数の値を文字列中で表示するときは#{変数}とすればその位置に現れる |
p 変数や文字列 | 変数をその型通りに表示。文字列なら""付きで表示される。デバッグに便利 |
print "文字列"または変数 | 出力.putsとの違いは改行しないこと。 |
入力・文字列操作
コード | 意味 |
---|---|
gets | 一行読み込み 戻り値の型は文字列 |
文字列型.chomp | 末尾の改行コードを取り除く |
文字列.split("分割する目印の記号") | 分割。戻り値は配列 |
コメントアウト
コード | 意味 |
---|---|
# | 一行コメントアウト |
=begin 何行でも空いて =end | 複数行コメントアウト |
演算子
if文
if 条件式1
#条件式1が成立したときの処理
elsif 条件式2
#条件式2が成立したときの処理
else
#条件式が、どれも成立しなかったときの処理
end
改行必須
乱数
コード | 意味 |
---|---|
rand(整数) | 0以上整数未満の乱数を返す |
rand(数1...数2) | 数1以上数2未満の乱数.型は引数に従う |
rand(数1..数2) | 数1以上数2以下の乱数。型は引数に従う |
型変換
コード | 意味 |
---|---|
変数.to_i | 変数をint型にした値を返す |
変換.to_f | 変換をfloat型にした値を返す |
for文
for カウンタ変数 in 繰り返す範囲 do # doは省略可能
繰り返し処理 end
end忘れに注意。改行必須。
「繰り返す範囲」に配列を入れると配列の要素をカウンタ変数に入れる。
「繰り返す範囲」に5..10を入れれば5以上10以下の値が順にカウンタ変数に入る。
例
for i in 5..10
puts "hello world #{i}"
end
for文の別の書き方としてeachがある。詳細は配列やハッシュの項目を参照。
配列.each do |カウンタ変数|
繰り返し処理 end
while
while 条件式 do # doは省略可能
#繰り返し処理 end
配列
クラスはArrayである。
やりたいこと | コード |
---|---|
生成 | 例:team = ["勇者", "魔法使い", 100, player_1] このように複数の型が収納できる |
箱だけ生成 | 配列名=Array.new(要素数) |
一定初期値で生成 | 配列名=Array.new(要素数,値) |
別の配列を利用して生成 |
生成する配列 = 元にする配列.map do |要素が入る変数| 例:results2 = numbers.map do |item| |
2次元配列を初期値で生成 | 配列=Array.new(行数).map(Array,new(列数,初期化値)) 注:Array.new( ,Array.new( , ))ではない。 これだと同じ配列を集めた2次元配列になる →一つの要素を変更すると全ての配列が変化してしまう。 |
要素にアクセス | 配列[得たい要素のインデックス] |
要素数を調べる | 配列.length |
末尾に要素を追加 | 配列.push(追加する値) |
要素に代入 | 配列[インデックス]=代入する値 |
要素を削除 | 配列.delete_at(インデックス) |
整列 | 配列.sort |
逆順に整列 | 配列.sort.reverse |
eachでindexとvalueを両方表示 | 配列.each_with_index do |valueを入れる変数,indexを入れる変数| 処理 end |
ハッシュ(連想配列)
やりたいこと | コード |
---|---|
生成 | 名前={key => value, ・・・以下同様} |
要素にアクセス | ハッシュ[key] |
長さ | ハッシュ.length |
追加・更新 | ハッシュ[key] = value |
削除 | ハッシュ.delete(key) |
valueのループ処理 | ハッシュ.each_value do |valueの入る変数| 処理 end |
kye,valueのループ処理 | ハッシュ.each do |keyの入る変数,valueの入る変数| 処理 end |
keyでソート | ハッシュ.sort 戻り値は2次元配列 |
2次元配列をハッシュにする、ソートと同時に使うことが多い | 2次元配列.to_h |
valueでソート | ハッシュ.sort_by{|k,v| v} |
シンボルを用いて記述を簡単に | 例:enemies = {zako: "スライム", boss: "ドラゴン", king: "魔王"} p enemies[:boss] |
メソッド.関数のようなもの
- 定義の仕方
def メソッド名()
処理
end - 定義以降(定義した部分より下の行)でしか呼び出せない。
- 引数はもちろん取れる。
- return 返り値 で値が返せる。また、returnを省略すると最後の評価式が返る。
- 引数にキーワードを付けて指定できる
例
出力結果:def say_hello(greeting: "hello", target: "world")
puts "#{greeting} #{target}"
end
say_hello()
say_hello(greeting: "こんにちは", target: "皆さん")
say_hello(target: "先生", greeting: "おはようございます")
say_hello(target: "先生")
say_hello(greeting: "おはようございます")
hello world
こんにちは 皆さん
おはようございます 先生
hello 先生
おはようございます world
スコープ
ローカル変数 | 先頭が、英語小文字かアンダーバー「_」で始まる。 メソッド定義のスコープは分離しているため、他の部分の同名のローカル変数に影響を与えない。 |
グローバル変数 | 先頭が「$」で始まる。スコープがなく。メソッド定義を超えて利用できる。 |
ブロック
- do ... end で囲まれた部分というイメージ
- メソッド呼び出しの時に、対象データに渡すことのできる処理のかたまりのこと。
- スコープ
- ブロック変数は、ブロック外では使えない
- ブロック内のローカル変数も、ブロック外では使えない
- ブロック外のローカル変数は、ブロック内で使える
- do ... end は { ... } で代用できる。
クラス
- クラスの名前は先頭が大文字でなければならない
- 定義の仕方
例
class Player # クラス定義
def walk()
puts "勇者は、荒野を歩いていた。"
end
def attack(enemy)
puts "勇者は、#{enemy}を攻撃した!"
end
end - オブジェクトを生成
オブジェクト=クラス名.new()
例:
player1 = Player.new() # オブジェクトを生成
- オブジェクトのメソッドを呼び出す
オブジェクト.メソッド()
例:
player1.walk() # オブジェクトのメソッドを呼び出す
- オブジェクトの初期化メソッド
initialize クラスの中でdefする
例:
class Player
def initialize(job) # 初期化メソッド
@job = job #インスタンス変数の初期化
end
def walk()
puts "#{@job}は、荒野を歩いていた。"
end
end - インスタンス変数
クラスを実体化したもの(インスタンス)が持つ変数。
変数名の先頭に「@」を付ける。 - インスタンス変数へのオブジェクト外から読み書きする
許可する内容 コード 例 読み書き両方 attr_accessor :インスタンス変数の名前
(@は名前に含まれないので注意)attr_accessor :job 読みだしのみ attr_reader :インスタンス変数の名前 attr_reader :job 書き込みのみ attr_writer :インスタンス変数の名前 attr_writer :job