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