0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby学習アウトプット 

Last updated at Posted at 2022-08-03

転職活動において、技術試験がいくつか出されており、改めてこちらの本でRubyの勉強をしています。
https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227
そのアウトプットとして、よくRailsでみるRubyの記法が解説されていたので、アウトプットさせてください。

nilガード

number||=10

上と下は同じ意味

number||(number= 10)

もしもnumberがあれば、number なければnumberに10を代入する

使うとき

  • 変数にnilが入っているかもしれない状況で、nilの代わりになにかデフォルト値を入れておきたい場面で使う
  • 認証のcurrent_userとかで使うイメージ

ボッチ演算子

&.記法のこと

&.を使って演算子を使ってメソッドを呼び出すと、レシーバーがnilで合った場合でもエラーが発生しなくなる

正式名称は「safe navigation operator」

if文や三項演算子を使ってこのように記載するか、

name= object ? object.name : nil

こうかける

name=object&.name

上下のコードは同じ意味になる

%記法

すべての要素が文字列である配列は「%w」を使ってかける

> ary1 =['apple','banana','orange']
=> ["apple", "banana", "orange"]
> puts ary1
apple
banana
orange
=> nil
> ary2 = %w(apple banana orange)
=> ["apple", "banana", "orange"]
> p ary2
["apple", "banana", "orange"]
=> ["apple", "banana", "orange"]

すべての要素がシンボルの場合、「%i」

> ary3=[:apple,:banana,:orange]
=> [:apple, :banana, :orange]
> p ary3
[:apple, :banana, :orange]
=> [:apple, :banana, :orange]

> ary4=%i(apple banana orange)
=> [:apple, :banana, :orange]
> p ary4
[:apple, :banana, :orange]
=> [:apple, :banana, :orange]

このように書くほうが、可読性が高くなる

配列の各要素から特定の属性だけを取り出す

class User
    attr_accessor :name
    # name属性を付与 
end

user1=User.new
user1.name= 'Aさん'

user2=User.new
user2.name= 'Bさん'

user3=User.new
user3.name= 'Cさん'

users=[user1,user2,user3]

このコードではusers配列に3つのUserオブジェクトが入っている。
この配列からname情報のみの取得をする場合。

いくつかパターンがある

eachと<<を使う方法

# names配列を定義
names=[]

# users配列からname属性をnames配列へ格納していく
users.each do |user|
   names << user.name 
end

mapを使う方法

mapメソッドは配列に対してブロック(do 〜 endの中で指定した処理)を実行した結果を格納した新しい配列を返す


names=users.map do |user|
    user.name
end

ブロックは{}でも記述できる

names=users.map{|user| user.name}

&とシンボルを使って次のようにもかける

names=users.map(&:name)

※ちなみに&はto_procメソッドの略らしい。
to_iは整数に直すのはよく見るが、to_procとはProcクラスにするメソッドのようです
https://style.potepan.com/articles/29663.html#:~:text=Proc%E3%81%A8%E3%81%AF%E3%80%8C%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92,%E6%B8%A1%E3%81%99%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

感想

いままで(&:)の意味がわからなかったけど、to_procメソッドとシンボルの組み合わせと知ることができた

コードを書きながら0からかけるようにして、自分のものにしていきたい。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?