0

求人広告を読んで、要件 (ため息) は、応募者が多かれ少なかれvariable !== FALSE. ただし、非常に便利だと思うので、これの理由はわかりません。

関数 ( get_user( int user_id )) が成功しない (要求されたユーザーを見つける) 場合に FALSE を返すとします。単純に次のように使用できます。

user = get_user(823);

if(user !== FALSE) {

   // User found   

} else {

  // No user found

}

もちろん、単純に を使用することもできif(!user)ますが、特に満たす必要のある条件がいくつかある場合は、常に適しているとは限りません。

このようなコードを書くことの欠点はありますか?

明確化: これはよりグローバルな質問です。広告は の PHP の使用!== FALSEと C# の使用に反対していたから!= FALSEです。

4

7 に答える 7

2

あなたは get_user が成功しなかったときに false を返すと言いますが、それが問題のほとんどです。関数呼び出しが成功しない場合、例外をスローし、タイプ セーフではない応答 (ユーザーではなく "false") を返さないようにする必要があります。

于 2012-08-15T12:49:29.273 に答える
1

あなたは偶然に行うことができます

if($variable = FALSE)

そして、これはの値を変更します$variable

于 2012-08-15T12:48:57.707 に答える
1

Javascript では、次の 2 つが同等です。

user != FALSE

!user

ただし、これは少し異なります。

user !== FALSE

これは === の否定であるため、値と型の両方が同じであることをチェックします。

参照:

于 2012-08-15T12:54:34.530 に答える
0

実際、それは言語に依存します。

C

プログラム言語Cでは、ブール値はなく、TRUEまたはFALSEが定義された値であり、ほとんどの場合、TRUEの場合は1、FALSEの場合は0です。ただし、これは一種の規則であるため、FALSEを-1、TRUEを255と定義するものもあります。これにより奇妙な動作が発生するため、Cでは常に定義された値をチェックし、それらの値が一致することを確認します。

また、Cでは、「a==FALSE」の代わりに「FALSE==a」を使用するのが最善の方法であると考える人もいます。その理由は、1つの=を忘れると、最初の(FALSE == a)でコンパイルエラーが発生し、2番目の=が割り当てとして扱われるためです。これは、明らかに意図しないものです。

C#

ただし、C#では、trueとfalseが事前定義されており、変数をtrueとfalseに対してチェックすることはまったく役に立ちません。a == trueは、単にaを書くのとまったく同じことを意味します。

Python

ただし、Pythonでは変更があります。a == trueは、変数aがブール値であることを意味します。「a」とだけ書くと、0、[]、{}、または任意の初期値になる可能性があることを意味します。

少しオフトピック:そのような詳細が「仕事の要件」の一部である場合、仕事の要件は10,000ページのようになると思います。

于 2012-08-15T13:13:40.060 に答える
0

Javaにある場合

Boolean flag1 = new Boolean(true);
Boolean flag2 = new Boolean(false);

if (flag1 == Boolean.TRUE || flag1 == Boolean.FALSE) // is false.
if (flag2 == Boolean.TRUE || flag2 == Boolean.FALSE) // is false.

if (flag1 != Boolean.FALSE && flag2 != Boolean.FALSE) // is true

== FALSE または != FALSE を使用すると、思ったように機能しない可能性があるため、より冗長になる一方で、エラーが発生しやすくなります。

于 2012-08-15T12:49:07.870 に答える
0

要件として求められるものは、味と使用分野に関連している可能性があります。

厳密な論理システムでは、(あらゆる種類のストアまたはメモリ内の) オブジェクトを表す ID 値を 0 以外 (および正の数のみ) に選択する傾向があります。

これにより、存在しないオブジェクト (いわゆる NULL オブジェクト) を表す 0 を持つ余地が残されます。

また、負の数は、エラーなどのメタ情報を通知するために使用できます。ただし、厳密なシステムでは、負の数を使用してはならず、データフローのメインラインではなく、何らかのコンテキストでメタ情報を渡す必要があります。

おそらくこれが求められているものです。その場合、FALSEシステム全体は数値のみに関するものであるため、値は存在しません。

このようなシステムの利点は、ほぼすべてのプログラミング言語で、さまざまなパラダイムにわたって機能することです。

また、一般的に数字のゼロは偽の状態を表し、ゼロ以外の数字は真の状態を表します。

于 2012-08-15T12:54:34.670 に答える
0

開発者の観点からは、FALSE と評価される別の値を返さないメソッドを設計することをお勧めします。たとえば、関数は の複数の可能な値を返すべきではありません0 or NULL or FALSE or "" (empty string) or empty array()。これは、後で結果を確認するためにいくつかの明白でないロジックが必要になるためです。

一方、PHP について話す場合、いくつかの関数がゼロまたは false の両方を返すことを知っておくとよいでしょう (strpos など)。if (!strpos(...))文字列が他の文字列に含まれていないことを意味すると仮定しないでくださいFALSE。場合によっては、関数が失敗時に FALSE を返したり、成功時に空の配列を返したりすることもあります (これは に評価される結果を生成しませんでしたTRUE)。

したがって、これが必要または有用な場合があることを指摘してください。ただし、一般に、FALSE と評価される複数の値を返すことは悪い習慣であるため、比較演算子に型を含める必要があります。

于 2012-08-15T12:53:53.260 に答える