Ruby入門アウトプット
10/1からwebアプリの自社サービス開発企業に入社しました。
使用言語はrubyで、実際のソースコードを見たところ自分の力不足を痛感したので、Ruby入門(チェリー本)を学習することに決めました。
本日から何回かにかけて、知識をアウトプットしていきます。
・変数名・メソッド名は、スネークケース
・ダブルコーテーションは、改行文字、式展開が可能。改行文字などの機能を打ち消すには、バックスラッシュをつける。ダブルクオートを使う必然性がないなら、シングルコーテーションを使った方が良い。
・1_000_000_000 は、 1000000000と同じ。
・false, nil以外は、true
・後置if
・returnを使わなくても、最後の結果が返される。途中で値を返したいときは、明示的にreturn をつかう
・引数のないメソッドは、()を省略できる。
・%q!文字列!は、'文字列'と同じ。!は、両端が対応していれば、なんでもOK
・%q!!文字列!!は、”文字列”
・ヒアドキュメント <<識別詞 文字列識別詞 文字列の改行はそのまま出力される。
・フォーマット文字列:sprintf('%0.3f +%0.3f', 1.2, 0.48)これは、小数点以下三桁にして計算を行うということ。
・[a,b,c].join これはabc
・0b:2進数 0:8進数 0x:16進数
・2e-3:2 * 10^-3
・条件式は、判定が途中で完了すると、それ以降は処理されない。
nil || false || 2 || 3 この場合、2でtrueが確定するので、3は処理されない。
・user = nil || tanaka || suzuki これはtanakaになる
・user.valid? && 処理 user.validがfalseなら処理は実行されない。
・user.valid? || 処理 user.validがtrueなら処理は実行されない。
・and or not は、&& || ! と同じ意味だが、処理の優先順位が低いため、結果が同じになるとは限らないので、注意が必要。
・処理 unless 条件 条件がfalseなら処理が実行される。
・case文
case 変数
when '~~~'
処理
else
処理
end
when '~~', '~~'と書くと、~~または~~
message =
case 文
のようにすると、mesageに値を代入できる。
then を使うと、一行で書くことができる。
case ~
when ~ then 処理
・式 ? 真の時の処理 : 偽の時の処理
・真偽値を返すメソッドは、最後に?をつける。
・!で終わるメソッドは、取扱注意!
upcase これは元の文字列は、変更されない。
upcase! こちらは、元の文字列ごと大文字に変化される。
・self 自身
・__FILE__ 現在のファイル名
・__LINE__ 現在の行番号
・__ENCODING__ 現在のスクリプトエンコーディング
・変数.object_id 変数の参照先
・gemライブラリを使うときは、require 'ライブラリ名'と書く。
ライブラリ名の拡張子は省略可(loadの場合は省略できない。)
・puts :改行を付して、変数の中身や戻り値を返す。
・print:改行を付さない
・p:改行を付す
・print, p は配列を形式で出力
テスト
・クラス名にはTestをつける
・ファイル名はスネークケース。クラスメイト同じにする。
・assert_equal 期待する値 テスト対象の値や式
・Rspecは、gemのインストールが必要
配列
・a = [1,2,3]
a[4] = 10
aは[1,2,3,nil,10]
・a, b = [1,2]
これはa=1, b=2と同じ
・c,d = [4]
これはc=4, d=nil
・a.delete_if do |n|
n.odd?
end
aから奇数を消す。
・処理が一行なら、一行にまとめることができる。
numbers.each{|n| sum += n}
・mapメソッド
numbers = [1,2,3,4,5]
new_numbers = numbers.map{|n| n*10}
new_numbersは[10,20,30,40,50]
・selectメソッド
numbers.select{|n| n.even?}
nが偶数のもののみ取り出す。
・rejectメソッド
selecrtメソッドの逆
・findメソッド
最初に該当したものを返す。
・injectメソッド
numbers.inject(0){|result, n| result + n}
()内はresultの初期値。result + nの結果がresultに代入される。
・&と:
.map{|s| s.upcase}と[].map(&:upcase)は同じ
・0..5 0以上5以下
・0...5 0以上5未満
・splat展開
[*1..5]これは[1,2,3,4,5]
・(1..10).step(2){|n| numbers << n} numbersという配列に、一つ飛ばしに格納する[1,3,5,7,9]
・数字.to_s(16) 16進数に変換
・'0'.rjust(5, '_') これは、____5