teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

内容の補足

2020/12/01 17:18

投稿

tichd
tichd

スコア19

answer CHANGED
@@ -10,4 +10,19 @@
10
10
  C, C++, JS, PHP, Perl はそうです。 Javaは文法違反。 Ruby と シェルでは trueと扱われます。
11
11
  また、文字列が等しい場合、strcmp() の 0 を返しますがこれは文字列間のノルムを計算しているからです。
12
12
  シェルでは成功した場合0を返すのがエラーがないことを他の数値はエラーコードを示すようになっているのが理にかなっているからです。
13
- false を 0, true を !0 というのは、コンピュータ以前のBool代数の生みの親、ジョージ・ブールの時代から扱われていたようです。
13
+ false を 0, true を !0 というのは、コンピュータ以前のBool代数の生みの親、ジョージ・ブールの時代から扱われていたようです。
14
+
15
+ -- ここからさらに追加
16
+
17
+ コンピューター言語学的には0,1とbooleanとは別物だったと言う考えには賛成いたします。 コード可読性点から言っても、false, trueを使うべきです。
18
+
19
+ 以下は、質問の内容から逸れてしまい雑談レベルとして考えてください。
20
+
21
+ 私の経験から言いますと、実装環境において、0をfalseと同様に取り扱われている事が多いという考え方を覚えているのは有用だと思います。 使うべきではありませんが、特に他人の実装を読み解くときにです。 思い切り排除する必要はないと思います。
22
+
23
+ コンパイラーやインタプリタよってバイナリに変換された場合、最終的にすべてのコードは、0,1に変換されます。 この時、0をfalseにしたほうが都合が良いことが多いのです。
24
+ たとえば、単純なループを作成するとき、レジスタをカウントダウンしてJNZ命令でループの先頭に戻ると言う処理です。 0(false)の時ジャンプせずループを抜けるわけです。
25
+
26
+ これまで多くの言語設計者は、こう言った事情があって、0 を falseと同様に扱えるようにしてきたのでしょう。 ただし、厳密な論理性を重視した比較的新しい言語においては、CPU アーキテクチャが充実してきた現在、必ずしもそうでは無いです。
27
+
28
+ これまで静的型付けを回避してきたRubyで、反対に 0 が true として取り扱われているのは興味深いところです。

3

訂正

2020/12/01 17:18

投稿

tichd
tichd

スコア19

answer CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  少し大雑把に書きすぎましたね。
8
8
  何事にも例外はあります。 しかし、例外は基本があっての例外ですから、基本を間違いなく覚えることが必要です。
9
- "ほとんどの言語" と書きましたように、0 を false とする言語は、多いです。
9
+ 0 を false とする言語は、多いです。
10
10
  C, C++, JS, PHP, Perl はそうです。 Javaは文法違反。 Ruby と シェルでは trueと扱われます。
11
11
  また、文字列が等しい場合、strcmp() の 0 を返しますがこれは文字列間のノルムを計算しているからです。
12
12
  シェルでは成功した場合0を返すのがエラーがないことを他の数値はエラーコードを示すようになっているのが理にかなっているからです。

2

内容が不十分だったので追記。

2020/12/01 14:05

投稿

tichd
tichd

スコア19

answer CHANGED
@@ -1,2 +1,13 @@
1
1
  解決されたようですが、簡単なコメントをします。
2
- 0 が false であるのが分かりにくいと言われているようですが、他の言語でも false を意味することが多いです。 ちなみに、 1 が trueではなく、0以外がtrue という取り扱いです。 覚え方としては ゼニ (ゼロは偽:にせ)として覚えれば間違いありません。
2
+ 0 が false であるのが分かりにくいと言われているようですが、他の言語でも false を意味することが多いです。 ちなみに、 1 が trueではなく、0以外がtrue という取り扱いです。 覚え方としては ゼニ (ゼロは偽:にせ)として覚えれば間違いありません。
3
+
4
+ 「回答に含めるべき内容は回答に追記しましょう。」
5
+ と書かれていますので、内容は重なりますが、コメントした分を追記します。
6
+
7
+ 少し大雑把に書きすぎましたね。
8
+ 何事にも例外はあります。 しかし、例外は基本があっての例外ですから、基本を間違いなく覚えることが必要です。
9
+ "ほとんどの言語" と書きましたように、0 を false とする言語は、多いです。
10
+ C, C++, JS, PHP, Perl はそうです。 Javaは文法違反。 Ruby と シェルでは trueと扱われます。
11
+ また、文字列が等しい場合、strcmp() の 0 を返しますがこれは文字列間のノルムを計算しているからです。
12
+ シェルでは成功した場合0を返すのがエラーがないことを他の数値はエラーコードを示すようになっているのが理にかなっているからです。
13
+ false を 0, true を !0 というのは、コンピュータ以前のBool代数の生みの親、ジョージ・ブールの時代から扱われていたようです。

1

わかりやすいように情報の追加

2020/12/01 14:04

投稿

tichd
tichd

スコア19

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