Enumを活用すれば整数値に名前をつけられる
こんにちは、たわらです。
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を返すメソッドが使えるようになります。
他にも破壊的なメソッドなどあるので都度確認しましょう。