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

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

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

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

Q&A

解決済

3回答

5859閲覧

関数の戻り値 TrueとFalseの使い分けについて

pocket8137

総合スコア60

関数

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

0グッド

1クリップ

投稿2017/09/18 14:11

関数の戻り値に真偽値を使用する場合、以下の2つの考え方を耳にします。

  1. TrueとFalseの語源から、
    1.1 正常終了の場合 : True
    1.2 異常終了の場合 : False

  1. 正常終了のステータスコードが0, エラーが1で、
    Trueが1、Falseが0であるので、
    1.1 : 正常終了の場合 : True
    1.2 : 異常終了の場合 : False

どちらの言い分にも一理あり、どちらがいいかは人によるとは思います。
ですが、チームで開発する以上、方針はどちらかに決めるべきだと思うのですが、一般的にはどちらが採用されるのでしょうか。

また、こういったコーディング規約をまとめたガイドラインなどはないのでしょうか。

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

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

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

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

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

guest

回答3

0

結論は「どちらの言い分も的外れ」ですね。

関数にしろ変数にしろ、それがどんな機能を持っているかを明確にして命名すべきであり、そこのところが全然分かっていないからtrueを返すべきかfalseを返すべきか、みたいな、頓珍漢な事で悩むんでしょう。

bool judge(int a){} みたいな命名してたりするんじゃないですか?

bool canDivideBy3(int a){} なら、与えられたaに対してどっちが返るべきかは一目瞭然だと思いますけど。

着目すべき場所がおかしいんですよ。

フレームワークとかでModelの大元の呼び出しとかはどうしたらええの? bool Model::exec(){} やねんけど、みたいなのはまぁ、好きにしたら良いんじゃないですかね。

だからまぁ、ステータスじゃなくフラグを返す関数なのに良い命名ができないとしたら、それは関数がでか過ぎて機能が複雑だって事なんですよね。そしたら何をすべきかも見えてくるでしょ。

投稿2017/09/19 04:57

編集2017/09/19 05:17
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

真偽を返却する、ということに対して、これ以上決める方針はないですよね。
多分、

1.正常終了のステータスコードが0, エラーが1で、Trueが1、Falseが0であるので、

からの記述については誤記で、

2.正常終了のステータスコードが0, エラーが1で、Trueが1、Falseが0であるので、
2.1 : 正常終了の場合 : False
2.2 : 異常終了の場合 : True

ではないですか?
そうだと仮定して、質問を以下に解釈して回答します。

正常/異常を真偽で返却する時に、どちらをTrue/Falseにしますか?

正常=Trueの方が誤解しないと思います。

エラーステータスの場合の主語はエラーであるのでエラーで無い時に0とするのは一般的で、
かつエラーの内容で細かく1,2,3・・・などと拡張したりしますが、前提として正常/異常の2値だけで扱うのは既に別物です。

それでも同様に主語をエラーにしたエラーステータスとするなら、異常=Trueとすれば筋は通っていますが、真偽という2値にした時点で、真/偽=正常/異常と解釈する人の方が多いと思われます。

関数の名前次第ですが、IsNull()とかIsError()とか関数名が処理を明確に表しているなら誤解はないですが、エラーステータスを引き合いに出される位なので、そういった処理ではないのでしょう。
主語をエラーにしない、例えば「実行結果」として、正常/異常=True/Falseとするのが良いのではないでしょうか。

投稿2017/09/18 23:44

編集2017/09/19 10:23
sazi

総合スコア25195

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

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

0

もっと言語なり環境なりを限定しないとなんとも言えませんが、真偽値を返す関数ならば、真を返すのも偽を返すのも正常終了というのが一般的かと思います。たとえば、「人を引数にとって選挙権があるかどうか返す関数」なら、年齢や住民票などをもとに判定して、選挙権があるなら真値、ないなら偽値を返しますが、どちらも正常終了でしょう。
こういう場合、例外機構があれば異常終了は例外を投げるのでしょう。先の関数で人じゃなくて犬が引数に与えられた、とか。

投稿2017/09/18 14:30

編集2017/09/18 14:31
unau

総合スコア2468

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問