🍒
Rubyまとめ
Rubyまとめ
基礎知識
前提
- Rubyでは全てがオブジェクト
文の区切り
- 基本は改行で区切り
- セミコロンで明示的に区切ることができる
- 文が続くと明らかな場合は改行できる
- バックスラッシュで文が続くことを明示的に示せる
コメント
- #でコメント
- =begin, =endで複数行コメント(主にドキュメント用)
ローカル変数
- 変数の宣言だけはなく、代入とセット
- 変数名は小文字のスネークケース(ex. sample_value)
- 多重代入ができる
a, b = 2, 4
文字列
- シングルクォートはそのままの文字列
- ダブルクォートは特殊文字、#{}の式展開が使える
- エスケープはバックスラッシュ
- >, <, <=, >=, ==, !=で比較できる
- %記法で文字列が作れる
- %q!xxx!でシングルクォートと同様
- %Q!xxx!でダブルクォートと同様
- ヒアドキュメントが使える
数値
- 数値の区切りにアンダースコアが使える
- 整数の場合、to_fメソッドで少数に変換できる
真偽値
- false, nilは偽
- それ以外は真
if式
if 条件式
処理
elsif 条件式
処理
else
処理
end
- if文は最後に評価した式を値として返す
- 式として使用した時に、どの条件も満たさなかった場合はnilを返す
- 後置ifが使える
- 条件式の否定版でunlessが使える
メソッド
- メソッド名はスネークケース
- 最後に評価された値が戻り値
- returnはあるが、戻り値としてはあまり使われない
- メソッドからの離脱でreturnを使うことが多い
- 引数がなければ()ごと省略できる
- 引数があるときは()をつけた方が見やすい
- デフォルト引数が使える
- ?でメソッド名が終わるものは真偽値を返す
- !でメソッド名が終わるものは相対的に危険(破壊的)
- エンドレスメソッドが使える
def hello = 'hi!'
def add(a, b) = a + b
- object_idメソッドで同じ参照か確認できる
- require ライブラリ名でライブラリを読み込める
- 自作ファイルの場合はrequire_relativeを使う
- putsメソッドは改行をつけて出力。戻り値はnil。
- printメソッドは改行なし出力。
配列、繰り返し
配列
# 空配列
[]
# リテラル
[a, b, c]
- 異なるデータ型も格納できる
- 配列に配列をいれられる
- 存在しない添字はnilが返る
- size, lengthで長さが返る
- <<で配列の最後に値を追加できる
- pushメソッドでも最後に値をつ以下できる
- delete_atで要素を削除できる
- 配列から多重代入できる
- 配列[位置, 長さ]で指定位置から長さ分取得する
- values_atメソッドで取得したい要素の添字を複数指定できる
- 配列に負の数の添字が使える
- 先頭の値、末尾の値を取得するfirst, lastメソッドがある
- concatで文字列連結できる(破壊的)
- +でも文字列連結できる(非破壊的)
- *を使って多重代入時に残りの要素を受け取れる
- *を使って配列の展開ができる(複数の引数にできる)
- == で等しい配列か確認できる
- デフォルト値を持つ配列を作成できる
- Array.new(num)で要素が5つの配列(値はnil)
- 第二引数に値を入れられる
- ブロックを使ってデフォルト値をつけられる
- デフォルト値を第二引数で入れる時はイミュータブルかどうかに注意
繰り返し
array = [a, b, c, d]
array.each do |char|
p char
end
- deleteメソッドは、配列内の完全一致した要素を削除する
- delete_ifメソッドは、ブロックの戻り値が真だったとき要素を削除する
- ブロックを一行で済ませたい時は{}だとスッキリ
- each_with_indexメソッドで繰り返し時に添え字も取得できる
- mapなどではwith_indexを併せて使用する
- breakでくり返しから抜けることができる
- breakに引数を渡すと戻り値になる(渡さなければnil)
- throw, catchで複数のくり返しから抜け出せる(例外処理ではない)
- 次の繰り返しに進む場合はnextを使う
配列のメソッド
map(collect)
ブロックで評価した値を新しい配列に格納して返す
select, find_all, reject
配列の要素をブロックで評価し、真になった値を新しい配列に格納して返す
(rejectは偽になった要素)
find, detect
ブロックの戻り値が真になった最初の要素を返す
見つからない場合はnilを返す
sum, join
要素の合計を求める
文字列の場合は要素を結合する
文字列の結合ではjoinが使いやすい
&, シンボル
以下の条件の時、メソッドに&:メソッド名を渡せる
- ブロックパラメータが一つ
- 呼び出すメソッドに引数がない
- メソッドを一度呼び出すだけ
範囲(Range)
- 最初の値..最後の値(最後の値含む)
- 最初の値...最後の値(最後の値を含まない
- 配列や文字列の添字に使える
- n以上m以下(未満)などの表現に便利
- 範囲オブジェクトにto_aメソッドを使うことで配列を作れる
- 範囲オブジェクトにeach, stepメソッドで繰り返し処理ができる
- 最初の値、最後の値を省略あるいはnilにすることでエンドレスレンジを定義できる
ハッシュ
基本形
# 空のハッシュ
{}
# サンプル
{
'one' => 'ichi',
'two' => 'ni',
'three' => 'san',
}
要素の追加、変更、取得
currencies = {
'japan' => 'yen',
'us' => 'dollar',
'india' => 'rupee',
}
# 値追加(既にあった場合は更新)
currensies['italy'] = 'euro'
# 値取得(キーがない場合はnil)
currensies['japan']
繰り返し処理
# 基本系
currencies.each do |key, value|
puts "#{key} : #{value}"
end
# パラメータひとつの場合は配列になる
currencies.each do |array|
puts "#{array[0]} : #{array[1]}"
end
- == でハッシュの内容が同じか確認できる
- 並び順が違くても同じとみなされる
- キーが一緒でも値がちがければfalse
- sizeメソッドでキーバリューセットの数がとれる
- deleteメソッドで要素を削除できる(引数はキー)
Minitest
雛形
require 'minitest/autorun'
class SampleTest < Minitest::Test
def test_sample
assert_equal 'RUBY', 'ruby'.upcase
end
end
- クラス名にTESTをつける
- クラス名はキャメルケース
- ファイル名はスネークケース
- メソッド名はtest_で始める
- assert_equalは値が等しいか検証
- assertは値が真か検証
- refuteは値が偽か検証
Discussion