3
0

More than 3 years have passed since last update.

Rails現場に入ってわからなかった文法・メソッドまとめ

Last updated at Posted at 2021-06-20

はじめに

独学未経験からRailsの現場に入ってみて、わからなかったRubyの文法・メソッドについてまとめていきます。※Railsのメソッドもあります。
誤り・参考になったなどあれば、コメントいただけると嬉しいです。
わからない文法が見つかり次第、その都度更新していきたいと思います。

|| (論理演算子)

複数の条件の中で真にになったものを返す。
ポイント
・左から順に処理を実行する
・真になった時点で処理を終了する()

val = 2
val = 1 || 2 || 3 ||
     false true 実行されない

||= (代入演算子)

左辺のオブジェクトがnilだった場合に、1を代入する。

val ||= 1

**(変数名) (引数)

キーワード引数の書き方の一つ。
定義に存在しない値をハッシュオブジェクトとして受け取ることができる。

def hoge(a: 0,**num)
 [a,num]
end

p hoge(a: 1,x:10) => [1,{:x=>10}]

: : (クラスの参照)

::を使用することで、クラスを参照・呼び出すことができる。

呼び出したいクラス

class V2::Hoge
end

呼び出す時

def hoge 
 run(V2::Hoge)
end

&.(ぼっち演算子)

Rubyのプログラムは通常、nilの場合、エラーを返す。
エラーではなく、そのままnilとして、返すようにするのが、&.(通称ぼっち演算子)である。

オブジェクト&.メソッド

(例)usernamenilだった場合、エラーではなく、nilを返す。

user&.name

=~ (マッチする要素のインデックスを取得)

正規表現の一種。
対象のオブジェクトの中で最初にマッチする要素のインデックスを返す。
マッチする要素がないとnilを返す。

"hello" =~ /h/ => 0(h0番目だから)
"hello" =~ /o/ => 4
"hello" =~ /ll/ => 2
"hello" =~ /a/ => nil

<< (配列に要素を追加する)

配列に要素を追加することが出来る。

array = []
array << "hello"
p array =>  ["hello"]
array << "world"
p array =>  ["hello","world"]

すでに配列の中に要素があった場合、末尾に追加される。

any?(真偽値を返す)

オブジェクトに対して、一つでもマッチするものがあればtrueを返し、全て違ければ、falseを返す。

 [1,2].any?{|a| a == 2 }
=> true
[1,2].any?{|a| a == 3 }

キーワード引数

キーワード引数を使用することで、値に引数名を指定して、渡すことできる。
今回の例で言うと、キーワード引数はnameになります。

def hello(name: )
 name
end

p hello(name: "hello") => hello #キー・値を指定して、使用する

xと言う存在しないキーだとしても**を使用することで、受け取ることができる。

attr_reader (インスタンス変数の読み取り)

インスタンス変数読み取り用メソッドが定義できる

このようにインスタンス変数を読み取るだけのメソッドを簡略化できるのが、attr_reader

def name
 @name
end

attr_readerメソッドを使用したやり方

attr_reader :name

同じ内容の意味になる。

reject (偽である要素を返す)

各要素やブロックに対して、偽であったものに対して、処理を行い、配列として返す。

(1..6).reject {|i| i % 2 == 0 } # => [1, 3, 5]

rubyリファレンス

select (真である要素を返す)

条件を指定して、真を値のみを返すもの。
rejectと逆の挙動になる。

(1..6).select {|i| i % 2 == 0 } # => [2, 4, 6]

map(&: ) (省略記法)

よく見る書き方(以下)の省略した書き方になる。

よく見る書き方

hoge.map{|i| i.length)

map(&:)を用いた書き方

hoge.map(&:length)

同じ内容の意味になる。

nonzero (0であれば、nilを返す)

0の時にnilを返しそれ以外の時は、selfを返す。

0.nonzero? => nil
10.nonzero? => 10

readonly (モデルを読み取る)

読み込み専用としてモデルを取得する。

モデル.readonly()

Railsドキュメント

fetch (キーを指定して値を取得)

ハッシュに対してキーを指定することで、値を取り出すことができる。

オブジェクト.fetch(キー)

(例)

hoge = {"age" => 10}
p hoge.fetch("age")
=> 10

result (処理結果を返す)

オブジェクト.resultとすることで、オブジェクトの処理結果を返すことができる。

erb = ERB.new("test <%= test1 %>\ntest <%= test2 %>\n")
test1 = "foo"
test2 = "bar"
puts erb.result
# test foo
# test bar

rubyリファレンス

partition (条件で結果を分割する)

条件にみたすものとそうでないものに分けることが出来る。

[1,2,3,4,5].partition{|a| a%2 == 0}
=> [[2,4][1,3,5]]

・条件に合致するものが左辺に、それ以外が、右辺に分けられる。
・以下のように条件ごとに各変数に代入することもできる。

ary = [1,2,3,4,5]
match,unmatch = ary.partition {|a| a % 2 == 0}
p match => [2,4]
p unmatch => [1,3,5]

present? (要素があればtrue)

値が存在していればtrueになる。

1.present? => true
0.present? => true
nil.present? => false
"".present? => false
[].present? => false

blank?の逆の挙動になる。

参考記事

Ruby on Railsの現場でよく見る書き方【実例あり】
Rubyのキーワード引数はシンボルっぽく定義するけど、シンボルそのものではない、という話
Ruby 3.0.0 リファレンスマニュアル
Railsドキュメント

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0