質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

「~を取得するか否か」というboolean変数の適切な名前

解決済

回答 12

投稿

  • 評価
  • クリップ 3
  • VIEW 15K+

score 437

下記のコードのような「各科目のテスト結果を取得する」メソッドがあった場合、
「英語の点数を取得するか否か」というboolean変数は、どんな名前が適切なのでしょうか?
wantEnglishResult変数にしましたが、
* 動詞から始まるためメソッド名に見える
* 「want(欲しい)」という曖昧な単語を使っている
点で、不適切だと思います。

かといって、englishenglishFlagという単語は、trueの場合「取得する」のか「取得しない」のか分からないので、使いたくありません。

適切な名前を教えてください。

※コードのメソッド設計や引数の名前がよろしくないことは、気にしないでください。

/**
 * テスト結果を取得する
 * @param param どの科目を取得するかという情報
 */
function getTestResult(param) {
  var testResult = {}; //テスト結果
  if (param.wantEnglishResult) {
    testResult.english = englishPoint; //英語の点数を設定
  }
  if (param.wantJapaneseResult) {
    testResult.japanese = japanesePoint; //国語の点数を設定
  }
  if (param.wantMathResult) {
    testResult.math = mathPoint; //数学の点数を設定
  }
  return testResult;
}

//国語と数学の点数を取得
getTestResult({wantEnglishResult: false,wantJapaneseResult:true, wantMathResult:true});
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 12

+6

要求という意味なら、 need, require, demand などが良いかもしれません。
needEnglishResult
  requireEnglishResult
  demandEnglishResult

 フラグというを強調したいなら、 is や flag を頭につけるとよいかもしれません。
isNeedEnglishResult
  flagNeedEnglishResult

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+4

param自体は処理をせず、外部にやってもらう形になるため、
「これを使ってください」ということを伝えなければなりません。

というわけでshouldUse~がいいんじゃないですかね。


リーダブルコードには、boolを返す名前は、is,has,can,shouldがいいよ的なことが書いてあったので
私はこうしています。

is + 名詞:(名詞)か?
has + 名詞:持っているか?
has + 過去分詞:やったか?
can + 動詞:できるか?
should + 動詞:すべきか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/02 22:33

    回答ありがとうございます。
    「リーダブルコード」に書かれている内容が参考になったので、ベストアンサーに選ばせていただきます。

    キャンセル

+3

flag変数のように捉えていましたが、multiple に select するという意味では selectEnglish になると思います。

/**
 * 案1
 */
function getTestResult (param) {
}

getTestResult({selectEnglish: true, selectJapanese: true})
 

「select*** が重複してくどいので仮引数に select の意味を持たせればいいのでは」
というわけで改案。

/**
 * 案2
 */
function getTestResult (selectSubjects) {
}

getTestResult({English: true, Japanese: true })
 

「関数名を変更すれば仮引数の select もなくせるのでは」
「複数の中から複数を選択するのでflag変数を使わず、配列で指定すればすっきりするのでは」
というわけで改案。

/**
 * 案3
 */
function getTestScoreBySubjects (subjects) {
  var testScore = {Japanese: 90, English: 80, Math: 85};

  if (subjects.indexOf('Japanese') === -1) {
    delete testScore.Japanese;
  }

  if (subjects.indexOf('English') === -1) {
    delete testScore.English;
  }

  if (subjects.indexOf('Math') === -1) {
    delete testScore.Math;
  }

  return testScore;
}

getTestScoreBySubjects(['English', Japanese]);

関数名は getElementsByTagName に倣いました。
flag変数を使うのであれば、「出力するオブジェクトのプロパティ名に日本語を使うか」という意味で第二引数に useJapanese があると面白いと思います。
use*** は addEventListener の第三引数(useCapture) で見られます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

Javaだとhasを使うことが多いですね
JavaScriptの命名規則かといわれると自信ないですけど。

”hasEnglishResult”なんてどうでしょう?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

要件を満たしていないような気もしますが、
getTestResult({ wantEnglish: true, wantJapanese: true }) ではなくて、
getTestResult({ target: ['english', 'japanese'] })みたいにするのが好みです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

本質的にどう使うのかよく分からないのですが、
「取得する・しない」ではなく「使う・使わない」ではないでしょうか。
だとするとuseが自然ではないかと思います。「useJapaneseResult」

で、さらに「JapanesePoint」を使うかどうかなら
「useJapanesePoint」がいいんじゃないかなと。

さらにさらに、テストの点数とかなら、「Score」の方が適切ではないかと。
結論として「useJapaneseScore」がより自然かと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

引数を「点数を取得したい教科のリスト」と見做し、返り値のオブジェクトのフィールド名と同じ物を使うというのはどうでしょう。同じ名前だと憶えやすいですしね。不要な教科用のフィールドを、返り値のオブジェクトに含めないのであれば、「指定した時に取得するのかしないのか分かりづらい」という事もないでしょう。

function getTestResult(needCurriculums) {
  var testResult = {};
  if (needCurriculums.english) { // プロパティ名で真偽判定する。偽と見做せる値、或いは未定義の時は取得しない
    testResult.english = englishPoint; //英語の点数を設定
  }

  // 略

  return testResult;
}

var needCurriculums = {
  english: true,
  japanese: true
};
var scores = getTestResult(needCurriculums);

「どうしても真偽値の変数名に名詞を使うのが気に食わない」という事であれば、引数を配列にしてもいいでしょう。

// 文字列の配列とするパターン
var scores = getTestResult(['english', 'japanese']);

或いは、教科を表す定数群を用意するとか。
DOMのXPathResultみたいな感じで。JSだと上書きできてしまうので微妙ですが……

function getTestResult(needCurriculums) {
  // 略
}
const CurriculumType = { // 各定数はビットOR演算で複数指定できるようにしておく。
  ENGLISH: 1,
  JAPANESE: 2,
  MATH: 4
  // 略
};

var scores = getTestResult(CurriculumType.ENGLISH | curriculumType.JAPANESE);

特に配列やフラグの例は、そもそも関数のインタフェイス自体が変わっているので、yuji38kwmtさんの求める回答ではないかもしれません。しかし、「『いくら考えても、どうにもしっくりくる名前が見当たらない』という場合は、『そもそも現在の設計は妥当か』を考えなおしてみる良い機会である」という考え方を持つのも一興かと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

OSやVMMといったシステムソフトウェアをいじっている人間です.
Xenのハイパーコールという関数呼び出しのようなものの仕様が参考になると思いました.

「param」ではなく「cmd」(コマンド)という変数名にすると
「cmd.getJapaneseResult」などのようにできて,意味も明確になると思います.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

resultでもいいのですが、boolean型を明確にするためにflagはいかがでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

意図を読むと「その結果が欲しいかどうか」のように見えたので,requestsとかですかね?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

自分もneedがいいかなーと思いました。

ちなみにObjective-Cだと
getHogeIfNeededみたいなメソッドがあったりします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

englishRequired とかですかねー
あとはメソッド呼ぶときのオプションということを考慮して、withEnglish とかもありかもですね

getTestResult({ withEnglish: true, withJapanese: true })

みたいな感じで呼べるのどうでしょうか

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る