- ベストアンサー
プログラミングでなぜ、数字から始まる変数は使えない
プログラミングでなぜ、数字から始まる変数は使えないのでしょうか?
- みんなの回答 (14)
- 専門家の回答
質問者が選んだベストアンサー
>0a1cc93 これでも私はなにも混乱しません いや~混乱したほうがいいです!。 画像を貼りましたが、 $oct=01234; これは、 $octへ668を代入する命令です!。 計算式は、 =1*8*8*8 + 2*8*8 + 3*8 + 4; =512+128+24+4 =668 実際にPHPで実行してみてください。 見たままの数字がすでに違う意味を持っていることの 実験ができると思います。 先ほどの"0x"+[0-9a-f]も、一緒にテストしてみると、 色々わかってくるかもです。 https://www.php.net/manual/ja/language.types.integer.php で、最終回答ですが、なぜ数字から始まる変数が使えないか? 答えはこれなんですが、これを満たす場合に数字になる。 decimal : [1-9][0-9]*(_[0-9]+)* | 0 今回の、サンプルの668になった理由と、0xの正規表現もURLに説明があるので、 オフィシャルサイトがいう事なので、見て損はないのと、間違いはないですから。 私が今回、先頭に数字を書いてるのに別の動作をするものを紹介したと思いますが。 それが、なぜ大事なのか、すこ~し! 感じてもらえたらなら、私はうれしいかなと。 思います!。 ではでは!
その他の回答 (13)
- heyboy
- ベストアンサー率21% (1852/8730)
まあ、完全に蛇足ですが、 人は「自分が正しい」と 思うものなので、 「自分の価値観が絶対」は 変質者にはよくある思考ですね。 「マイルール」がいかん! とは言いません 何故なら、 スティーブ・ジョブズのように それを実行するのであれば 徹底的にしましょう! 以前にも書いたように 質問者さんが プログラミング言語開発に 携われば数字から始まる 関数を仕様としても 構いませんけどね。 自分自身が言いたいのは 「自分の感性や価値観が 正しい!」と思うならば 大勢から大反対されても それを行なえるか否かですよ。
お礼
ありがとうございます
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>668になりました はい。それでただしいです。
お礼
ありがとうございます
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>画像のとおりに実行したら >1234と表示されました 先頭に「0」書いてますか? 01234と、1234は違う値ですよ。
お礼
668になりました
- superside0
- ベストアンサー率64% (461/711)
数字で始まる変数を許すと 数値なのか変数なのかの 判断がつきにくいし 人間にも分かり難くなるからでしょうね。 というのは、数値を記述するのには、 0~9の数字以外にも 途中で英字を使うこともあり 例えば、C言語だと a=4E+3 は指数表現(4x10^3)なので、a=4000 のことですし、 a=0xabc は、16進数のabc (10進数の2748)のことなので、a=2748 のことです。 この状態で、数字で始まる変数を許すと a=4E+3 は、変数aに4000を代入すること a=4F+3 は、変数aに 変数4Fの中身に 3を加算した値を代入すること a=0xabc は、変数aに16進数abc(10進数で2748)を 代入すること a=0yabc は、変数aに変数0yabcの中身を代入すること っていうことになって、すごく分かり難い プログラムになってしまいそうですね。 というか、わざと読み難くしているとしか思えないので 流石に、これは、やめて頂きたいものです。
お礼
ありがとうございます
- Ultra-Hetare
- ベストアンサー率38% (204/526)
文脈を読めないバカなコンパイラが横行しているからです。 人間なら数字で始まる変数を「変数」として識別可能ですが、 コンピュータはバカなので「先読みする手続き」を 実装してあげないと、出来ない仕様になっています。 そしてその「先読み」アルゴリズムを作るのは面倒なのです。 コーディングルールで「数値を先頭に用いられない」としたほうが 簡単だったわけです。 人工知能より人間知能の方が優位な状態は、 まだまだ続くでしょう。
お礼
ありがとうございます
- heyboy
- ベストアンサー率21% (1852/8730)
何故と言っても 「そう言う作りですから。」 と言うしかないですけどね。 一つ、理由として考えられるのは データそのものが「数値」なので、 「混んがらないように」と した結果とは思われます。 16進数の話しも出てますが 使われている文字は A〜Fまで、です。 それと、 数字は0から9で10個ですが、 英語はAからZで26個なので、 関数を少ない文字で 作るには効率が悪いですしね。 別にプログラミング言語を 作るのが、質問者なら 別にそれはそれで構いませんけど 大昔から変わりませんし そのように作り変えるなら 別の手間がかかりますからね。 それ以外でも 「プログラミングに関する 決まり事」は多くありますが、 「そう言うもの」と 考えるしかありません。
お礼
ありがとうございます
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>ぜろえっくすじゅう? 「エックス」です。 なお、プログラミング言語により、 エックスじゃなく、"h"が使われるケースもあります。 これは、16進数がhexadecimalという英語表記で それを、「HEX」と略されていて、それの頭文字です。
お礼
ありがとうございます
- dell_OK
- ベストアンサー率13% (766/5721)
回答No.3です。 PHPだとなぜいいと思ったかの理由は、コード解析の処理が増えないからです。 数字から始まらないので、ひとつ目との仕分けが不要になります。 ・区切り文字の次に数字から始まり、次の区切り文字までの連続する数字は、数値とみなす。 ・区切り文字の次に$から始まり、次の区切り文字までの連続する文字と数字は、変数とみなす。 回答No.4さま、ありがとうございます。 そうなんです、言われる通りですよね。
お礼
ありがとうございます
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>a=0x123とは? 16進数です。 10進数ってのは、1桁が0~9までの「10種類」 同じように、16進数は、1桁が0~9とA~Fの「16種類」です。 なので、 0x10 = これは、16 0x100 = これは16x16=256 なので、サンプルの0x123は = 1*16*16 + 2*16 +3 = 256 + 32 + 3 = 291 と書いていることになります。 多くの場合コンピューターは 2進数と、16進数を一番よく使いますよ!。 10進数は人間が使う数字。 2進数は、もっと単純で0と1のみの「2種類」です。 なので、 2進数で、101と書いてある場合、 = 1 *2*2 + 0*2 + 1 = 4+1 = 5 と書いてあるという意味です。 これを、電気的なONとOFFの変化にして送り出しているのが コンピューターという機械の特性です。 それなりに、かみ砕いてみましたが、どうでしょう?
お礼
余計にわからなくなりました a = 123 変数はaですよね? a似代入する値が123 何も混乱しません。 変数が 0a1cc93 これでも私はなにも混乱しません 0a1cc93 = 29 これでも何も混乱しません 246route = 300 これでも何も思いません
補足
0x10 = これは、16 0かける10? ぜろえっくすじゅう? どっちですか?
- AsarKingChang
- ベストアンサー率46% (3467/7474)
- 1
- 2
お礼
画像のとおりに実行したら 1234と表示されました