🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

5回答

4142閲覧

「1|0」でなく「true|false」を使うことに有用性はありますか?

gorimaz

総合スコア26

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

2グッド

6クリップ

投稿2020/11/28 15:01

JavaScriptSとPHPを使ってWEBサイトを作成しています。

いままでは
var is_flag = false;
$is_flag = false;
のように真偽値で実装してきたのですが、
ここにきて、POSTの時は勝手にtrue1になることを知りました!(ウザすぎませんか?w)

そこで疑問で、それならもう一切true|falseは使わずに、1|0でいこうかと思い立ったのですが、これには何か問題があるでしょうか?

自分で思いついた問題は

・「数値がない」という意味での0か?
・「false」という意味での0か?

がわかりにくくなってしまう問題くらいしか思いつかず、なら「数値がない」ときはnullを使えばいいかな、と思っているのですけども、他に何か問題ってあるでしょうか?

Lhankor_Mhy, miyabi_pudding👍を押しています

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

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

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

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

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

miyabi_takatsuk

2020/11/28 17:58

データベースからデータを引っ張りフロントに渡すなどはしますか? データベースは、論理値は保持できないので、必然、API部分は0 | 1で真偽判別せざるをえない、など、 他言語とどう関わらせるかによって変わってきます。
gorimaz

2020/11/29 04:13

ああはい、まさにその状況になって投稿した質問です データベースの1をフロントに出すときtrueに変換しなければならず、でその変換したtrueをPHPに送るときは1に変換され、じゃ最初から1でええやん、と感じました
miyabi_takatsuk

2020/11/29 04:16

わかりました。 その事もどうか、 質問本文に追記お願いします。 また、既出の回答で、その答えを導き出せると思いますよ。
kyoya0819

2020/11/30 05:21

厳密にはtrueは1ではなく、"1"になります。
guest

回答5

0

ベストアンサー

ここにきて、POSTの時は勝手にtrueが1になることを知りました!(ウザすぎませんか?w)

コードの記載も無く質問が曖昧なので説明は控えますが、postで送れるパラメーターについて調べてみてはいかがでしょうか。仕様の誤解によって起きている問題や疑問ならそれだけで解決するかもしれません。

これには何か問題があるでしょうか?

どちらの言語もtrueまたはfalseを返す関数が存在します。また、1===truefalseです。
これらを踏まえて考えればbooleanはbooleanとして扱う癖をつけておけばバグの発生率が下がります。

投稿2020/11/28 15:29

hentaiman

総合スコア6426

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

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

miyabi_takatsuk

2020/11/28 18:03

> どちらの言語もtrueまたはfalseを返す関数が存在します。 ここが大事な観点ですね。 データベースと値のやりとりをする際など、論理値が保持できない言語系、もしくは、文字列でしかやりとりできない場合は、必然、0、1判別にせざるをえませんし、 そうでない場合は、特に同じ言語内ならば、基本、論理値のみの方がいいでしょうしね。 他言語と関わるかどうか、が判断基準になりそう。
gorimaz

2020/11/29 04:14

たしかにバグの発生率といわれると、面倒でもいちいち変換した方が丁寧で正確な気がしますね、ありがとうございます
guest

0

型が意識されない実装は危険でメンテナンス性に欠けます。
一般的には永久にメンテナンスも改修も発生しないものはありませんし、ずっと同じ人がメンテナンスし続けることはありません。
設計書がきちんと残っていればまだ良いですが、ないか、あってもアップデートが適切にされてない場合、コードが最新の設計書となってしまいます。
型がきちんとされているかいないかで、全く知らない人、または数ヶ月数日後の自分に優しいコードになります。
コメントだけを期待、あてにしてはいけません。

投稿2020/11/28 23:21

m.ts10806

総合スコア80875

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

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

gorimaz

2020/11/29 04:15

ありがとうございます。やはりみなさんそうなんですね。面倒でもきちんと型を意識することが重要と知れてよかったです
m.ts10806

2020/11/29 07:01

今の面倒より後々の面倒の方が多くのケースで大きいです。
m.ts10806

2020/11/29 07:02

低評価された方は理由をコメントください。
guest

0

0や1でやってもいいんですが、
ある場面での0や1が数値としての0や1なのかフラグとしてのものなのかわからなくなるのと、
なにか変なデータが入ってきたりしてじゃぁ2や3だったときに0として扱うのか1として扱うのかって
逆に面倒になるっていうか。

フォームでGETやPOSTで受信するデータは基本的に文字列なので
文字列としての0や1も含めると、
PHPはデータ型を意識して処理を書いていかないと、
見誤ることが経験上多いのでtrue|falseを使うと決めたらそれを通すことを
意識的にやったほうがいいです。

PHPだけの話として、これは頭に入れておいたほうが良いです。
PHP isset, empty, is_null の違い早見表 - Qiita
何をtrue|falseと判断するのか、挙動を知っとかないとデバッグのときにハマります。
別の言語ではまた癖が違うので、それはそれで。

投稿2020/11/28 15:28

編集2020/11/29 02:47
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gorimaz

2020/11/29 04:11

ありがとうございます、やはり面倒になることがありそうですね
guest

0

がわかりにくくなってしまう問題

それが大問題です。
数値なのか真偽値なのかわからないってのはやばくないですか?

まあ、それで構わないと言うなら、それまでのはなしですが。

投稿2020/11/28 15:17

y_waiwai

総合スコア88038

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

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

gorimaz

2020/11/28 15:23

ありがとうございます。大問題ですねw 真偽値を現す変数は常に「is_xx」と接頭辞をつけておくのはどうでしょうか?
y_waiwai

2020/11/28 15:26

そこらへんは、普通ならプログラミング規約なんかでプロジェクトごとや会社なんかで決まってるものです。 自分ひとりなら、お好みのままにどうぞってなところですね
gorimaz

2020/11/29 04:11 編集

そうですね、ありがとうございます
guest

0

解決されたようですが、簡単なコメントをします。
0 が false であるのが分かりにくいと言われているようですが、他の言語でも false を意味することが多いです。 ちなみに、 1 が trueではなく、0以外がtrue という取り扱いです。 覚え方としては ゼニ (ゼロは偽:にせ)として覚えれば間違いありません。

「回答に含めるべき内容は回答に追記しましょう。」
と書かれていますので、内容は重なりますが、コメントした分を追記します。

少し大雑把に書きすぎましたね。
何事にも例外はあります。 しかし、例外は基本があっての例外ですから、基本を間違いなく覚えることが必要です。
0 を false とする言語は、多いです。
C, C++, JS, PHP, Perl はそうです。 Javaは文法違反。 Ruby と シェルでは trueと扱われます。
また、文字列が等しい場合、strcmp() の 0 を返しますがこれは文字列間のノルムを計算しているからです。
シェルでは成功した場合0を返すのがエラーがないことを他の数値はエラーコードを示すようになっているのが理にかなっているからです。
false を 0, true を !0 というのは、コンピュータ以前のBool代数の生みの親、ジョージ・ブールの時代から扱われていたようです。

-- ここからさらに追加

コンピューター言語学的には0,1とbooleanとは別物だったと言う考えには賛成いたします。 コード可読性点から言っても、false, trueを使うべきです。

以下は、質問の内容から逸れてしまい雑談レベルとして考えてください。

私の経験から言いますと、実装環境において、0をfalseと同様に取り扱われている事が多いという考え方を覚えているのは有用だと思います。 使うべきではありませんが、特に他人の実装を読み解くときにです。 思い切り排除する必要はないと思います。

コンパイラーやインタプリタよってバイナリに変換された場合、最終的にすべてのコードは、0,1に変換されます。 この時、0をfalseにしたほうが都合が良いことが多いのです。
たとえば、単純なループを作成するとき、レジスタをカウントダウンしてJNZ命令でループの先頭に戻ると言う処理です。 0(false)の時ジャンプせずループを抜けるわけです。

これまで多くの言語設計者は、こう言った事情があって、0 を falseと同様に扱えるようにしてきたのでしょう。 ただし、厳密な論理性を重視した比較的新しい言語においては、CPU アーキテクチャが充実してきた現在、必ずしもそうでは無いです。

これまで静的型付けを回避してきたRubyで、反対に 0 が true として取り扱われているのは興味深いところです。

投稿2020/12/01 11:42

編集2020/12/01 17:18
tichd

総合スコア19

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

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

hentaiman

2020/12/01 12:37

結果が0でないとfalse(仮)として扱って処理が止まるものもあるのでその覚え方はやめましょう
tichd

2020/12/01 14:06 編集

少し大雑把に書きすぎましたね。 何事にも例外はあります。 しかし、例外は基本があっての例外ですから、基本を間違いなく覚えることが必要です。 0 を false とする言語は、多いです。 C, C++, JS, PHP, Perl はそうです。 Javaは文法違反。 Ruby と シェルでは trueと扱われます。 また、文字列が等しい場合、strcmp() の 0 を返しますがこれは文字列間のノルムを計算しているからです。 シェルでは成功した場合0を返すのがエラーがないことを他の数値はエラーコードを示すようになっているのが理にかなっているからです。 false を 0, true を !0 というのは、コンピュータ以前のBool代数の生みの親、ジョージ・ブールの時代から扱われていたようです。
hentaiman

2020/12/01 14:29

>0 を false とする言語は、多いです。 C, C++, JS, PHP, Perl はそうです。  厳密評価では01とbooleanは別物ですので数値をbooleanに置き換える覚え方はやめましょう。 cみたいにbooleanが無い言語で0をfalseと明示的に定義しているならまた別ですが。 > false を意味することが多いです。 厳密評価では通じないので低評価としていましたが、修正された回答内容と合わせて読めば厳密評価の必要性とbooleanをbooleanとして扱う必要性の理解に繋がりそうな回答という事で低評価を外しました。
tichd

2021/05/07 11:56

使うべきではありませんが、特に他人の実装を読み解くときにです。 今は使用すると良くないから過去の歴史は忘れましょうでは進歩がありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問