以下の内容はhttps://let.blog.jp/tag/enumより取得しました。


enum 的なものは文字列派だったけど
個別に扱うことがないただの選択肢なら数字だけでもいいかなって思った

昔ながら感ある方法

const FOO = 1
const BAR = 2

export const foo_bar_options = {
[FOO]: "foo text",
[BAR]: "bar text"
}

選択肢それぞれに名前をつけて数値を対応させる
key-value 形式で数値と表示用ラベルを保持する

foo text のところは日本語だったりで画面に表示する用のテキスト
簡単なツールなどだと選択肢も簡単で英単語で表すのも簡単

だけど特殊な固有名詞とか選択肢を表す言葉が複雑なものになってくると 名前を考えるのも面倒
そもそも一般的な英語にしづらい固有名詞とかは日本語で書けばいいとも思ってるけど 他とのバランスとかで急に日本語を混ぜたくないとかもあって 英語にしたいときもある

こういうので数が多いと嫌になる
思ったのが 選択肢が特別な意味のないただの選択肢で これを選んだ場合に何かがあるとかが無いなら 最初から名前を用意しなければ名前を考える必要はないってこと
全体としてこれが何なのかを表してる foo_bar_options に当たる名前は必要だけど ここはそんなに難しいことがなくて面倒なのは選択肢なのでこれで十分

export const foo_bar_options = {
1: "foo text",
2: "bar text",
}

=== "1" は 1 が何かわからないのでしたくないけど それをすることがないなら名前もいらない

React で select を作るときもこういう感じでいい

import { foo_bar_options } from "./constants.js"

const Select = ({ options }) => {
const opts = Object.entries(options)
return (
<select defaultValue={opts[0][0]}>
{opts.map(([k, v]) => (
<option key={k} value={k}>{v}</option>
))}
</select>
)
}

const Component = () => {
return (
<div>
<Select options={foo_bar_options} />
</div>
)
}
動的型付け言語でまで静的型付け言語みたいなことしないでほしい
あるプロパティ mode には "includes" か "equals" を文字列で指定するものとします
こういうのがあると一々 enum だったり定数だったりを作る人がいますよね

enum 等の型がすでにあって mode プロパティを受け取る側がその型を指定するようになっているならそれでいいです
しかし そうでもなく最終的に文字列を入れるのであれば それをわざわざ定数化したりとかムダなことはしたいとは思いません

文字列で 2 種類入れるからそういう事を考えるわけであって プロパティが mode_includes という名前で true か false を指定するのであればどうするのでしょう?
普通に true/false を使いますよね
"includes" の文字列だった部分はプロパティ名として扱うことになりましたがプロパティ名を定数や enum として扱うのでしょうか?
さすがにそんなことはしないと思います

プロパティ名であればそのまま文字列として扱うのであれば mode に入れる "includes" なども文字列としてソースコード上で扱えばいいのです
JavaScript の enum 値の例
JavaScript では enum 値は文字列で扱うものが多い
定数にいれた数値を使う C 系に多い方法はあんまりない
数値はわかりづらいし 数値も文字列もほぼ同じように扱える言語で数値にするメリットはほとんどない

JavaScript の標準の機能は 最近のものだと最初から文字列になってる
昔からあるものは数値のがいくつかあったけど 今では非推奨になって文字列版の代替が用意されたものが多め
はっきりどこか覚えてないけど提案段階もしくは普及前段階で数値の入った定数を渡す API だったものが 文字列で指定するものに変わったのもあったはず

◯ キーボード

昔は keyCode で Enter が 13 みたいな数字
今では keyCode は非推奨で code や key を使う
これには "Enter" みたいな文字列が入ってる

◯ DOMException

DOMException エラーオブジェクトでは code プロパティににエラーの種類を表す数値が入ってる
ただしこのプロパティは非推奨で name プロパティにエラーの名前が文字列で入ってるのでこっちを使う

◯ nodeType

Node のプロパティ nodeType にノードの種類(HTML 要素やテキストノードやコメントノード)が数値で入ってる
文字列の代替はなくて数値のみ
instanceof を使って判定もできる

◯ モード・タイプ

動作モードやタイプを指定する場合文字列で名前指定することが多い
多いのでまとめて

▶ IndexedDB ("readwrite" など)
▶ ShadowDOM ("closed" など)
▶ Canvas Context ("2d" など)
▶ Event Type ("click" など)
▶ Mutation Record Type ("childList" など)
▶ typeof ("number" など)
▶ fetch オプション credential, mode, redirect, ... ("omit", "cors", "follow", "no-cache" など)
▶ crypt オプション keytype, algorithm ("pkcs", "HMAC" など)
▶ Fullscreen Option navigationUI ("show" など)
▶ WebAnimaion playState ("paused" など)
▶ WebAnimaton オプション easing, fill ("linear", "forwards" など)
▶ XHR, fetch の HTTP メソッド ("GET" など)



JavaScript と書いたけどほとんどが ブラウザ固有の Web API のもの
この辺りは HTML 属性やタグなどが文字列だから合わせてるのもありそう

ただ ECMAScript 部分でも最近の機能は文字列のものもある

◯ Promise.allSettled

返り値の status プロパティが "fulfilled" または "rejected" の文字列

◯ Atomics.wait

返り値が "ok" や "timed-out"



以上の内容はhttps://let.blog.jp/tag/enumより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14