のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,647,425人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
901 : Name_Not - 2019/02/17(日) 00:36:46.17 ID:???.net (+2,-30,-20)
で結局[1,2,3].map(v => (v += 2, v * v));のv += 2は副作用なの?副作用じゃないの!!??
902 : Name_Not - 2019/02/17(日) 00:38:22.33 ID:???.net (+67,+28,-3)
>>896,901
既に説明されてるだろ
903 : Name_Not - 2019/02/17(日) 00:38:45.87 ID:???.net (+5,-30,-52)
>>895
> VariableStatement の中に Comma Operator があったか?

ないから、VariableStatement ではないということ
904 : Name_Not - 2019/02/17(日) 00:41:22.56 ID:???.net (+0,-28,-62)
>>901
代入は副作用ではない
再代入は副作用である

再代入を避けて代入だけにすれば
副作用はない
905 : Name_Not - 2019/02/17(日) 00:42:09.09 ID:???.net (+79,-30,-38)
>>902
悪いけど以下の(ア)に入るのは1か2か答えてくれる?1か2の一文字書くだけだから出来るよね?
[1,2,3].map(v => (v += 2, v * v));
のv += 2は(ア)である
1. 副作用である
2. 副作用ではない
906 : Name_Not - 2019/02/17(日) 00:42:25.07 ID:???.net (+5,-30,-108)
>>903
その一文に対しては「VariableStatement のカンマはカンマ演算子ではない」が正しい
君の一文を証明する事実は「Expression の中に VariableStatement がない」
従って、>>889の論理は成立しない
907 : Name_Not - 2019/02/17(日) 00:42:55.45 ID:???.net (+67,+29,-9)
やっぱり変数宣言は特別なんじゃん
さっき勉強してから書けとか言ったやつ出てこいよ
908 : Name_Not - 2019/02/17(日) 00:44:40.52 ID:???.net (+74,+27,-19)
>>905
Wikipediaの2つの成立条件を考えれば、2. は迷惑だろ
909 : 907 - 2019/02/17(日) 00:45:33.97 ID:???.net (+28,-18,-7)
× 2. は迷惑だろ
〇 2. であることは明白だろ
910 : Name_Not - 2019/02/17(日) 00:49:31.08 ID:???.net (+9,-30,-25)
>>908>>909なるほどありがとう!
ではJavaScript質問スレ民の総意として、
[1,2,3].map(v => (v += 2, v * v));
のv += 2は副作用ではない。
と決定しました!
めでたい。早速Haskellスレに貼ってくりゅ!
911 : Name_Not - 2019/02/17(日) 00:50:06.25 ID:???.net (+103,+29,-130)
>>905
だから"再"代入だから副作用だっていってるだろ
それに対して、代入すべて副作用だって言ってるバカが居るから
一回しか行わない代入(つまりconstが使える場合)は
副作用じゃないって話をしてるんだが

その説明をしないと、お前がバカになりそうだからな
(代入は副作用っていったーって騒ぎまくりそうだからw)
912 : Name_Not - 2019/02/17(日) 00:51:57.37 ID:???.net (+39,-30,-105)
Numberで(値渡しで)考えるからおかしくなる
const xs = [[1], [2], [3]];
console.log(xs);
const ys = xs.map(v => (v[v.length] = 2, v.concat(v)));
console.log(xs);

これでわかるだろ
914 : Name_Not - 2019/02/17(日) 00:55:20.53 ID:???.net (+54,+26,+1)
915 : Name_Not - 2019/02/17(日) 00:55:55.61 ID:???.net (+61,+29,-2)
さらに>>152の経緯を書いてきた!
http://mevius.5ch.net/test/read.cgi/tech/1548720347/153
916 : Name_Not - 2019/02/17(日) 00:56:14.01 ID:???.net (-1,-30,-16)
>>912
v[v.length] =2よりv[0] +=2にするべきだったな、ごめん
917 : Name_Not - 2019/02/17(日) 00:56:44.24 ID:???.net (+71,+29,-46)
>>911
では、再代入が副作用の性質を持っている事を証明する実証コードを書いてくれ
918 : Name_Not - 2019/02/17(日) 01:08:08.14 ID:???.net (+61,+0,-31)
逆。副作用とは何を意味するか?の答えの一つが"再"代入
919 : Name_Not - 2019/02/17(日) 01:09:03.51 ID:???.net (+56,+28,-16)
定義なんだから実証コードなんてありゃしない
920 : Name_Not - 2019/02/17(日) 01:09:15.39 ID:???.net (+100,+29,-14)
>>918
うん。再代入しても副作用の性質が現われてないよね。
921 : Name_Not - 2019/02/17(日) 01:10:45.31 ID:???.net (+93,+27,-52)
>>912
それは「参照の値渡し」のことだな
オブジェクトのプロパティ操作が問題で再代入は関係ない
922 : Name_Not - 2019/02/17(日) 01:14:20.92 ID:???.net (+143,+29,-3)
>>920
関数の中では副作用の性質が現れてる。
関数を抜けると消えるってだけ
923 : Name_Not - 2019/02/17(日) 01:16:50.17 ID:???.net (+73,+29,-12)
>>922
で、それはどんな仕組み?
ガベージコレクションのことをいってるの?
924 : Name_Not - 2019/02/17(日) 01:17:03.59 ID:???.net (+57,+29,-15)
この質問者置いてけぼりでズレた議論かますのいかにもここの住人ぽいな
925 : Name_Not - 2019/02/17(日) 01:19:31.21 ID:???.net (+36,-29,-13)
>>923
ローカル変数vのこと
926 : Name_Not - 2019/02/17(日) 01:19:37.00 ID:???.net (+57,+29,-41)
「2. 他のいかなる機能の結果にも影響を与えない」の意味を理解しようともしないで、「代入=副作用」で思考停止しているだけ
927 : Name_Not - 2019/02/17(日) 01:20:24.94 ID:???.net (+95,+28,-29)
>>925
ローカル変数は内部変数なので、「2. 他のいかなる機能の結果にも影響を与えない」
928 : Name_Not - 2019/02/17(日) 01:22:01.06 ID:???.net (+110,+29,-56)
>>927
だから関数の外部には影響がないが、
内部(関数の中)では影響が出てるって>>922で書いたろ
お前俺のレスに周回遅れしてるぞ
929 : Name_Not - 2019/02/17(日) 01:23:21.39 ID:???.net (+106,+29,-4)
>>928
内部的動作なら副作用はない、って何度もいってる
930 : Name_Not - 2019/02/17(日) 01:24:39.82 ID:???.net (+105,+29,-6)
>>929
だから内部では影響出てるって言ってる
省略するんな
931 : Name_Not - 2019/02/17(日) 01:25:15.18 ID:???.net (+72,+29,-11)
>>930
だから、その動作は副作用ではないって何度もいってる
定義を妄想すんな
932 : Name_Not - 2019/02/17(日) 01:26:39.35 ID:???.net (+64,+29,-22)
> だから、その動作は副作用ではないって何度もいってる

その根拠は?何処かで誰かがそう言ってるの?
933 : Name_Not - 2019/02/17(日) 01:28:12.49 ID:???.net (+48,-30,-27)
>>932
誰かさんが出した2つの条件
http://ja.wikipedia.org/wiki/%E5%89%AF%E4%BD%9C%E7%94%A8_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)
934 : Name_Not - 2019/02/17(日) 01:28:28.54 ID:???.net (+11,-30,-114)
[1,2,3].map(v => (v += 2, v * v));
最初のイテレーションで仮引数vに1が代入されたのち、v += 2することが副作用かどうかと、
それが副作用でも関数外に漏らしてないから問題ないのとは別の話では?

ちなみに>>908>>909のお陰で
[1,2,3].map(v => (v += 2, v * v));
のv += 2は副作用ではない。
と決定しました! 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
935 : Name_Not - 2019/02/17(日) 01:30:06.86 ID:???.net (+139,+29,-81)
>>933
> プログラミングにおける副作用(ふくさよう)とは、ある機能がコンピュータの(論理的な)状態を変化させ、
> それ以降で得られる結果に影響を与えることをいう。代表的な例は変数への値の代入である。

って書いてますね。これが答えですね。
936 : Name_Not - 2019/02/17(日) 01:31:06.98 ID:???.net (+121,+29,-24)
誰かさんって>>848のことだな。
しれっと>>845が持ち出したことにしてるけど>>845そんなとこ触れてないw
937 : Name_Not - 2019/02/17(日) 01:32:27.27 ID:???.net (+71,+29,-16)
>>935
さすがwikipediaウソばっかり!信用できないな!
938 : Name_Not - 2019/02/17(日) 01:36:17.95 ID:???.net (+88,+29,-135)
>>935
だから、それは後ろの方に書いてある破壊的代入のことじゃないのか?
しかも、その一文だと再代入どころか代入全てアNGと受け取れるが、再代入だけNGとしたのはどうしてなんだ?
参照代入なら分かるが、JavaScriptで他に影響がある再代入なんてないだろ?
939 : Name_Not - 2019/02/17(日) 01:38:00.97 ID:???.net (+52,+29,-15)
Wikipediaの件は>>876が補完してくれているのに
940 : Name_Not - 2019/02/17(日) 01:39:09.43 ID:???.net (+57,+29,-19)
他板まで荒らしに行くとかやべーな
一昔前は毛の壁に目を付けられてたし、jsにはそういうのを惹きつける何かがあるんだろうな
941 : Name_Not - 2019/02/17(日) 01:43:07.31 ID:???.net (+44,-30,-33)
>>938
あのな? 「今回の例では問題ない」は副作用じゃないことの理由にはならないんだよ

> [1,2,3].map(v => (v += 2, v * v));
これじゃなくて
v += 2 だろ?

v += 2 に副作用があるかどうかだろ?
あるんだよ。
942 : 847 - 2019/02/17(日) 01:45:48.23 ID:???.net (+88,+29,-42)
>>936
俺はURLを貼った>>845が発端(844がWikipediaを信頼したということ)だと思っているが、誰が持ち出したかなんてどうでも良くね?
ソース提供者の名ぐらいいくらでも譲る
943 : Name_Not - 2019/02/17(日) 01:46:45.42 ID:???.net (+55,+26,-2)
>>941
根拠を示せ
944 : Name_Not - 2019/02/17(日) 01:48:59.73 ID:???.net (+57,+29,-32)
>>876が正解だと思うけどねえ
英文アレルギーの人はこれだから困る
945 : Name_Not - 2019/02/17(日) 01:56:55.57 ID:???.net (+33,-30,-311)
まとめ
カンマ演算子につき、
A, Bと書くとき、Aに期待できるのは副作用のみである。
カンマ演算子が取れるのは式(Expression)のみである。
変数宣言(VariableStatement)は宣言であって式ではない。
すなわち、
const a = 1, b = 2
は変数宣言であり、
またこのカンマはカンマ演算子ではない。
[1,2,3].map(v => (v += 2, v * v));
のv += 2は仮引数vを書き換える副作用である。
カンマ演算子は式(Expression)しか取れないので、副作用なく
[1,2,3].map(v => (const w = v + 2, w * w))
などと書くことはできない。
なぜならconst w = v + 2は変数宣言(Statement)であって式(Expression)ではないからである。
カンマ演算子を使わず
[1,2,3].map(v => {
const w = v + 2;
return w * w;
})
と書いたときはどこにも副作用がない。カンマ演算子もどこにもない。
946 : Name_Not - 2019/02/17(日) 01:59:02.59 ID:???.net (+62,-29,-82)
まとめ

> カンマ演算子につき、
> A, Bと書くとき、Aに期待できるのは副作用のみである。
a = 1, b = a のような書き方ができるので間違い

単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ
947 : Name_Not - 2019/02/17(日) 01:59:28.05 ID:???.net (+53,+26,-14)
>>946

それが結論だなwwww
948 : Name_Not - 2019/02/17(日) 02:00:01.60 ID:???.net (-8,-26,-14)
代入は副作用
949 : Name_Not - 2019/02/17(日) 02:01:59.23 ID:???.net (+56,+29,-16)
なら束縛すればいいのでは?
950 : Name_Not - 2019/02/17(日) 02:02:52.92 ID:???.net (+57,-29,-36)
>>946
そのカンマが(変数宣言ではなく)カンマ演算子である場合、a = 1もb = aも必ず代入であり副作用。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について