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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

12回答

29285閲覧

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

yuji38kwmt

総合スコア437

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

3クリップ

投稿2015/07/28 15:28

下記のコードのような「各科目のテスト結果を取得する」メソッドがあった場合、
「英語の点数を取得するか否か」という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});

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答12

0

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

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

投稿2015/07/28 21:32

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

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

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

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

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

投稿2015/07/28 23:38

編集2015/07/28 23:58
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuji38kwmt

2015/08/02 13:33

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

0

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

js

1/** 2 * 案1 3 */ 4function getTestResult (param) { 5} 6 7getTestResult({selectEnglish: true, selectJapanese: true}) 8

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

js

1/** 2 * 案2 3 */ 4function getTestResult (selectSubjects) { 5} 6 7getTestResult({English: true, Japanese: true }) 8

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

js

1/** 2 * 案3 3 */ 4function getTestScoreBySubjects (subjects) { 5 var testScore = {Japanese: 90, English: 80, Math: 85}; 6 7 if (subjects.indexOf('Japanese') === -1) { 8 delete testScore.Japanese; 9 } 10 11 if (subjects.indexOf('English') === -1) { 12 delete testScore.English; 13 } 14 15 if (subjects.indexOf('Math') === -1) { 16 delete testScore.Math; 17 } 18 19 return testScore; 20} 21 22getTestScoreBySubjects(['English', Japanese]);

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

投稿2015/07/31 23:04

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

JavaScript

1function getTestResult(needCurriculums) { 2 var testResult = {}; 3 if (needCurriculums.english) { // プロパティ名で真偽判定する。偽と見做せる値、或いは未定義の時は取得しない 4 testResult.english = englishPoint; //英語の点数を設定 5 } 6 7 // 略 8 9 return testResult; 10} 11 12var needCurriculums = { 13 english: true, 14 japanese: true 15}; 16var scores = getTestResult(needCurriculums);

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

JavaScript

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

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

JavaScript

1function getTestResult(needCurriculums) { 2 // 略 3} 4const CurriculumType = { // 各定数はビットOR演算で複数指定できるようにしておく。 5 ENGLISH: 1, 6 JAPANESE: 2, 7 MATH: 4 8 // 略 9}; 10 11var scores = getTestResult(CurriculumType.ENGLISH | curriculumType.JAPANESE);

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

投稿2015/08/01 12:21

AmaiSaeta

総合スコア105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

投稿2015/07/29 18:09

miu_ras

総合スコア902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2015/07/29 06:44

hello-world

総合スコア1342

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2015/07/28 15:32

編集2015/07/28 15:33
tenraku

総合スコア148

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

JavaScript

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

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

投稿2015/07/30 18:39

kakusuke

総合スコア80

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2015/07/28 22:21

edo_m18

総合スコア2283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2015/07/28 15:40

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2015/07/28 15:37

rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2015/07/28 15:33

KenTerada

総合スコア751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問