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

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

新規登録して質問してみよう
ただいま回答率
85.50%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

5回答

1580閲覧

AかつB、という汎用的な関数名について

debug_man

総合スコア1

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

0クリップ

投稿2023/01/18 11:29

前提

AおよびBというフラグを持つ機能があり、AかつBでなければ実行しない処理が存在する場合について質問です。

実現したいこと

AかつBの判定を実施する関数名として適切な表現を教えていただきたいです。
真偽値を返却し、キャメルケースで記述しています。
Aだけ、またはBだけを判定する関数は IsA() / IsB() としています。
今後Cというフラグが追加されるかもしれないので、IsAandB() というような関数名ではなく、「実行可能なフラグが指定されているか」という汎用的な関数名を検討しています。

試したこと

IsExist~() という関数名では意味が異なるという指摘をいただいており、英語や一般的な関数名に疎いので質問をさせていただきました。

補足情報

Isで始まる必要はないので、英語として自然な変数名も検討していただきたいです。
お手数をおかけいたしますが、何卒よろしくお願い致します。

pogin503👍を押しています

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

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

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

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

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

Zuishin

2023/01/18 12:05

具体的に何を判定する関数なんですか? A と B を判定するという情報しか与えられないのであればそういう名前にするしか仕方ないと思いますが。
thkana

2023/01/18 12:16

isAllTrueとか...あ、isじゃないか。
hoshi-takanori

2023/01/18 14:17

executable が正解な気がする…。というか、どのレベルで物事を考えるかによる、というか。 例えば、自動車が走るには ・故障してない ・ガソリンが入ってる という二つの条件があるとします。この際、isAandB に相当するのは「故障してなくてガソリンも入ってる」になりますが、これだと条件が具体的すぎて汎用性がないですよね。 で、例えば電気自動車も含めることにすると、ガソリンの代わりに ・充電してある という条件が必要になります。そして、呼び出す側はガソリン車か電気自動車かによって「故障してなくてガソリンも入ってる」または「故障してなくて充電もしてある」を使い分ける必要が出てきます。 それは面倒だし、条件が変われば呼び出し側のコードを全部修正する必要があってバグの元になります。それよりも、シンプルに「走行可能である」という関数名にすると良いのでは。
debug_man

2023/01/18 15:40

質問や回答ありがとうございます。 A,Bの具体名を明かすのは差し障りがありそうなので、控えさせていただければと思います。 近い例ですと、あるコンテンツが読み込めるかの判定として「ブック形式か」と「日本語で書かれているか」というフラグがあったとしたとき、IsBookTypeAndJapanese() では汎用性がないという指摘を受けております。 (hoshi-takanoriさんのコメントと同じ指摘です) 皆様からご意見としていただいている executable ですが、この単語を使用する場合は ExecutableRead() というような関数名になるのでしょうか。 恥ずかしながら英語の知識がまったく無く、文法的な正しさを調査する方法が思いついておりません。 恐れ入りますが、英語として誤りがある場合や、もっとよい関数名がある場合は教えていただきたいです。 よろしくお願いします。
Zuishin

2023/01/18 21:51

canReadBook ですかね。
fana

2023/01/19 01:12 編集

そのフラグ群を実際に誰が立てるのかわかりませんが,フラグ立てが実施のための下準備の作業みたいな雰囲気であれば isReadyToExecute みたいな感じのはダメですかね?
Zuishin

2023/01/19 01:38

それは既に回答にある executable と変わらないのでは? 何が実行できるのかを具体的に入れたいですね。
fana

2023/01/19 02:20

(「実施可能か?」と「実施するための準備が整ったか?」とでは微妙にニュアンスが違うかな?とか思ったのだけど,そこに何か価値があるか?と言われると自分でもよくわからない.)
hoshi-takanori

2023/01/19 13:09

質問を誤解してました。 「ブック形式かつ日本語で書かれているか」 「読み込めるか」 という意味レベルの質問ではなく、英語の質問だったんですね。 とりあえず、executable という単語は execute (実行する) という動詞の後に able という接尾辞をつけることで「実行できる」という意味になりますが、助動詞 can を使って canExecute という形にした方が分かりやすいし、canRead のように別の動詞にも応用しやすいでしょうね。 そして、英語が苦手なのは仕方ないとして、意味レベルで悩んでるのか、それとも英語で困ってるのかを他の人が分かるように、関数などの名前に自信がないなら // 「読み込める」という意味の関数名にしたい とかコメント書いたら良いかも…。
debug_man

2023/01/19 14:22

皆様、回答やご指摘ありがとうございました。 hoshi-takanoriさんのおっしゃる通り、基本的な英語の知識と、関数名の付け方に慣れていないという2点のせいで理解しづらい質問をしてしまったと思います。 無事解決致しましたので、完了致します。
guest

回答5

0

ベストアンサー

AかつBということにこだわらない方がよいと思いました。
もっと具体的な文脈を見て命名すべきかなと。

executableという例が既に出ていますが、〜able(〜できる)という名前も良さそうです。

boolean型な名前としては「is」、「has」、「can」、「shoud」、「needs」等の動詞・助動詞を先頭につけると読みやすくなります。リンク先を参考にしたのですが以下のように命名をすると読みやすそうです。

  • hasError
  • shouldContinue
  • userExists
  • displayable
  • needsMigrate

参考

booleanメソッドの命名規則 - Qiita
うまくメソッド名を付けるための参考情報 - Qiita

投稿2023/01/18 14:15

編集2023/01/18 14:20
pogin503

総合スコア65

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

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

debug_man

2023/01/19 14:25

真偽値を返却する際はIs〜のように命名しなければならないと勘違いしていたのですが、pogin503さんの回答の通り、動詞・助動詞を接頭語にした命名をすることに致しました。 また〜ableという記述法も便利だと思いましたので、ベストアンサーとさせていただきます。 皆様ご回答ありがとうございました。
guest

0

標準C++ライブラリでは
all_of : 全部true
any_of : 少なくともひとつはtrue
none_of : 全部false
と命名されています。

https://cpprefjp.github.io/reference/algorithm/all_of.html

投稿2023/01/18 12:27

episteme

総合スコア16614

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

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

0

executable

投稿2023/01/18 12:22

yuma.inaura

総合スコア1451

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

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

0

IsReadableBook(orType)ではだめか?
readableは形容詞ではあるが。
(This) is readable book(or type).は通じる文だと思う

投稿2023/01/19 02:00

ardin

総合スコア544

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

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

0

今後Cというフラグが追加されるかもしれない

それ言い出したらプログラミングなんてできません。isAとisBだけ用意しておいて、後は呼び出し側に委ねるなりします。

事後拡張が課題ならば、C++/javaで継承機能を使うとか、ラッパー(集約)構造を作って汎用性持たせます。いずれにしても命名法の課題と考えるのは不自然です。

投稿2023/01/18 13:53

HogeAnimalLover

総合スコア4830

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

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

Zuishin

2023/01/19 01:33

> それ言い出したらプログラミングなんてできません。 そんなことはないんじゃないでしょうか。 大事なのはどんな条件が整ったかではなく、実行できるかどうかなので。 仮にウィンドウを閉じることのできる条件を canClose とすると、テキスト A が入力された、チェックボックス B がオンにされた、という条件に、選択肢 C が選択されたという条件が後から加わっても、ウィンドウを閉じる際には canClose だけ見れば何の問題もないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問