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 3 years have passed since last update.

OpenStructを使ってみた。

Posted at

こんにちは、プレイライフの熊崎です!
本日2本目は実務でOpenStructを使用したので、OpenStructについてアウトプットを行っていこうと思います。

OpenStructとは

要素を動的に追加・削除できる手軽な構造体を提供するクラスです。
ref: https://docs.ruby-lang.org/ja/latest/class/OpenStruct.html

An OpenStruct is a data structure, similar to a Hash, that allows the definition of arbitrary attributes with their accompanying values.
ref: https://ruby-doc.org/stdlib-2.6.6/libdoc/ostruct/rdoc/OpenStruct.html

→ 任意の属性とそれに付随する値を定義することができて、なおかつ属性は動的に追加・削除ができる。

構造体とは?

構造体(こうぞうたい、英: structure)はプログラミング言語におけるデータ型の一つで、1つもしくは複数の値をまとめて格納できる型。それぞれのメンバー(フィールド)に名前が付いている点、またメンバーの型が異なっていてもよい点が配列と異なる。
ref: https://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E4%BD%93

どんな挙動をするのか?

以下のように、要素を追加したり、削除したりできる。

sample.rb
require 'ostruct'
user = OpenStruct.new
user.name = "佐藤太郎"
p user # => #<OpenStruct name="佐藤太郎">
user.delete_field("name")
p user # => #<OpenStruct>

newメソッドの時点で属性をセットすることもできる。

sample.rb
require 'ostruct'
OpenStruct.new(:name => "佐藤太郎", :sex => "male")

どんな時に使うのか?

例:何らかの事情で、フロントエンド側から受け取った値を変換したいとき。
わざわざ変換用のクラスを準備するよりもこっちの方が簡単に書ける。

sample.rb
def conversion_entry_status
  OpenStruct.new(
    "ok": "entry",
    "ng": "not_entry"
  )
end

def save
  user_schedule.update!(entry_status: conversion_entry_status[:ok])
end

最後に

今回の例以外にも、テスト時のmockを作る時などにも使用されるらしい。
まだまだ理解しきれていない部分もあるため、もっと使用して理解を深めようと思う。

参考文献

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?