Enumを活用すれば整数値に名前をつけられる
July 17, 2020
こんにちは、たわらです。
Enum について簡単に整理した記事です。
Enum って?
「列挙型」という意味だそうです。
Wikipedia によれば「列挙型(れっきょがた、enumerated type あるいは enumeration type)とは、コンピュータプログラミングにおいて、プログラマが選んだ各々の識別子(列挙子)をそのまま有限集合として持つ抽象データ型である」
ざっくり説明すれば、一連の整数値に対して複数の変数名をつけること、と言えます。
こんなふうに使う
ユーザーのサービスに対する権限を定義する必要があるとします。
class AddColmunToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :role, :integer, null: false, default: 0
end
end
こんな感じで、User クラスにrole
カラムを追加します。データ型はinteger
です。default を 0 にしておきます。
次に User クラスに次のように記述します。
enum role: { general: 0, admin: 1 }
こうすることで、0と 1 にそれぞれ general と admin という名前を付与することができます。(言い方として、role カラムに enum 属性を宣言する、という言うのでしょうか。このあたりがわからないですね、、、)
便利メソッドが使えるから属性の確認が効率よくできる!
enum 属性を付与することで、ユーザーがどの権限かを簡単に確認することができます。
たとえば、管理者権限のユーザーでしか許可したくないプログラムがあるとします。
enum を定義していない場合は、このように書くことになります。
実行したい処理 if @user.role == 1
このコードのいまいちなところは、1 が何を示しているかわからないことになります。
このデメリットを enum は解消してくれます。enum 属性を宣言すると便利メソッドが使えるようになるのです。
実行したい処理 if @user.admin?
このコードは自然言語に近いかたちで理解ができます。管理者か? とユーザーオブジェクトに聞いている感じですね。admin であれば true、そうでなければ false を返すメソッドが使えるようになります。
他にも破壊的なメソッドなどあるので都度確認しましょう。
参考文献
https://api.rubyonrails.org/v5.2.3/classes/ActiveRecord/Enum.html