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

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

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

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

Q&A

5回答

543閲覧

javascript の変数形式定義欠如問題を どこに訴えれば解決されるのでしょうか?

xmg

総合スコア20

JavaScript

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

0グッド

3クリップ

投稿2020/10/15 07:45

あまりに基本的なプログラミング言語としての巨大な欠陥が
いまだに放置されたままでいることに
どなたも何も是正措置をとらずにいるのかが分からないため
ここで専門の先生方におたずねさせていただこうと思い立ちました。

Fortran でさえも変数名の定義の際には

integer N real S character(4) MOJI77 ``` このように、数値用の変数と文字列用の変数が明確に分けられて 計算が混乱することがありませんでした。 ところが、なぜか javascript の場合には 同じ変数が数字代入処理をしたのちに 足し算をしたら

N=48

N=N+61 ---> N: 4861

理解不能な処理が当然である設定にされていることが 不思議でなりません。 いったい、どこにお願いをすれば、変数定義の欠如を是正していただけるのでしょうか。 よろしくお願いいたします。

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

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

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

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

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

yambejp

2020/10/15 07:49

N=48 N=N+61 console.log(N) // 109 だと思いますが?
m.ts10806

2020/10/15 07:50

N=48 N=N+61 console.log(N) //109 ん? まぁたとえ数値として扱う前提ならparseIntすればいいだけの話ではないですか? 質問ではなく主張になってませんか
KojiDoi

2020/10/15 08:07

八百屋へ行って「ここには新鮮な魚がおいてなくて不便だ!」とかクレームをつけても、まず相手にはしてもらえないですよね。 「勝手に変質」してくれるから手軽にできるようになる処理もあるので、一度awkとか勉強してみると視野が広がると思います。
退会済みユーザー

退会済みユーザー

2020/10/15 09:11

>  このように、勝手に変数が整数用から文字列変数に変質させられるという > 理解不能な処理が当然である設定にされていることが > 不思議でなりません。 記載されている内容では再現しません、再現可能なソースコードをお願い致します。
dodox86

2020/10/15 10:31 編集

質問者さんの過去のご質問の一覧を見るとプログラミング言語としてJavaScript以外のものが見当たらないので分かりませんが、Fortranを挙げておられるのを見ると、型付きのプログラミング言語のご経験しか無かったと推察します。で、「プログラミング言語とはかくあるべし」と前提を決めつけられているのではないでしょうか。その前提に無理がある気がします。文化や用途、目的がそれぞれ異なるはずです。「どこに訴えれば解決されるのか?」という疑問に収束しているので、低評価はしませんけれど。
otn

2020/10/15 10:46

実行もしていないコードを、実行したかのごとく質問文に載せないようにしましょう。
Zuishin

2020/10/15 12:43

ブラウザ上で動くのは JavaScript だけではありません。変更されるかどうかもわからない訴えをして待つ間に C# や C++ や Rust で組めば良いのでは?
guest

回答5

0

再現性

再三の指摘があるように、

javascript

1N=48 2 3N=N+61 ---> N: 4861

このように、勝手に変数が整数用から文字列変数に変質させられるという理解不能な処理が当然である設定にされていることが不思議でなりません。

再現しません。
命題が誤っています。

訴え先

いったい、どこにお願いをすれば、変数定義の欠如を是正していただけるのでしょうか。

訴え先は多くの場合、自分自身です。

自分の考えを疑い、自分の常識を疑い、自分の記憶を疑い、検証を重ねた実証コードを記録して、初めて自分を信用出来ます。

質問履歴を確認したところ、xmgさんは前提知識が誤っていた質問が多いようです。
思い込みやうろ覚えは徹底的に排除すべきです。

  • 検証して下さい
  • 再現性を確認して下さい
  • 記憶を疑って下さい

Re: xmg さん

投稿2020/10/15 10:27

think49

総合スコア18189

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

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

0

JavaScriptは動的型付けの言語です。「整数用」変数とか「文字列変数」といった概念は、そもそも存在しないという、意図的な設計です。

それが不便なのであれば、TypeScriptなど「JavaScriptに型をつけた言語」を使ってください。

投稿2020/10/15 07:49

maisumakun

総合スコア146018

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

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

maisumakun

2020/10/15 07:50

なお、現行のJavaScriptに対する変更は、「現在のブラウザ環境で不整合が出ない」ことが大前提となりますので、破壊的変更は取り入れられる可能性が極めて薄いです。
guest

0

「思うように動くのではなく、書いたとおり動く」だけの話かと思います。
JavaScriptはそういう仕様ということで納得できませんか。
仕様なら仕様にそって実現したい機能を実装していけば良いだけの話です。

それで納得できないのなら使わなくて良いのでは。
それか自分が好みの言語を開発すれば良いのでは。

申し訳ないですが、今回仰っている仕様部分を「欠陥」と言えるほど、内部仕様に精通した方のようには見えません。

言語間で仕様が違うことって幾らでもあります。
特に型については似て非なるものです。

これくらいで憤慨しても良いことは何もありません。

投稿2020/10/15 08:16

m.ts10806

総合スコア80875

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

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

0

どこに訴えれば解決されるのでしょうか?

「TypeScript のような静的型付け言語でプログラムせよ」と言われるだけです。
(仕様で定まっているため)

変数定義の欠如

JavaScript は動的型付け言語です。
静的型付け言語であれば欠如と言えますが、別物ですので、動的型付け言語の JavaScript では間違った解釈になります。


仕様(ECMAScript 2020) 7.1 Type Conversion においても、必要に応じて暗黙的に自動型変換を実行する旨記載されており、2文目にはそのようにした目的(利便性)が記述されています。

原文:

The ECMAScript language implicitly performs automatic type conversion as needed. To clarify the semantics of certain constructs it is useful to define a set of conversion abstract operations. The conversion abstract operations are polymorphic; they can accept a value of any ECMAScript language type. But no other specification types are used with these operations.

訳文:(Google翻訳):

ECMAScript言語は、必要に応じて暗黙的に自動型変換を実行します。 特定の構成のセマンティクスを明確にするために、一連の変換抽象操作を定義すると便利です。 変換抽象操作は多形です。 それらは、任意のECMAScript言語タイプの値を受け入れることができます。 ただし、これらの操作では他の仕様タイプは使用されません。

ちなみに、JavaScriptの型は 4.3 Terms and Definitions で定義されています。


勝手に変わる

乱暴ですが、次のように覚えると(仕様の詳細を学習前でも)意図したタイミングで暗黙の型変換を使いこなせるようになるかもしれません。

  1. 変数や関数の仮引数は演算結果などの値を参照するものに過ぎない
  2. 型は 演算内容により変換される(少なくとも、勝手に変わることはない)

javascript

1var n = "10"|0; 2console.log( n, typeof n ); // 10 "number" 3 4var s = "" + 1000; 5console.log( s, typeof s ); // "1000" "string" ("1000 string"と出力される)

投稿2020/10/15 10:40

編集2020/10/15 22:30
AkitoshiManabe

総合スコア5434

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

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

0

TC39プロポーサルTC39プロポーサルを目指しているプロジェクトはあるようですから、コミットしてみてはいかがですか?

Current status of this proposal is -1.

GitHub - sirisian/ecmascript-types: ECMAScript Optional Static Typing Proposal http://sirisian.github.io/ecmascript-types/

ステージ"-1"ってどういうレベルなんでしょう? 公式にはないようですが。詳しい方補足お願いします。

投稿2020/10/15 08:35

編集2020/10/15 08:40
Lhankor_Mhy

総合スコア36960

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

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

Lhankor_Mhy

2020/10/15 08:39

これはTC39プロポーサルではなくて、野良プロポーサルですよ、って意味かもですね……
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問