以下の要素によって適切な単語が変わる
- 対象
- 領域
- 構造
- コスト
等々
「取得」に使える単語一覧
-
get: メモリ上から高速に単一のデータ取得する場合や軽量なデータの取得等。検索や計算を含まない。 -
select: 配列などのコレクション内からデータを取得 (選択) する場合。検索が必要な場合もある。 -
take: 条件を指定してコレクションの先頭からデータを取得する場合。take(n) 等。終端から取得する場合は、引数に負の値を受け取れるようにしたり、takeLast や takeRight などと命名した別関数を用意する。 -
pop / dequeue: キューやスタックからデータを取得する場合。取得元からデータが失われる。 -
read: ストリームやファイルから、バイト列や文字列としてデータをメモリ上に展開する。 -
load: データストア (ファイル, ディスク, DB 等) からデータをメモリ上に展開する場合。 -
fetch: 何らかの境界越しにデータを取得する場合。取得元のデータが失われたり、取得後に手元のデータを置き換えたりせず、単に取得するのみ。 -
pull: 何らかの境界越しにデータを取得する場合。取得元のデータが失われたり、取得後に手元のデータが置き換わる。副作用。 -
collect / gather: 複数ヶ所からデータ「収集」する場合。
「検索」に使える単語一覧
-
lookup: 整理されたインデックス (キー) を元にコレクションからデータを取得する場合。辞書 (Map) 等。 -
retrieve: 対象が明確 (id 等) で、存在することがほぼ確定しているデータを検索して取得する場合。データが保存されている場所は問わない。見つからなかった場合は明確に例外やエラーを送出する必要がある。(語源はアングロフランス語の retrover、「re 再び + trover 見つける」。) -
find: 対象は明確だが、見つからない場合 (記録されていない可能性) があり、null や空の結果を返す可能性がある検索の場合。 -
search: 対象が曖昧 (キーワード) なデータを内外問わず検索して、何かしらのデータを取得する場合。 -
filter: 条件に一致するものすべて (部分集合) を検索する場合。find が「最初の 1 件」であることが多いのに対し、filter は複数件を対象とする。 -
query: 検索パラメータを組み立てたり組み合わせ、「構造化された問い合わせ」による検索を行う場合。 -
match: 特定のパターンに合致しているものを検索する場合。 -
extract: 大きなデータの中から必要な部分だけを抽出する場合。構造を解析 (パース) し、必要な部分のみを取得する。 -
scan: 全範囲、もしくは指定した範囲を網羅的に「走査」する場合。 -
explore / discover: 未知の領域を「探索」する場合。多くの場合、何らかの探索アルゴリズムを持つか、外部から注入される。 -
detect: 特定のパターンや異常を「検知」する場合。厳密には「検索」ではない。 -
inspect: 内部状態や詳細なデータを「覗き見る」「検査する」場合。厳密には「検索」ではない。 -
spy: inspect に似て「覗き見る」意味だが、「密かに」「元の処理を壊さずに」監視を行い記録する、というニュアンスが強い。本番のコードよりテストコードに多く登場する。
「導出」に使える単語一覧
-
calc: 軽量な計算によってデータを導出する場合。 -
compute: 計算によってデータを導出する場合。実行することで計算リソースが消費されることを明示したい場合。calc よりは本格的な計算処理。 -
derive: 複雑な計算によってデータを導出する場合。 -
evaluate: 式や条件を「評価」して結果を得る場合。 -
aggregate: 複数のデータを集約(合計・平均 等)して単一の結果を得る場合。 -
estimate: 正確な結果ではなく近似値や推定値を導出する場合。 -
resolve: 参照や依存関係を「解決」して最終的な結果を確定させる場合。 -
generate / build: ルールに従って新しいデータを「生成・構築」する場合。厳密には「導出」ではない。
その他
命名の際に動詞を前に置くか後ろに置くかは、基本的に言語やプロジェクトのコーディング規約に従ったほうが良い。
また、命名がそのまま呼び出しの際のタイピングに直結するシェル環境等のコマンド名の場合は、ユーザー体験を考慮したほうが良いように思う。
例えば、search- のような命名であれば、「検索」に関わるコマンドや関数の一覧を候補の中から探すことができるし、
-search のような命名であれば、先に対象を決め、その後にアクションを選ぶ、という動きになる。(この場合はサブコマンドを考慮するのも良い)