+ JavaScript の質問用スレッド vol.126 +

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2018/06/02(土) 14:31:23.04ID:B1JKBGEy
JavaScript を自ら学ぶ人のための質問スレッドです。

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。


前スレ
+ JavaScript の質問用スレッド vol.125 +
https://mevius.5ch.net/test/read.cgi/tech/1518940081/

(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです)

0952デフォルトの名無しさん2019/01/22(火) 19:54:31.00ID:bOf9tfZi
構文的砂糖

0953デフォルトの名無しさん2019/01/22(火) 20:06:22.32ID:YQBTnTrr
>>948
もしかして
ES5で今までやっていたことをclass構文で簡潔に書けるようになっても、
ES6で追加された機能をES5で実現できなければ糖衣構文ではないって言ってる?

意味不明なんだけど

0954デフォルトの名無しさん2019/01/22(火) 20:16:41.69ID:YQBTnTrr
>>934
> 「ES5.1の構文糖衣」という表現がおかしい
とせっかく俺が言ったのに

>>935がclassのことを持ち出すから
おかしくなったって自覚してるのかな?

classは糖衣構文だが、そもそも最初にES6の機能がとかいう言い方はおかしいって指摘した。
マッチポンプかよ。自分がclass限定の話にしておいてclass限定の話はしてないって

0955デフォルトの名無しさん2019/01/22(火) 22:05:19.77ID:4TOwjU0o
話変わるけどジェネレーターは糖衣構文じゃないよねさすがに。

0956デフォルトの名無しさん2019/01/22(火) 22:38:28.82ID:dHPHLM6Z
>>953,954
意味不明なのはあんただ
俺は0.999だからNoとか0.001だからYesとか言うのは嫌いだし
そういう0か1かで糖衣構文「であるのかどうか」を話す気はない
たとえちょっと変な表現であろうと、今回の話の流れの上で糖衣構文「と呼んだほうが良いか」を
アナログ的に考えて、俺なりの想いを持って方が良い、悪いと話している

また俺はClass限定の話を始めたわけではない
わかりやすい一例としてまずClassでの事実を1つ挙げただけ
そこから質問者が食いつけばClass構文が入ることによる新たな可能性を話すつもりだったのに
変におかしな流れに誘導したのは君の方だよ

少なくとも俺は>>933を俺なりに解釈して話を始めた
そこで君が横から言葉の使い方がどうのこうのヤンヤン言って来ても知らんがなって感じ
君の脳内パーサではエラーが出たんだろうが、それをエラーですエラーですエラーですよって、うるさい目覚まし時計かって感じ
俺のゆるゆるパーサでは通ったんだから俺は話を進める、君は固まっとく、でいいじゃないか
俺までどうにかして止めようとする必要はない、俺はそういうのは嫌いだね

JSでも値をチェックして例外を吐くとかね
値をできるだけ加工したり用意の仕方を工夫して無効な値を極力作らないようにする方が俺は好きだ

ともかく君の定義ではそもそも話がおかしいのはおっしゃる通り
だからこそ俺はその定義は今回はそぐわないとしてるところに、わざわざその破綻する定義を持ってきて
ギーギーガーガーおかしいおかしい言われても しつこいポンコツ機械かよって感じ
まあそんな感じ

0957デフォルトの名無しさん2019/01/22(火) 23:13:06.23ID:YQBTnTrr
>>956
俺はclass = 糖衣構文+αなんだから糖衣構文だって言ってるのに、
お前が、完璧じゃないから糖衣構文と言ってはいけないと言ってるんだろ
1じゃなければ0と言ってるのはお前だ

0958デフォルトの名無しさん2019/01/22(火) 23:13:38.81ID:XoIF472X
頭イカれてるエンジニアによくある回答

0959デフォルトの名無しさん2019/01/22(火) 23:25:49.01ID:k+Ga/jCN
糖衣構文+αじゃなくて、完璧に糖衣構文でしょ
糖衣構文+αだったら糖衣構文とは言わないよ

0960デフォルトの名無しさん2019/01/22(火) 23:28:26.41ID:IcipLgKo
糖衣構文か否かの議論の果てにどんな結論があるんだろ

0961デフォルトの名無しさん2019/01/22(火) 23:30:12.08ID:Rn6qecVY
>>959
同意

0962デフォルトの名無しさん2019/01/22(火) 23:46:44.98ID:5TeSwszl
var flagA = false && true || true;
変数flagAがtrueとなるのは、
false && trueがfalseになって、
false || true
true
となるからだと思うのですが、
ひとつ目がfalseなのに何故ショートサーキット評価されないのでしょうか。
最初に末尾まで見てて、&&の後ろがひとつの論理式である時だけショートサーキット評価されるってことですか。
あと、
var flagB = true || false && false;
flagBがtrueになるのは何故ですか。
true || falseがtrueになって、
true && false
false
になると思うんですが。

0963デフォルトの名無しさん2019/01/23(水) 00:10:25.21ID:djVGMpuO
>>959
いうだろ?
ES5で書いたものをclassで完璧に書けるんだぜ?
追加効果があったとしても関係ないだろ

それにそもそも糖衣構文って完全に同じものを
実現しなくてはいけないなんて制限はないんだが?

ほぼすべての糖衣構文はある機能に特化することでより便利にしているが
その反面あるきのう以外のことができなくなってる

他のどんなものが糖衣構文と呼ばれてるか考えてみなよ
糖衣構文という言葉に惑わされてるだけだろ

0964デフォルトの名無しさん2019/01/23(水) 00:11:52.34ID:djVGMpuO
>>960
それな。>>938ですでに俺が言ったことだが

0965デフォルトの名無しさん2019/01/23(水) 00:18:30.88ID:eDsfqelL
>>962
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
論理積と論理和では論理積の方が優先度が高く、短絡評価は論理積と論理和それぞれの評価について行われる

0966デフォルトの名無しさん2019/01/23(水) 00:18:39.97ID:djVGMpuO
一つ例を出してやる

C言語でswitch〜caseはifの糖衣構文と呼ばれているが、
ifでやれることのすべてをswitch〜caseでやれるわけじゃない
switch(a) ← 変数aとの比較限定になっている
この点においてswitchはifの制限版

また逆にswitch〜caseのfall throughはifでは実現できない
この点において、switchは糖衣構文+αの機能を持っていると言える

0967デフォルトの名無しさん2019/01/23(水) 00:20:16.03ID:NPxQuWhQ
>>962
ショートサーキットしてる
false && true || trueの二番目のtrueは評価されない
それと後者の答えは優先順位が違うから
&& は||より先に評価される
四則演算でいうと||が足し算で&&はかけ算

0968 ◆QZaw55cn4c 2019/01/23(水) 00:29:11.43ID:uHYNDKeO
>>966
>逆にswitch〜caseのfall throughはifでは実現できない
そんなことはないと思う
https://ideone.com/tVia2L

0969デフォルトの名無しさん2019/01/23(水) 00:59:58.12ID:GUcVvLjn
QZは馬鹿だから無視でおk
「車は右側を走れるか」みたいな話は余計脱線するだけ

0970デフォルトの名無しさん2019/01/23(水) 01:06:50.82ID:djVGMpuO
ふむ。まあ要するにES6の機能をES5で実現できれば糖衣構文。
実現できなければ糖衣構文ではない。という定義は
完全に間違っているってことだな

0971デフォルトの名無しさん2019/01/23(水) 01:08:18.69ID:GUcVvLjn
>>956
> そこから質問者が食いつけばClass構文が入ることによる新たな可能性を話すつもりだったのに
話したいことがあるのなら勝手に書け
そしてそれに食いつく奴が居るかどうかだろ
順序が逆だ

0972デフォルトの名無しさん2019/01/23(水) 13:27:42.36ID:1r6euYxZ
せっかちなのは君の好きにすればいいけど
勝手に思い込んで突っ走って人に迷惑かけて……
もうクズの見本みたいな振る舞いしてる事に気が付いたほうがいいよ
勿体ないよ

0973デフォルトの名無しさん2019/01/23(水) 19:36:29.61ID:djVGMpuO
特に言い返すことは無いようで

0974デフォルトの名無しさん2019/01/24(木) 20:07:28.47ID:iWJQcTkX
const foo = [1, 3, 5, 7, 9];
const bar = [3];

console.log(foo[bar]); // 7

このコードの意味がよくわかりません
状況からしてbar[0]の3を自動で取り出してfooの添え字にしてるように見えますが、そんな意味不明な動きしますか?
Cでいう*barみたいに配列の先頭アドレスから値を取り出してる??

0975デフォルトの名無しさん2019/01/24(木) 20:18:20.31ID:x2HCgLhu
>>974
そんな糞コードは理解出来なくていい
教科書なら捨てた方がいい

百歩譲って「添字はtoString()してるだけ」ということを教えたかったのなら、
数字と文字でやるべきだ

0976デフォルトの名無しさん2019/01/24(木) 20:28:18.18ID:iWJQcTkX
>>975
すみません、業務で見たコードで、実際にはfoo相当の配列はオブジェクトの配列でした
先のコードは自分で実験用に動かしたコードです

なるほど、添え字に配列変数を指定すると、toStringメソッドが走る
配列変数のtoStringメソッドは角括弧なしで中身の要素をカンマつなぎする
なので要素が数字かつ1つしかなければ、その数字を添字にしたのと同じことになる、ということでしょうか

0977デフォルトの名無しさん2019/01/24(木) 20:43:27.11ID:x2HCgLhu
>>976
概ねその通りだが、俺は
> 配列変数のtoStringメソッドは角括弧なしで中身の要素をカンマつなぎする
これが仕様なのか環境依存なのかは知らんよ。

いずれにしても、「配列を添字として使う」事自体があり得ないだろ。
糞コードだし、修正すべきだよ。
動いているからバグとして検出されず、結果的に修正漏れになっている、ということかな。

なおその手の詳細な挙動を知りたければ、仕様書を読むしかない。
JavaScriptの仕様書は他言語で言う仕様書ではなく、実装指示書(詳細設計書)といった方が正しい。
だからオグジェクトの配列のアクセスの仕方(セマンティクス)がいちいち細かく書いてある。
その中で原則的には全てtoStringされていたはずなので、結果的にはそういう挙動になる。
つまり、

× > 添え字に配列変数を指定すると、toStringメソッドが走る
○ 添え字は何であれ全てtoStringされる

だったはず。気になるなら仕様書を確認して。

0978デフォルトの名無しさん2019/01/24(木) 20:48:20.57ID:x2HCgLhu
× オグジェクトの配列の
○ オグジェクトや配列の

読める範囲ではあるが、若干混乱するかもしれないので念のため。

0979デフォルトの名無しさん2019/01/24(木) 20:48:26.62ID:iWJQcTkX
>>977
丁寧にありがとうございます
どう見てもミスっぽいので直しときます
まさかこれで動くとは思わなかった……js怖い

0980デフォルトの名無しさん2019/01/24(木) 21:44:28.43ID:iDh5zyV0
オグジェクトを訂正するのかと思った

0981デフォルトの名無しさん2019/01/25(金) 06:27:54.21ID:i+3XWQgy
別にこの程度非難轟々するほどのコードじゃないだろう
暗黙の型変換がたった1回働いてるだけでしかないのだし
添字は必ずシンボルか文字列として評価されるってことも常識として知っておかないといけないこと

この程度にそんなに目くじらを立ててたらJSが読み書きしにくくなるというか
JSは避けてRustで書いてWasmにするとかした方が良いと思う

0982デフォルトの名無しさん2019/01/25(金) 11:52:33.10ID:t0q3jFj9
普通にボロカスに言われるコードだと思う

0983デフォルトの名無しさん2019/01/25(金) 13:15:39.10ID:cZ2z9LwS
でも文字列を引数にとる既存の関数をタグ付きテンプレートとして呼び出せるのって['foo']が'foo'に変換される仕様のお陰なんだよなぁ

'hogefugapiyo'.split('fuga').join('hage');

'hogefugapiyo'.split`fuga`.join`hage`

意味のないコードだけどあくまで例として。

0984デフォルトの名無しさん2019/01/25(金) 13:52:06.04ID:dvigx+iy
foo = [ 1, 3, 5, 7, 9 ];
bar = [ 3 ];
p foo[ bar ]

Ruby では、エラーになる。
配列から整数への、暗黙の型変換はできない

やっぱり、JS は、バグる。
怖い

0985デフォルトの名無しさん2019/01/25(金) 14:53:54.07ID:UUOT6d+j
javascriptでいう関数ひとつ取ってもる〜ピぃは
def
ブロック
Proc.new
proc
lambda
->
用途に合わせてどれが使えどれが使えないのか、使える場合変換は必要かどうか、変換なしで使える場合も挙動がどう異なるのか(同じように使える場合もすこしづつ挙動が異なるからw)あっちとこっちは相互にどういう変換方法があったか、等しっかり考えて作るもんなww
さすがるっピ!www

0986デフォルトの名無しさん2019/01/25(金) 19:30:27.27ID:a/PpKsi/
>>981みたいな奴が普通に居るのがJavaScriptコミュニティが腐ってる証拠な。
プログラミングを知らない癖に出来ると勘違いした馬鹿が間違ったことを吹聴しすぎてて、
馬鹿が再生産されまくっている。
とはいえ問題点は981以外には分かっているようだし、この話はもういいが。

他言語出身者なら、当初参考にするのはMDNだけにして、
個人が俺ツエーしてるだけのブログ等は全部無視した方がいい。
他言語ではあり得ない確率で間違ってるから、無駄にはまることになる。

emscripten/WebAssemblyが本格稼働するかどうか俺は懐疑的ではあるが、
実際にそうなったときに馬鹿JSerが一斉粛清されるかどうかは見物ではある。
「動けばいい」という基準で書いている限り、「動けばいい」程度のコードしか書けるようにはならない。
しかしこれがJSerの大半なのもまた事実だ。

一般的に「良いコード」とされる物を書けるかどうかはプログラマの技量のみに依存し、
JavaScriptだからといって書けない事はない。
ただ、どちらかというとJSはC寄りで、どんな糞コードでも書けてしまう。
ただこれは、単にJSerの技量が足りないだけであって、推奨されているわけではないので注意のこと。
>>979は今後色々と実感することになるとは思う。

0987デフォルトの名無しさん2019/01/25(金) 19:32:46.97ID:tmiziBOT
今はもうtypescriptで書くのが普通

0988デフォルトの名無しさん2019/01/25(金) 20:14:43.16ID:fW+xzaQf
TypeScript使うのはReact使ってるときぐらいだろ?

0989デフォルトの名無しさん2019/01/25(金) 20:18:01.23ID:tmiziBOT
冗談きつい

0990デフォルトの名無しさん2019/01/25(金) 20:31:44.04ID:fW+xzaQf
>>989
あ、すまん。ReactじゃなくてAngularだね

0991デフォルトの名無しさん2019/01/25(金) 20:37:08.43ID:tmiziBOT
そうじゃなくて、もう普通にみんな使ってるから

0992デフォルトの名無しさん2019/01/25(金) 21:42:00.59ID:lgKiVxcF
c#に似せるならもっとc#にすればよかったのに
あの型の定義の仕方が嫌だ

0993デフォルトの名無しさん2019/01/25(金) 22:24:46.13ID:fW+xzaQf
>>991
それはあんたの会社での話でしょ?
あんたの会社の話でもなく、Angular関係でもなく
TypeScriptが使われてることを証明する証拠でもあるの?

0994デフォルトの名無しさん2019/01/25(金) 22:31:45.82ID:NHrDct4H
こんなのあった。TypeScript圧倒的。
https://twitter.com/__sakito__/status/1071307378950266882
https://twitter.com/5chan_nel (5ch newer account)

0995デフォルトの名無しさん2019/01/25(金) 22:50:09.67ID:7NAKvkXa
>>994
どこが?www

Google Search Trends 2014–2018 JavaScript (Red) vs TypeScript (blue) Topic Interest
https://i.imgur.com/cmYy3rw.png

GitHub Top Languages by Repositories Created: TypeScript is Not in the Top 5.
https://github.blog/2018-11-15-state-of-the-octoverse-top-programming-languages/
https://i.imgur.com/pZcCdjw.png

0996デフォルトの名無しさん2019/01/25(金) 23:35:19.53ID:tmiziBOT
今時型定義も入れずにnpmモジュール作ってるやつとか、白い目で見られるぞ

0997デフォルトの名無しさん2019/01/26(土) 00:03:22.84ID:Ve68vOks
>>996

ごく少数から?www

Google Search Trends 2014–2018 JavaScript (Red) vs TypeScript (blue) Topic Interest
https://i.imgur.com/cmYy3rw.png

GitHub Top Languages by Repositories Created: TypeScript is Not in the Top 5.
https://github.blog/2018-11-15-state-of-the-octoverse-top-programming-languages/
https://i.imgur.com/pZcCdjw.png

0998デフォルトの名無しさん2019/01/26(土) 00:10:36.62ID:yLgVaINv
>>997
下のページのtypescriptの伸びは見ないふりしてるの?

0999デフォルトの名無しさん2019/01/26(土) 00:31:22.48ID:Ve68vOks
>>998
延びた結果がこの差なんだよねwww

Google Search Trends 2014–2018 JavaScript (Red) vs TypeScript (blue) Topic Interest
https://i.imgur.com/cmYy3rw.png

1000デフォルトの名無しさん2019/01/26(土) 00:32:01.77ID:qvEagMOI
javascript最高!
rupyキチガイ死ね!

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 237日 10時間 0分 38秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。