ルビーの定数やクラス変数?
-
23-08-2019 - |
質問
私は今、数ヶ月のためにRubyでプログラミングをしてきた、そしてクラス変数とその逆の上に定数を使用することが適切であるとき、私は思ったんだけど。 (私は、モデルの定数について考え、Railsの中で働いています)。
class Category
TYPES = %w(listing event business).freeze
end
または
class Category
@@types = %w(listing event business).freeze
cattr_reader :types
end
1が別の望ましい状況がありますか?それとも、それが味/スタイルだけの問題でしょうか?
解決
主なものは、CONSTANT表記を使用することによって、あなたが読者にそれを明確に作っているということです。下部ケースは、凍結された文字列が戻ってのRDocを読むために誰かを強制的に、印象はがが設定可能であるかもしれないです与えます。
他のヒント
私は定数使用することをお勧めします。
あなたは、実行時に動的にこれらの値を設定および/または変更する予定がある場合は、その後、ゲッターとセッターとクラス変数を使用します。
基本的に、あなたはこのようにそれを置くことができる:あなたが一定の何かをしたい場合は、定数を使用します。あなたは変数の何かをしたい場合は、変数を使用します。これは、タイプは、それが凍結された配列で見て、定数でのあなたのリストのように思えるので、私はそれがこのケースでは定数を使用するために理にかなっていると言うでしょう。
あなたはは、値があなたのプログラムの実行時に変更したいとのない場合は、値は、クラスの外部からアクセスできるようにすることに慣れている、定数を使用します。
そうでなければ、あなたはクラス変数を使用することができます。しかし、クラス変数は、サブクラスとサブクラスのインスタンス間で共有されていることに注意してください。あなたは将来のある時点で、子クラスを実装する可能性があるのであれば、あなたはクラス変数の使用については非常に注意する必要があります。
これに関する詳細はこちらの回答を参照してください:クラス変数をRubyのの
あなたは常に行うことができます:
FOO = 18
private_constant :FOO