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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

7回答

5016閲覧

trueにすべきかfalseにすべきか

aaaaaaaa

総合スコア501

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

1クリップ

投稿2015/11/30 03:13

if文の条件などに使われる真偽値は、trueとfalseどちらで統一すべきでしょうか。

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

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

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

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

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

ozwk

2015/11/30 03:17

状況がよくわからないので「true」の場合と「false」の場合のコード例をお願いします
guest

回答7

0

ベストアンサー

if文の中は当然trueとfalseの両方が発生するので「統一」するものではないですね。
ですので、下記の前者で統一すべきか? 後者で統一すべきか?との質問と理解しました。
外していたらすいません。

C++

1if (今日は晴れ) { 2 // 晴れ処理 3} else { 4 // 晴れでない時の処理 5} 6 7if (今日は晴れでない) { 8 // 晴れでない時の処理 9} else { 10 // 晴れ処理 11}

私は原則として前者で統一しようと努力してます。
「晴れ処理」がなく「晴れでない時の処理」だけの時は、後者を使います。
他に、他の処理との絡みで処理の順序を合わせたい等の特殊事情があれば後者を使うこともあります。

あ、間違って条件を逆に書いてしまい、後からヒックリ返した時は後者になってしまうことも結構あります。可読性が低下するのであまり良くないのですが、一度動作確認できた条件文はあまり触りたくないのでつい。

投稿2015/11/30 04:34

Chironian

総合スコア23272

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

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

Chironian

2015/12/02 03:28 編集

> 「否定文より肯定文の方が理解しやすい」 > というのは、心理学で実証されているようですね。 なるほど。 英語圏の人が「それは2重否定だからよくない」と書いているのを見たことが有ります。確かに「晴れでなければ◯◯しよう」、「晴れでないわけでなければ✕✕しよう」では遥かに前者の方が分かりやすいです。 否定から始めると、次は2重否定になるから、混乱しやすいですね。
guest

0

例えば、Trueで統一した結果、THEN節には処理がなく、ELSE節にのみ処理が存在するという結果になってしまったら、どう考えますか?
Trueに統一することで、下記のようなコードが頻発するようだと、特に統一のルールなど設けずに、ケースバイケースで良いのではないかと思います。

C

1 2if (条件式){ 3 // THEN節の処理無し 4} 5else { 6 i = a+b; 7}

投稿2015/11/30 03:41

編集2015/11/30 07:48
KatsumiTanaka

総合スコア924

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

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

0

自分なら「何を判断したくて条件分を記述しているのか」がわかりやすいことを第一に考えます。
例えば、エラーの時に中断したい場合、

VB

1If isError = True Then 2 'エラー時 3 Exit Sub 4Else 5 '正常時 6End If

という感じになると思います。

同じ内容でも、エラーが発生していなければ実行したい、という場合であれば

VB

1If isError = False Then 2 '正常時の処理 3Else 4 'エラー時 5 Exit Sub 6End If

とすると思います。

もちろんどちらの条件も同程度という場合もあります。
そういう場合はTrueを優先して記述することが多いですが、If~Else~EndIfの関係が掴みやすくなるよう処理内容が少ないものを先に記述する場合もあります。
ここは人によって好みが分かれるかもしれません。

VB

1If isError = False Then 2 'エラー処理 3 Exit Sub 4Else 5 '正常処理 6 ・・・ 7 '(1画面に収まらないくらい長いコード) 8 ・・・ 9End If

本題からは少しずれてしまいますが、関数の戻り値についてはより注意深く戻り値を検討しています。

例えばチェック関数の戻り値の場合、基本的にはチェック結果が正常値の場合にTrue、異常値があった場合にFalseとするようにしています。

VB

1If CheckInputValue() = False Then 2 '異常値の場合 3Else 4 '正常値の場合 5End If

となるからです。

ただし、関数名をIsErrorとかFindErrorValueのようにつけた場合は、異常値をTrueとしたほうが自然になります。

大事なのは、何も知らない人がソースを読んだときにできるだけ自然な解釈で読めるよう心がけることだと思います。

投稿2015/11/30 05:32

編集2015/11/30 05:37
jawa

総合スコア3013

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

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

0

そもそも、なぜ統一する必要があるのでしょうか?
どういう理由で統一する必要があるのか疑問に感じます。
臨機応変、統一する必要は特に無いと思います。

投稿2015/11/30 03:51

T.Kanno

総合スコア915

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

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

0

すでにベストアンサーが決まっているようですが、私の場合は次の順で選びます。

##条件チェックする対象の値や論理表現が主(それに合わせてif文条件式を書く)
条件チェック対象の変数やオブジェクトとロジックの表現仕様が先であり、IF文内の表現の肯定否定はそれに合わせた後付けです。

分岐の際に、条件チェックする対象(オブジェクトなど)のプロパティやメソッド戻り値の表現が主で、IF文内の条件式はあくまでその表現と実現したいロジックとを合わせる従の存在です。

ご質問は、IF文で利用する想定の、状態を表現するBoolean変数を抜き出すとしたらどちらにするかとの趣旨なのかな?と解釈しました。

cs

1//開いてたら、閉じる。その1 2bool isClosed = ...; 3if(!isClosed) 4{ 5 Close(); 6} 7 8//開いてたら、閉じる。その2 9bool isOpen = ...; 10if(isOpen) 11{ 12 Close(); 13}

上記をふまえて、IF文の記述について言及させていただくと...私は基本的に

1. IF文条件式のコードを読んで、意味がわかりやすいほうにする。

csharp

1var fs = File.Open(); 2... 3if((fs != null) && (!fs.Closed)) 4{ 5// fsがnullではなくかつ、閉じられていなければ(fs.ClosedプロパティがFalseであれば)、閉じる(fs.Closeメソッドを呼ぶ)。 -> 閉じてほしいんだな。 6 fs.Close(); 7}
2. コード全体が簡素になるほうにしてコードの見通しを良くする

例えばサブルーチンやメソッドを記述している場合、コードが短くなるように、自ルーチン・メソッド内で処理する必要のない条件を先に抽出し、さっさと return してしまいます。 そのあとも、短いコードになるほうを真条件にしてメソッド内の上方に書くことで、自ルーチン・メソッドの可読性・ロジックの見通しやすさが上がります。あるロジックの結果に従属するロジックがあれば、当然その前後関係は保ちますが...

cs

1bool Func(string path, int numOfCopy) 2{ 3 // 引数チェック 4 if(String.IsNullOrEmpty(path)) 5 { 6 return false; 7 } 8 if(!System.IO.File.Exists(path)) 9 { 10 return false; 11 } 12 if(numOfCopy < 1) 13 { 14 return false; 15 } 16 // 本処理 17 int idx = 1; 18 for(... 19 ... 20 ... 21 ... 22 return true; 23}

投稿2015/12/02 00:50

編集2015/12/02 01:01
hsk

総合スコア728

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

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

0

どちらでも構わないと思います。
事前にわかるのであれば、分岐の確率が多い方にしたらいいと思います。

投稿2015/11/30 03:30

yona

総合スコア18155

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

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

0

今日は暖かくないか?みたいなことまで要求されるなら次元は違うかもしれませんが、
文字列が数値か?って問合せなら数値なら true、そうでなければ false 程度で良いのでは?

投稿2015/11/30 03:17

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問