+ JavaScript の質問 ..
[2ch|▼Menu]
441:Name_Not_Found
20/05/29 07:22:32.39 .net
>>440
> お前は普段ArrayやDateも変更されてるかもしれないと心配してるのか?
ArrayやDateは変更されることはないだろうなってわかるから心配してない
もし変更していたら、変更するほうが悪いと言える。
しかし任意で作った変数はそうはいかない。変更しないかもしれないし
変更するかもしれない。保証がない。だからconstで明確にする必要がある。
同じ変数でもundefinedは変更するほうが悪いに属する変数だから
わざわざconstにする必要はない。

442:Name_Not_Found
20/05/29 07:27:22.10 .net
>>440
できるできないではない。
コードに意図を書くことが重要。
別にconstではなくてもコメントで「この変数は再代入しない」と書いても良い
意図を書くという目的は達成できている。
ただし言語にconstという機能があるのだからそれを使ったほうが簡単
> どうしてもお前が変更されたくないグローバル変数を置きたい
つまり「変更されたくないグローバル変数を起きたい」のではない
「このグローバル変数は変更しないという設計である」という意図を込めるために使う
今ではletを使うということは「変更する事がある」という意図を込めることになっている。
変更することがあるという意図が込められてるのに、変更していない。なんでや?(バグか?)ということになる。

443:Name_Not_Found
20/05/29 09:23:08 .net
あきらかに定数でないものにconst使うのってどうなの

444:Name_Not_Found
20/05/29 09:45:56 .net
>>443
定数の定義とは?

445:Name_Not_Found
20/05/29 10:08:50.90 .net
>>443
全く問題ないですわよ
多分ほかの言語のdefineとかを想定してると思いますわよが
それは Object.defineProperty() のおしごとですわ

446:Name_Not_Found
20/05/29 10:19:01.56 .net
まああれですよ
今まで20年以上varで問題なかったのになんで今頃?
っていうのが人情ですよ
うちの親会社のアメリカ人も似たようなこと言ってる
本当に上書き保護が必要なら
8年前からTypeScriptで書いてるだろうと

447:Name_Not_Found
20/05/29 11:32:04 .net
>>446
どんな言語も最初から完全な形でリリースされているわけではない
今までアセンブラで頑張っていたのに、なんでC言語?というようなもんだろ
constの方が良いから使うだけの話だろ

448:Name_Not_Found
20/05/29 11:32:47 .net
> うちの親会社のアメリカ人も似たようなこと言ってる
それは「うちの未熟な新人も似たようなことを言ってる」となにか違う意味でもあるのか?

449:Name_Not_Found
20/05/29 12:33:49 .net
何事にも、変化に対応できない人間がいつも新しいものに文句を付ける
それだけのことさ

constなんて概念自体クッソ古いけど、これにすら文句付けるってどんだけ脳味噌固いんだか

450:Name_Not_Found
20/05/29 12:45:44 .net
新しいものを取り入れるのと、飲み込まれるのは違う

451:Name_Not_Found
20/05/29 12:54:02 .net
>>442
それは違うと思う
変数を見てそれがどんな宣言状態なのか分からないし
だからこそ定数であるという意図を込めるために、
元々定数があった言語でさえも定数は大文字と言ったような慣習があるんでしょ?

変数に意図を込める方法は変数名に込めるしかないでしょ
それとも変数を見るたびにわざわざ宣言部分を探してそこから意図を汲み取ろうとするのか?
あるいはletで宣言されている変数を見つけたら、その後全ての使われ方を見て
変更されてなかったらおかしいという謎の遊びをするのか?
何も問題が起きてるわけでないのにわざわざ?

結局君がconstに拘ってるのは君が変態でへんくうだからでしょ?

452:Name_Not_Found
20/05/29 13:14:09 .net
> 変数を見てそれがどんな宣言状態なのか分からないし

constって書いてあるからわかるじゃん?

453:Name_Not_Found
20/05/29 13:14:45 .net
> 変数に意図を込める方法は変数名に込めるしかないでしょ

iCountとかいう名前にしろってこと?
懐かしのハンガリアンw

454:Name_Not_Found
20/05/29 13:16:50 .net
> それとも変数を見るたびにわざわざ宣言部分を探してそこから意図を汲み取ろうとするのか?

え?短期記憶もできないの?
関数は一画面に収まるほど短いんだから
宣言部分なんて上の方見ればわかるじゃん

それに上でまとめて宣言なんてこともしてはだめ
使うところの近くで宣言されてる

455:Name_Not_Found
20/05/29 13:17:58 .net
> 変更されてなかったらおかしいという謎の遊びをするのか?

コードを見て変更されてないのに、なんでletを使ってるんだろう?
という疑問を解決する必要がある
遊びではない。仕事だ。

456:Name_Not_Found
20/05/29 13:31:32 .net
>>448
日本だけじゃないんだなあ
って思ったから

457:Name_Not_Found
20/05/29 13:37:40 .net
>>456
世界中のどこでもアホはいる。当たり前だよw

458:Name_Not_Found
20/05/29 14:27:58.97 .net
大文字にした上でconstもつければいいじゃない。
値が書き変わらない変数は、単にconstをつければいい。
読みやすい上に開発環境からの恩恵も受けられる。

459:Name_Not_Found
20/05/29 14:36:02.45 .net
constみたいなわかりやすい話題はどの言語でも食いつきがいいな

460:Name_Not_Found
20/05/29 14:40:14.66 .net
IE で常用対数を使いたいのだけれども どうしたらよいのかしら・・・

461:Name_Not_Found
20/05/29 14:59:22.90 .net
>>460
Math.log(x) * Math.LOG10E

462:Name_Not_Found
20/05/29 15:02:28.31 .net
中学生の頃だったかC++でクラスとかライブラリを知った時
privateにしてもヘッダファイル読み込まなきゃ使えないじゃない?
ヘッダファイル読み込んだら、そこのprivateって書いてあるじゃない?
そのヘッダファイルのprivateをpublicにすればアクセスできるじゃない?
何も隠蔽できてないじゃない?って思ったことがあるんだよな

どうしてそう思ったかと言うと、当時はライブラリは
クローズドソースにして、他の人に使わせるものだと考えていたから
privateの隠蔽というのは、秘匿という意味だと思っちゃったんだよね
まあその勘違いはすぐに分かって、ああ秘匿するためじゃなくて
外から直接参照することは想定してないという意味なんだなって

なんでこの話をしたのかと言うと、これな
>>446
> 本当に上書き保護が必要なら
> 8年前からTypeScriptで書いてるだろうと
constは本当に上書き保護をしたいんじゃなくて
上書きしませんよという宣言だという話
後からコードを見た人のための説明なんだってこと
大文字は、上書きしない+グローバルに使うものという意味だから
大文字にするのは良くない

463:Name_Not_Found
20/05/29 16:05:22.57 .net
他人からこれだけ不自然だって批判されてるのに
後からコードを見た人の為になる!って主張できる根性は尊敬する

464:Name_Not_Found
20/05/29 16:15:29.75 .net
変態の拘りにはついて行けん
JS界は自由が特長だからマニアックなのは結構だが
口を開いて出てくる言葉が屁理屈ばっかりなのは呆れるな
それならまだ僕の拘りです
こっちの方が芸術的に感じるんです
と素直に主張する方が好感持たれるのにな
変態でプライドも高い奴はどうしょうもない

465:Name_Not_Found
20/05/29 16:19:41.65 .net
今使ってるコード中で再度変わらることがないからconstなのではないだろう
それがどういう値が考えたときにmutableな属性ならばletにすべき

466:Name_Not_Found
20/05/29 16:50:06.45 .net
ECMAScript2015には従えない!
と言う人が居るスレはここですか?

467:Name_Not_Found
20/05/29 17:34:56.36 .net
const/letを仕様に入れなければこんな論争は起きなかったんだよ
マウントの取り合いしてても見苦しいだけじゃん
JavaScript程度のプログラムなら変数の宣言はvarだけで十分

468:Name_Not_Found
20/05/29 17:37:13.19 .net
>>463
> 他人からこれだけ不自然だって批判されてるのに
その「他人」の多くは初心者でしょ?

469:Name_Not_Found
20/05/29 17:38:05.51 .net
いえ、技術力が高いという意味で有名な人が
不自然とかconst使うなって言っているなら別ですよ?
そんな人いますか?いませんよね?
技術力が高い人はconstを使いましょうって言ってるはずです。

470:Name_Not_Found
20/05/29 17:39:04 .net
>>465
> 今使ってるコード中で再度変わらることがないからconstなのではないだろう

そうだよ。この変数は一旦割り当てたら変えないようにしよう。だからconstにする。
こういう考えでコードを書くんだよ。

自分で新規のコード書いたことないの?

471:Name_Not_Found
20/05/29 17:40:32 .net
>>464
変数の再代入は避けるべきという
言語に依存しないベストプラクティスが存在するんだよ
芸術の話じゃなくてベストプラクティス
その実現方法がJavaScriptではconstというだけの話

472:Name_Not_Found
20/05/29 17:47:38 .net
>>467
> JavaScript程度のプログラムなら変数の宣言はvarだけで十分

何にも分かってない素人ワロタ

473:Name_Not_Found
20/05/29 18:25:02 .net
let isono_height = 1.65;
const fujisan_height = 3776;

重力や地殻変動や工事などの外的要因を除去する。
磯野は有機生命体でdynamic、富士山は無機質でstatic。

474:Name_Not_Found
20/05/29 18:37:29 .net
>>471
お前は天才だ!
もっと詳しく教えてくれ!

475:Name_Not_Found
20/05/29 18:42:03 .net
>>473
☓ const fujisan_height = 3776;
○ const fujisan_height = 3775;

476:Name_Not_Found
20/05/29 18:52:38 .net
>>474
天才の定義を詳しく

477:Name_Not_Found
20/05/29 18:58:56 .net
>>472
テストとかではvarが基本
Chromeのテストでも好まれてる
テストだと一時変数が多いから
それらの名前はどうしてもかぶりがち

だから何か機能を関数として用意するときは
その関数内では基本letが使われるけど
それ以外の場所では多重宣言が許されるvarが好まれてる

でもテストを色々見てると基本constで書かれたものもある
だけどそこにも上の理由でvarも沢山使われてる
つまりvar/constだけで書くのが好きな人もいる

面白いことに関数内だったとしても
letを中心で使う場合とconstを中心で使う場合でかき分けてる人もいる

つまりは、数行の単純な結果や演算を担当する関数は、
カチッカチッとしたパーツを組み合わせて個体のマシンを作る感覚でconstが好まれる
一方もうちょっと柔らかいイメージの機能としての関数内ではletが好まれる
上から一行一行さーっと実行していくような場面ではvarが好まれる

全体的にそういう傾向があるように感じる
同じ感覚でもここで争われてるような感覚とは違うっぽい

478:Name_Not_Found
20/05/29 19:30:27.16 .net
>>476
cho賢い

479:Name_Not_Found
20/05/29 19:39:12.34 .net
コンピュータ上で実行されている以上、変数内の値(メモリ上の信号)を書き換えようと思ったら、そんなことは実行中でもいくらでもできる。
既に沢山書かれているが、constというのは、「どういう手段を以ってしても値が絶対に書き換えられない」という不変性を約束するものではなく、開発(プログラミング)において、「この値を書き換える予定もなければ、その必要もない」という表明の形に他ならない。
短いコードならともかく、大規模な何百、何千行以上もあるようなコードの中に、唐突にvarやletの再代入可能な変数が広いスコープの中に現れたとき、それの値が変わることは意識せざるを得なくなる。
そういう(必要ないかもしれない無駄な)気苦労を減らすというだけでもconstの価値は大きい。

480:Name_Not_Found
20/05/29 19:49:40.59 .net
>>477
好みの問題なら「好きなように書け」で終わ他人を真似したいなら「尊敬する人を真似ろ」で終わり
そこに明確な論理はないが、あなたの中では、そういうことだろう

481:Name_Not_Found
20/05/29 20:10:12 .net
forEachの第3引数に操作中の配列が入ってくるけど、使い道どんなんあんの?

482:Name_Not_Found
20/05/29 20:10:45 .net
>既に沢山書かれているが、constというのは、「どういう手段を以ってしても値が絶対に書き換えられない」という不変性を約束するものではなく、
>開発(プログラミング)において、「この値を書き換える予定もなければ、その必要もない」という表明の形に他ならない。
誰が決めたんだ?

483:Name_Not_Found
20/05/29 20:27:09.76 .net
>>477
> テストとかではvarが基本
それは誰が言ってますか?
あなたの思い込みですか?

484:Name_Not_Found
20/05/29 20:28:31.26 .net
>>482
決めるって何を?

485:Name_Not_Found
20/05/29 20:33:02 .net
不変性を約束するものではない
表明の形にほかならない

誰が決めたんだ?

486:Name_Not_Found
20/05/29 20:34:58 .net
>>481
入ってこねー
リファレンスを100回読め

487:Name_Not_Found
20/05/29 20:53:50.22 .net
まともに調べる気のない質問者が多過ぎる

488:Name_Not_Found
20/05/29 21:09:45.46 .net
const程度でグダグダ言ってるレベルのスレだし残当

489:Name_Not_Found
20/05/29 21:38:40 .net
MDNで終わるスレ

490:Name_Not_Found
20/05/29 21:50:02 .net
>>485
誰も決めたなんて言ってないけど、
何の話をしてるの?

491:Name_Not_Found
20/05/29 21:55:28 .net
>>490
良くある言い回しなのに、意味が分からない人もいるんだな

492:Name_Not_Found
20/05/29 21:56:54 .net
さもそれが真実であるかのように書いといて何だねそれは

493:Name_Not_Found
20/05/29 21:58:40 .net
日本語から教えないと伝わらないスレ

494:Name_Not_Found
20/05/29 22:04:42 .net
>>491
だから説明しろって

495:Name_Not_Found
20/05/29 22:10:05 .net
僕が考えた嘘っぱちを日本語のせいにしたらいかん

496:Name_Not_Found
20/05/29 22:20:25 .net
ドラッグイベントが理解できん。

dragenterイベントでdropEffectを設定してもdragoverイベントで勝手に値が変わる。
dragenterイベントでdropEffectを設定する意味は?

dragenterイベントでpreventDefault()しなくてもdragoverイベントはめちゃめちゃ呼ばれるし、
dragoverイベントでpreventDefault()しさえすればdropイベントは発生する。
dragenterイベントでpreventDefault()する意味は?

dropイベントでdropEffectに応じて処理を分岐できるとあるが、
dropイベント内でのdropEffectが何やってもnoneにしかならんのだが?

そもそもdragoverイベントで延々とdropEffect書き込んでpreventDefault()し続けるってどうなの?
このAPI設計した外人馬鹿じゃねーの?

497:Name_Not_Found
20/05/29 22:24:03 .net
>>496
jQuery使え

498:Name_Not_Found
20/05/29 22:31:38 .net
>>490
>>479は嘘っぱちか

499:Name_Not_Found
20/05/30 06:39:23.61 .net
>>483
一流の人に学ぼうということで
chrome(V8)のテストを色々見てみた結果だよ

500:Name_Not_Found
20/05/30 06:50:37.64 .net
jQuery使おうが同じやろがい
それどころかe.originalEventとかいうダセぇステップを踏まなきゃならん
jQueryerはほんまレベルひっくいな

501:Name_Not_Found
20/05/30 07:26:03.31 .net
>>499
> chrome(V8)のテストを色々見てみた結果だよ
それじゃあ全く役に立たないですねw

502:Name_Not_Found
20/05/30 10:30:42.59 .net
>>496
そういう時は考え方を変えるんだ
自分がこんが得ている使い方以外のこととかね

503:Name_Not_Found
20/05/30 10:31:24.09 .net
誤:こんが得ている
正:考えている
すまんこ

504:Name_Not_Found
20/05/30 12:43:15 .net
>>501
別に万人に役に立つとは言ってないよ
そんな主張そもそも不可能だし
時間の無駄だから
いちいち食って掛かってこなくていいよ

505:Name_Not_Found
20/05/30 12:52:36 .net
>>504
いやならこのスレに来るな

506:Name_Not_Found
20/05/30 15:10:27.54 .net
>>496
>>477が一般論で書いてるようにしか見えないから、根拠を分かりやすく書く努力をした方がいいよ

507:Name_Not_Found
20/05/30 15:22:38.63 .net
× テストとかではvarが基本
Chromeのテストでも好まれてる
○Chromeのテスト(?)では(何かしらの意味があって)varが使われていた
それを見てvarが基本だと思い込んだ

508:Name_Not_Found
20/05/30 17:44:50.73 .net
constかvarかなんて
再代入した時に実行環境がエラー投げるかどうかの違いしかないんだから
どっちで書いたって大差ねえよ
そんなことみんなわかってるじゃろ?
なんでこんな無駄な言い合いを…

509:Name_Not_Found
20/05/30 18:12:30 .net
言い合うのは無駄だが、お前は違いを分かってない

510:Name_Not_Found
20/05/30 18:13:26 .net
>>509
まじで!
じゃあ質問します
違いを教えて!

511:Name_Not_Found
20/05/30 18:29:53.11 .net
少なくとも
> 再代入した時に実行環境がエラー投げるかどうかの違いしかないんだから
> どっちで書いたって大差ねえよ
エラーになるんだから大差あるだろ
分かってたらこんな自己矛盾するような文章は書かん
constとvarの使い道が違うのに大差ないと言い切っちゃうところが分かってない

512:Name_Not_Found
20/05/30 18:40:03.78 .net
>>511
どゆこと?
別にvarでも再代入しなければいいだけじゃん
ESでconstが使えるようになるまで
再代入されては困る変数はどうしていたの?

513:Name_Not_Found
20/05/30 18:47:27.12 .net
そもそも上で議論してるのはconstとvarじゃなくてletとvarの使い分けじゃないの?

514:Name_Not_Found
20/05/30 18:52:28.16 .net
defineみたいなものすらないクソ言語にようやくconstが実装されただけのこと
constがない時代に慣らされた低脳コーダがconstの意味を理解できてないだけで騒いでる図
ちょっとは他言語に触れた方がいい

515:Name_Not_Found
20/05/30 18:54:43.82 .net
>>514
PHPなんかは
defineやめてconstになったじゃん?
defineはレガシーになっていくんじゃね?

516:Name_Not_Found
20/05/30 18:56:13.01 .net
>>507
そこが気になってたの?
(あらゆる) テストとかではvarが基本
ってことではないことは先を見れば分かるでしょ?
(V8のような環境での)テストとかではvarが基本(好まれる)
っていう雰囲気の話だよ

517:Name_Not_Found
20/05/30 19:02:17.45 .net
徹底してconst使うのならObject.freezeも使わないとおかしい

518:Name_Not_Found
20/05/30 19:06:25.37 .net
>>515
そうだよ
それすら分かってないやつがvarでいいって固執してた訳で、分かってねえなと言われてた

519:Name_Not_Found
20/05/30 19:28:01.87 .net
>>514
javascriptにはdefineはあるよ

520:Name_Not_Found
20/05/30 20:22:52 .net
let, constはブロックスコープが使えることも忘れないように。

521:Name_Not_Found
20/05/30 20:24:42 .net
>>517
それならもう一個あったじゃん
なんだっけ
Object.sなんたら

522:Name_Not_Found
20/05/30 21:01:32.53 .net
>>515
やめてない
constを手続き型でも使えるようにしたってだけ
defineにはconstにはない役割があるので完全に置き換えられるものではない

523:Name_Not_Found
20/05/30 22:53:34.44 .net
>>512
> 別にvarでも再代入しなければいいだけじゃん
バグで間違って再代入してしまった場合は?

524:Name_Not_Found
20/05/30 22:55:36.11 .net
>>512
> ESでconstが使えるようになるまで
> 再代入されては困る変数はどうしていたの?
再代入されて困る変数に再代入してバグが発生していた
ESでconstが使えるようになるまでバグが発生していた


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1573日前に更新/136 KB
担当:undef