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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

PHP

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

7回答

618閲覧

私の『null』の解釈があっているか、チェックをお願いします。

WeilSpinor

総合スコア170

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

PHP

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2019/03/22 11:33

編集2019/03/22 11:40

###経緯
先日PHPのサーバーサイドプログラミングの勉強を始め、
テキストフォーム送信のHTTPリクエストの条件分岐処理について勉強しているとき、
nullについての理解に迫られました。

nullというものについて、以下の私の解釈が合っているか、チェックして頂けますか?
宜しくお願い致します。

nullとは(私の解釈)

あるとき、世のプログラマーたちは、
「あらゆる種類の値に、2種類の『状態』をもたせたい」と考えた。

そこで、この二つの状態を区別するために、『null型』というデータ型が作られた。

これにより、あらゆる種類の値は、
『null型の値』と『null型でない値』
という具合に、値を二つの状態に分けることができるようになった。

プログラマーたちは
『null型の値』と『null型でない値』に対して、以下のようにコマンドを割り当てることにした:

『null型の値』:中身がnullの変数(または定数)、中身が定義されていない変数(または定数)、中身が""の変数(または定数)
『null型でない値』:上以外の全ての値

これにより、例えば以下のように定義された変数は全てnull型:

javascript

1var hogehoge = null; 2var foo; 3var hensuu = "";

であり、
以下のように定義されたされた変数(または定数)はnull型でない諸データ型:

javascript

1var zero = 0;//整数型数値「ゼロ」 2var hogehoge = 114514;//整数型数値「114514」 3var foo ="こんにちは";//文字列「こんにちは」 4var boolean = true;//ブール値「true」 5var PI = 3.14;//実数型数値「3.14」

という具合に分けられるようになった。

この構造を使って、彼らは、
前者のように、ある値があって、それがnull型であることを、「その値は『null』である」
後者のように、ある値があって、それがnull型でないことを、「その値は『普通の値』である」
という表現を与えることにした。

さらに、『変数』という文脈に限り、これらにかみ砕いた解釈を与えると、
「nullとは、変数に値が定義されていない状態のこと」
「普通の状態とは、変数に何かしらの値が定義されている状態のこと」
ということができる。

こんな感じで間違いないでしょうか?
ご指摘宜しくお願いします。

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

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

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

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

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

m.ts10806

2019/03/22 11:38

どんどんアホな方向にいきますね。もうそのよく分からない寸劇やめませんか? 自己満足でいいのでしょうしQiitaに備忘録でも残したらいいです。 公開にしておけば優しい人の目にとまれば指摘もらえるかもしれませんし。叩かれるかもしれませんし。 少なくともプログラミングから離れていってますのでteratailには不適当です。
m.ts10806

2019/03/22 11:40

だって、質問じゃないでしょ?「チェックお願いします」って依頼でしょ?プログラミングより先にteratailの使い方から覚えたほうが良さそうです。
退会済みユーザー

退会済みユーザー

2019/03/22 11:49

回答にあげるのばからしいから var hogehoge = null; ← null var foo; ← undefined var hensuu = ""; ← empty var aaaaaa = " "; ← blank
WeilSpinor

2019/03/22 11:49

ご回答ありがとうございます。 >少なくともプログラミングから離れていってますので if文を使った条件分岐処理に関する過去質問(https://teratail.com/questions/180737 )において、 nullというものを熟知する必要性を感じたので、質問させて頂きました。
m.ts10806

2019/03/22 11:50

ポエムはQiitaへどうぞ。 おおよそあなたの質問は誰のためにもなりません。
m.ts10806

2019/03/22 11:54

確かに回答するのバカらしいですね。概念知りたければ前に少し紹介したサイトでなんとなく理解すればよろしい。 https://wa3.i-3-i.info/word156.html まともなコードが出てこない質問の連投は荒らしに等しいです。
退会済みユーザー

退会済みユーザー

2019/03/22 11:59

あんたいったい何を目指しているんだ?って感じですね。コンピュータ、情報処理の研究者にでもなるつもりか?
WeilSpinor

2019/03/22 12:02

asahina1979様 ありがとうございます。参考にさせていただきます。
退会済みユーザー

退会済みユーザー

2019/03/22 12:39 編集

PHPで勉強してるのにJavaScriptで質問のソースを書くことに意味がありますかね? ないならPHPに統一したほうがいいし、何ならタグもPHP, Nullだけにしていいと思うのだが
think49

2019/03/22 12:38

HTMLにNull型はありません。
m.ts10806

2019/03/22 22:36

(2回目) プログラミングより先にteratailの使い方から覚えたほうが良さそうです。
guest

回答7

0

唯一解はない

既出の通り、答えは言語によって仕様が異なるですが、WeilSpinor さんの今までの質問を顧みるに、考え方を根本から変えていく必要性を感じます。
最近、読んだQiita記事で興味深かったものがあるのですが、

本質問で WeilSpinor さんに当てはまると私が思うポイントは、9 | 複数の答えの間の「良い」と「悪い」の連続性に気付かず、「正しい」答えを望んでいるです。

スキルやプログラミングを学び始めるとき、学生はしばしば彼らがしたことが「正しい」かどうかを知りたがっています。その答えは「場合による」です。

WeilSpinor さんは複数の言語仕様をまとめて、「一つのNull型の設計思想」を作り上げようとしましたが、そんなことはあり得ません。
人に依って「正しさ」の見解が違うように、状況によっても「正しさ」は変化します。
本質問を真面目に回答するなら、次のようにケース別に回答する事になります。

  • C言語ならば、~です
  • JavaScript言語ならば、~です
  • PHP言語ならば、~です
  • HTML言語にNull型はありません

JavaScript, PHPだけ仕様書URLをリンクしておきます(C言語は知りません)。

延々と理論を語っているだけ

「考え方を根本から変えていく必要性」の続きですが、WeilSpinor さんの過去質問の下記文言が気になっていました。

調べたのですが、延々と理論を語っているだけで、
「どこに何を書けば、何のデータがどこに送られるようになる」
といった具体的な書き方を述べている記事がどこにもありません。

その「延々と語っている理論」を理解しなければ、先に進めないから理論を語っているのだと私は思います。
私が回答で書いた内容も「延々と理論を語っているだけ」と思われて、仕様書リンクだけ参考にしているようであれば、おそらく、あなたはプログラマに向いていません

Re: WeilSpinor さん

投稿2019/03/23 04:02

think49

総合スコア18156

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

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

think49

2019/03/23 04:16

To: WeilSpinor さん あと、「物事をイメージで捉える癖」は直した方が良いです。 文章は「書いてある文言通り」に解釈すれば良いのです。 自分の主観というフィルターを通した時点で理解度は大きく低下します。 特にプログラミングは論理的な思考が求めらられる技術なので、日本語を論理的に解釈する力が必要になります。 でなければ、仕様書を解読できません。
WeilSpinor

2019/03/23 04:53

ご回答ありがとうございます。 >その「延々と語っている理論」を理解しなければ、先に進めないから理論を語っているのだと私は思います。 その件ですが、確か、ブラウザに表示されたHTMLページとサーバーのバックエンドプログラムの連携のため、HTTP通信のやり方を知りたい、という話だったと思います。 その時の私のリサーチ状況では、 「ブラウザーはサーバーにほしい情報を要求するHTTPリクエストを送り、それに対してサーバーはHTTPレスポンスをブラウザーに返す」 「HTTPリクエストは、以下のようなデータが記録されている: 送信メソッド(GETかPOSTか)、文字コード、etc...」 「HTTP・TCP通信、アプリケーション層、ネットワーク層……」 といった『HTTP通信の原理』はよく説明されているが、 実際に「HTMLの情報を処理するプログラムを作成する」上での、 『実用方法、実装方法の理論』 つまり「HTMLにおけるフォーム送信機能」という概念について、併せて説明している記事を見つけることができずにいたのです。 (フォーム送信機能について別個に説明している記事はたくさんありましたが、そこではHTTP通信の原理や、サーバーのPHPスクリプトへの値の渡され方についてはほぼ書いていなかったりいたりして、通信原理と実用のリンクが見えずらく、理解には少し心もとなかったのです) つまり、私の当時の発言には少し語弊があって、 「延々と理論を語っているだけで、具体的なことが書いてある記事がない」 のではなく 「HTTPの『通信原理』と、HTML機能を使った『実装方法』、サーバー側のPHPスクリプトへの『値の渡され方の理論』、これら、三つの理論について同時に解説した記事がなく、3者間の理解のリンクが得られず困っている」 と言うべきだった、と今になって思いました。
WeilSpinor

2019/03/23 06:18 編集

>あと、「物事をイメージで捉える癖」は直した方が良いです。 文章は「書いてある文言通り」に解釈すれば良いのです。 確かに、NULLというものを『ただのプログラミングにおける歯車の一つ』というミクロな視点で捉える場合においては、書いてある文言通り、マニュアルに書いてある定義、レベルのことだけを考えていればよく、それ以上のことを気にするのはあまり意味がなかったのかもしれません。 おっしゃる通り、私はNULLが出てきたとき、まず『NULLの設計思想』が気になり、 設計思想を理解すれば、『NULLの具体的な使い方、活用方法』も自然な形で理解できる(しかも記憶に定着しやすい)と思い、質問に至った次第です。 このように、物事をマクロな視点で考える際は、『イメージ的な思考』が入ってくるものですが、 しかし、もしかしたら、「実用的なプログラミングの技術を学ぶ」という文脈においては、遠回りしすぎなところもあったかもしれません…。 「書いてある文言通り」≒『ただ、そこにある』=raison d'etreの精神が大事、ということで覚えておこうと思います。 また、ご指摘の通り、これからは「良い・悪いの連続性」については気を付けて質問しようと思います。 ご回答ありがとうございました。
退会済みユーザー

退会済みユーザー

2019/03/23 05:15 編集

> 「正しさの連続性」 読解力ないね…。 「良い」「悪い」の連続性とは書いてあるけど、「正しさの連続性」なんて書いてない。 プログラミングにおいて「正しさ」というものがないと言っているんですよ。
WeilSpinor

2019/03/23 05:14

Kosuke_Shibuya様 ご指摘ありがとうございます。 ただの記述ミスです。「何が良い考え方かは、置かれた状況によって変化する」ということですよね。
think49

2019/03/23 05:47 編集

To: WeilSpinor さん > 「HTTPの『通信原理』と、HTML機能を使った『実装方法』、サーバー側のPHPスクリプトへの『値の渡され方の理論』、これら、三つの理論について同時に解説した記事がなく、3者間の理解のリンクが得られず困っている」 著者(記事を書く人)の立場で考えて下さい。 著者からすれば、それら全てを網羅する記事を一つ書くよりも、それぞれの単一記事を書く方が汎用性が高くなり、対象の訪問者層を広く取れます。 それらすべてを網羅する一つの記事は、訪問者層がニッチ過ぎます。 「ある内容を調べる時に複数の情報源から情報を得て、整理する」のはプログラマに必要な技能ですので、そこは克服して下さい。 > 確かに、NULLというものを『ただのプログラミングにおける歯車の一つ』というミクロな視点で捉える場合においては、書いてある文言通り、マニュアルに書いてある定義、レベルのことだけを考えていればよく、それ以上のことを気にするのはあまり意味がなかったのかもしれません。 「気にする必要がない」というよりも「不定」という認識が正しいと私は考えます。 私はよく「仕様書に書かれていない事は実装依存」という表現を使いますが、それはそういうことです。 また、「不定なもの」をあなた自身のイメージで確定させることで齟齬が報じます。 コミュニケーション上もイメージで相手に伝えれば、伝達率が大きく低下します。 例えば、質問者が伝えたイメージを回答者が20%の理解度で解釈し、20%の理解内容を元に回答者が伝えたイメージの20%の理解度で質問者が解釈するとしたら、巡り巡って4%の理解度になるわけで、効率が著しく低いといえます。 確定した「事実」を元にすれば、伝達率は100%です。 だから、私は「たとえ話ではなく、コードで伝えて下さい」と主張します。
WeilSpinor

2019/03/23 06:16 編集

>それらすべてを網羅する一つの記事は、訪問者層がニッチ過ぎます。 「ある内容を調べる時に複数の情報源から情報を得て、整理する」のはプログラマに必要な技能ですので、そこは克服して下さい。 はい。 複数の別々の情報を別々に理解し、それらを自分自身の力で自信を持って『繋げ』て、目的の事柄の包括的理解を得る。 これができるようになれば、マニュアルさえ見れば、何だって自分でできるようになる。 早くその域に至りたいです。 その『情報の整理整頓能力』『複数情報の連結能力』を磨くためには、 結局、 ・「まずは勘違いや失敗を恐れず、自分の理解に自信をもつ(フリをしてでも)こと」 ・「そしてその理解を、とにかく実行する、他人に発信する」 ・「失敗していたら、他の技術者やデバッガーに指摘を受け、修正する」 これを繰り返すことなんですかね…。 (一応、この『NULLの設計思想』の解釈についてのこの質問も、『概念の理解力』を磨くためのトレーニングの一環のつもりではあったんですが、それは具体的な『コーディングの方法を聴く場』であるteratailの趣旨には反する、という感じですかね…。だとしたらすみません…。) teratailの力も借りつつ、頑張りたいと思います。
Zuishin

2019/03/23 06:21

その前に「小芝居を入れなくても意味がわかるくらい書かれたものを熟読する」が抜けています。
think49

2019/03/23 06:41 編集

To: WeilSpinor さん > ・「まずは勘違いや失敗を恐れず、自分の理解に自信をもつ(フリをしてでも)こと」 違います。 私が書いていない事を想像で補完して「理解したフリをする」のは止めて頂きたいのですが…。 それも直すべき「癖」ですよね。 文章を読んで理解度に自信がないのであれば、あなたの中でいくつかの仮説を立てて、コードを書いて検証して下さい。 「トライアンドエラー」の精神が足りていないと思います。 「事実」は絶対に変わりませんが、あなたの中で生まれた「想像」や「感想」は不安定なものです。だから、自信が持てないのです。 確信が持てる程の「明確な事実」に辿り着くまで「検証」を繰り返せば、それが自信に繋がります。 文章を読んで、「分からない内容」が多岐にわたっているのであれば、それはあなたが取り組む課題として難易度が高すぎます。 もっと、低難度の課題から取り組むようにしてください。 理解する方法の一つに「分割統治法」があります。 https://www.google.com/search?q=%E5%88%86%E5%89%B2%E7%B5%B1%E6%B2%BB%E6%B3%95&ie=UTF-8 https://ja.stackoverflow.com/help/mcve > (一応、この『NULLの設計思想』の解釈についてのこの質問も、『概念の理解力』を磨くためのトレーニングの一環のつもりではあったんですが、それは具体的な『コーディングの方法を聴く場』であるteratailの趣旨には反する、という感じですかね…。だとしたらすみません…。) 基本的に、一問一答の場であると理解しています。 「質問の内容が広範囲」であったり、回答を理解する為の追加質問が多く発生するようであれば、それは家庭教師の域になるので、teratailの領分ではないと考えます。 「質問するときのヒント」にも「teratailはサポートセンターではなく、思考するエンジニアの為のQ&Aコミュニティ」とあります。 https://teratail.com/help/question-tips#questionTips1 それを他人に求めるのであれば、お金を払ってスクールにでも通うほうが現実的です。 無料で与えられるものには限度があるのです。
think49

2019/03/23 06:46

> 『概念の理解力』を磨くためのトレーニングの一環 文章の読解力という意味であれば、それは国語的な意味合いが強いので、teratailの領分ではないと考えます。
guest

0

質問タグに多数言語を書かれていますが、それぞれの仕様書を当たってください。それ以外に解釈のしようはありません。

投稿2019/03/22 11:41

kei344

総合スコア69364

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

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

WeilSpinor

2019/03/22 11:43

なるほど、そういうものなんですね…。了解しました。
guest

0

「null」でググったところ、一番上にあったページがこれでした。

プログラミング言語などにおいて、nullやnilといった予約語や定数名のものなどの意味がどういったものかは言語により、場合によっては実装ごとに違う。

Null - Wikipedia

いわゆるググレカスってやつですね。

投稿2019/03/23 06:48

Lhankor_Mhy

総合スコア35865

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

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

0

ベストアンサー

どこでも触れられないので

これにより、例えば以下のように定義された変数は全てnull型:

javascript

1var hogehoge = null; 2var foo; 3var hensuu = "";

とのことですがjsでtypeofをとれば,"object", "undefined", "string"となり、全て"null型"ではありません。
"null型"はおそらく、PHPマニュアルを見ての言葉だと思いますが、他の種々の回答にあるとおりことほどさように言語依存です。

投稿2019/03/25 02:15

papinianus

総合スコア12705

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

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

0

Cのタグがあるので、Cについてのみ説明します。

Cには、標準ライブラリのマクロとして用意されているNULLはありますが、nullはありません。Cでは厳密に大文字小文字を区別するため、nullNULLは別のものとして扱います。nullと言うものは自分で宣言しない限り、存在しません。予約語でも何でも無いので、変数名としても使えます。

C

1#include <stdio.h> 2 3int main(void) 4{ 5 int null = 1; 6 printf("%d\n", null); 7}

なお、NULLも標準ライブラリの中のマクロとしてしか存在しないため、マクロが定義されたライブラリヘッダーをincludeしない場合はNULLすらありません。ライブラリヘッダーのincludeによって定義されたNULL自体もただのマクロであり、ヌルポインター(null pointer、ナルポインターとも)である実装依存の表現です。

いずれにしても、Cにおいては、あなたの解釈は根本から間違っています。

投稿2019/03/23 00:02

raccy

総合スコア21733

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

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

0

PHPの場合から類推して考えていらっしゃるのだと思うので、PHPについて説明しますね。

※注意してほしいのですが、以下の説明はPHPに関するもので、他の言語には必ずしも当てはまりません。

あるとき、世のプログラマーたちは、
「あらゆる種類の値に、2種類の『状態』をもたせたい」と考えた。

そこで、この二つの状態を区別するために、『null型』というデータ型が作られた。

最初から「null型」といった抽象的なものを考えてそれを作ろうとしたわけではありません。というか、PHPは他のいろいな言語からパクってきた概念で自分自身の言語仕様を説明する、ということを非常によくやりますが、「null型」もそうした後付けの説明のひとつにすぎません。

もともとは、「空」であるか否か、つまり「あるデータがメモリ上の一定の領域を占めているか否か」を判定していました。
この場合、数値は一定の長さのバイト列で表されるので全て「空ではない」ことになり、文字列は長さがゼロなら「空」、長さがあれば「空ではない」、ということになりました。
これらはempty()で判定できますね。

PHPが (というか前身のPHP/FIのときかもしれませんが) 変数を使えるようになったときに、この「空」であるか否かの判定では不都合が生じました。
当初、変数は「名前がついていて、それを値を入れる領域と関連づけてある」ものとして実装されたので、まだ一度も値を代入していない変数 (値を入れる領域がないもの) は「空」です。しかし一度でも値を代入すれば、「空」の値 (前の段落で説明した意味で) を代入してももはや「空ではない」ことになります。
これでは困るので、変数の値を未定義にできるようにunset()を、未定義かどうかの判定にisset()を導入しました。

ここでnullが必要になります。未定義の変数から値を取り出そうとするとブログラムが止まってしまうのも不都合なので、そういう場合はあたかも「何もないという値」が代入されていて、それが取り出されたかのように動作させることにしました。この「何もないという値」とみなせるものをnullと呼ぶことにし、後に (おそらく他の言語の仕様を参考に)「null型という型の唯一の値」という定義を与えました。

以上のようなわけで、PHPのnullは「未定義値を表すもの」と理解しておけばいいと思います。


通常なら「null型というものがあってだな、」と、天下り式に言語仕様を説明すればいいと思うのですが、PHPの場合は上にも書いたように仕様の建て増しを繰り返してきており、その楽屋裏が初学者にも垣間見えてしまって混乱させるようなところがあるため、経緯の説明を試みてみました。


[追記] コメントを受け、「当初」という言葉を補いました。今の変数やempty()の挙動はまた異なります。

投稿2019/03/23 06:07

編集2019/03/23 08:07
ikedas

総合スコア4227

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

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

think49

2019/03/23 07:18

> 未定義かどうかの判定にisset()を導入しました。 調べたところ、isset() は「未定義 or NULL」を判定していて、「未定義判定」は empty() が正解ではないでしょうか。 http://php.net/manual/ja/function.isset.php http://php.net/manual/ja/function.empty.php しかし、未定義の変数参照は NULL を返す規定なので、isset($foo) と $foo === null が等価となり、isset() の存在理由にモヤモヤしたものが残ります。
退会済みユーザー

退会済みユーザー

2019/03/23 07:44

かんぜんな横槍 think49> >「未定義判定」は empty() が正解 empty()も「未定義 or $v == false」って判定してるはずで、むしろ未定義判定から離れてるんでは? >isset() の存在理由にモヤモヤしたものが残ります is_null()とisset()の違いは未定義変数が引数に渡されたらエラーはくか、はかないかなんで、一応存在してもらわないとこまるっちゃあ困るんじゃないでしょーか
退会済みユーザー

退会済みユーザー

2019/03/23 07:46

エラー抑止用かと $foo === null : ノーティスレベル出力 isset($foo) : ノーティスレベル未出力
think49

2019/03/23 07:52

To: magenda さん、asahina1979 さん ありがとうございます。 notice回避が理由なんですね。
ikedas

2019/03/23 07:55

>think49さん かつてのempty()は変数を引数にとった場合、変数参照が「空」(未代入) のときに真を返していました。今当時のバージョンで確認できないですが、一旦何か代入するとその後unset()してもempty()の結果は偽になったままだったはず。 その後につじつま合わせで仕様を変えてきた結果、isset()、empty()、is_null()といった少しずつ違うものがある理由がよくわからなくなっていますね。
think49

2019/03/23 09:17 編集

すみません。読解が足りませんでした。 empty() は「falsy値 or 未定義」、isset() は「NULL or 未定義」なので、未定義判定は isset() の方が近いですね。 真の意味で未定義判定する関数は用意されていないようです。
guest

0

あんまし難しく考えすぎです
アドレス0がNULLです。(C言語)そんだけのはなし。
アドレスが0のオブジェクトは存在し得ないため、エラーの場合にも使われたりなんかします
また、グローバル変数は起動時に0で初期化されます。
#C言語の場合、ね

投稿2019/03/22 11:51

y_waiwai

総合スコア87719

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

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

raccy

2019/03/22 22:51

C言語の仕様において、NULLのメモリ上の表現が整数値の0と同じであるとか、オール0ビットになっているとか、そういう風になっているとは限らないというのは有名な話ですよ。リテラル`0`をvoid *型にキャストするとNULLになるというだけで、実際の値が数値の0と同じあるという保証はどこにもありません。
退会済みユーザー

退会済みユーザー

2019/03/22 22:55

0 と \u0000 は別物
y_waiwai

2019/03/22 23:48

しかし、たいていは0ですぜ。 そして、NULLが0である環境においても、メモリアドレス0が有効な環境というのも存在します。 これ、どう説明します? 例外が一つでもあればそれは間違い、というなら、エラーでNULLを返すという仕様も破綻しますぜw
raccy

2019/03/23 00:14

「ほとんどの場合は正しい」と「必ず正しい」は違うんですよ。今の回答では「必ずそうである」と言うことしか読み取れません。 あなたが言っていることは「カラスは黒い」と言っているようなものです。一般人への説明はそれでいいかもしれませんが、鳥類学者にとっては受け入れがたいものでしょう(アルビノや突然変異で白いカラスが存在することは知られています)。teratailの回答を見るのは素人の一般人では無く、プロフェッショナルなエンジニア、または、その卵です。そのような人達に、不正確な情報を与えるべきではありません。 一言「ほとんどの環境では」という言葉を付けるだけでもいいのです。それだけで捉え方は全く異なってきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問