私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.137 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>845
偉そうな物言いは「破壊的代入」で説明されている部分を理解してからにしてくれませんかね
偉そうな物言いは「破壊的代入」で説明されている部分を理解してからにしてくれませんかね
ちなみに>>851を副作用なしで書くとこうなる。
const c = baz(bar(foo()));
tc39で議論されてるパイプラインオペレータが入ると将来こうも書ける。
const c = foo() |> bar |> baz;
まあfoo, bar, bazの中で副作用使ってるかどうかまでは関知しないが。
const c = baz(bar(foo()));
tc39で議論されてるパイプラインオペレータが入ると将来こうも書ける。
const c = foo() |> bar |> baz;
まあfoo, bar, bazの中で副作用使ってるかどうかまでは関知しないが。
ミュータブルと副作用の違いもわかってないっぽいし、律儀につき合うこともないと思うが…みんな真面目だな
以下の3つはどれも全く同じ処理をしており副作用はありません。
これぐらいみんなわかりますよ?
function func() {
return baz(bar(foo()));
}
function func() {
const a = foo();
const b = bar(a);
const c = baz(b);
return c;
}
function func() {
const a = foo(), b = bar(a), c = baz(b);
return c;
}
これぐらいみんなわかりますよ?
function func() {
return baz(bar(foo()));
}
function func() {
const a = foo();
const b = bar(a);
const c = baz(b);
return c;
}
function func() {
const a = foo(), b = bar(a), c = baz(b);
return c;
}
ミュータブル以前の問題で「代表的な例は変数への値の代入」の説明を見て、反射的に脳内回路が出来上がっただけじゃないかね
説明の一部分だけ読んで早合点するやつは、最近珍しくない
説明の一部分だけ読んで早合点するやつは、最近珍しくない
>>854の挙げているHaskellのコード
> a = 1
> b = 2
> c = a + b
>
> main = do
> print c
をあえてJavaScriptで同等に書くとこうなる。
const a = 1;
const b = 2;
const c = a + b;
console.log(c);
カンマ演算子を使った
a=1, b=2, c=a+b
の場合は、
a=1
b=2
c=a+b
の3expressionすべて副作用を持つ。
これは、a, b, cの各変数をvarで宣言済みか、letで宣言済みか、あるいは宣言なしのグローバルかに関わらず、である。
> a = 1
> b = 2
> c = a + b
>
> main = do
> print c
をあえてJavaScriptで同等に書くとこうなる。
const a = 1;
const b = 2;
const c = a + b;
console.log(c);
カンマ演算子を使った
a=1, b=2, c=a+b
の場合は、
a=1
b=2
c=a+b
の3expressionすべて副作用を持つ。
これは、a, b, cの各変数をvarで宣言済みか、letで宣言済みか、あるいは宣言なしのグローバルかに関わらず、である。
>>860
そんな高度(?)なこと考えてないよ。
単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ
C言語のカンマ演算子の代表的な使い方であるfor文の初期化式でも代入してるのになぁ
for(int a=1, b=2, i=0, i < 10; i++)
そんな高度(?)なこと考えてないよ。
単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ
C言語のカンマ演算子の代表的な使い方であるfor文の初期化式でも代入してるのになぁ
for(int a=1, b=2, i=0, i < 10; i++)
だから代入は副作用だって。
JSは副作用書けるしよく使うというだけの話だろ
JSは副作用書けるしよく使うというだけの話だろ
> だから代入は副作用だって
それだと純粋関数型言語であるHeskellにある代入(正確には束縛)
をどう説明すんの?
それだと純粋関数型言語であるHeskellにある代入(正確には束縛)
をどう説明すんの?
const a=1, b=2, c=3 って書いたら
ちゃんとbもcもconstになるな。
ってことは
> const a = foo(), b = bar(a), c = baz(b);
は再代入できないから完全に副作用なしだ
ちゃんとbもcもconstになるな。
ってことは
> const a = foo(), b = bar(a), c = baz(b);
は再代入できないから完全に副作用なしだ
>>869
これは副作用ないね。
これは副作用ないね。
JavaScrptのconstへの代入は
値を変更できないから束縛相当になるよ
つまりこれは完全に副作用がないということ
> const a = foo(), b = bar(a), c = baz(b);
値を変更できないから束縛相当になるよ
つまりこれは完全に副作用がないということ
> const a = foo(), b = bar(a), c = baz(b);
>>870
STRef「呼んだ?」
STRef「呼んだ?」
日本語wikiだと
> 代表的な例は変数への値の代入である。
ってだけなのでちと分かりづらい
英語だと
> said to have a side effect if it modifies some state variable value(s) outside its local environment
とか
> Example side effects include modifying a non-local variable, modifying a static local variable, modifying a mutable argument passed by reference, performing I/O or calling other side-effect functions.
とかあって分かりやすいね
> 代表的な例は変数への値の代入である。
ってだけなのでちと分かりづらい
英語だと
> said to have a side effect if it modifies some state variable value(s) outside its local environment
とか
> Example side effects include modifying a non-local variable, modifying a static local variable, modifying a mutable argument passed by reference, performing I/O or calling other side-effect functions.
とかあって分かりやすいね
結論としてはこれ
> 単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ
> 単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ
constへの代入なら副作用はない
> const a = foo(), b = bar(a), c = baz(b);
> const a = foo(), b = bar(a), c = baz(b);
>>880
カンマ演算子です
カンマ演算子です
カンマ演算子
http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator
例
このコードは、配列における対角線の要素の値を出力するものです。
for (var i = 0, j = 9; i <= 9; i++, j--)
http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator
例
このコードは、配列における対角線の要素の値を出力するものです。
for (var i = 0, j = 9; i <= 9; i++, j--)
>>883
勉強してから発言しろ
勉強してから発言しろ
じゃ[1,2,3].map(v => (v += 2, v * v));
も、[1,2,3].map(v => (const w = v + 2, w * w));って書けばいいな!
あ、あれ?(TдT)
も、[1,2,3].map(v => (const w = v + 2, w * w));って書けばいいな!
あ、あれ?(TдT)
>>881-882
MDNが絶対的に正しいわけではないんだよ
仕様のSyntaxを確かめて
http://www.ecma-international.org/ecma-262/9.0/#sec-for-statement
MDNが絶対的に正しいわけではないんだよ
仕様のSyntaxを確かめて
http://www.ecma-international.org/ecma-262/9.0/#sec-for-statement
変数も代入も言語ごとに原理が異なるわけで、一律に「代入=副作用有」と考えるのが間違いの元
>>886
for(Expression; Expression; Expression)Statement
12.16 Comma Operator ( , )
Syntax
Expression:
AssignmentExpression
Expression, AssignmentExpression
forのExpressionにはカンマ演算子が使えることを確認しました。
やはりカンマ演算子ですね
for(Expression; Expression; Expression)Statement
12.16 Comma Operator ( , )
Syntax
Expression:
AssignmentExpression
Expression, AssignmentExpression
forのExpressionにはカンマ演算子が使えることを確認しました。
やはりカンマ演算子ですね
function plus(a){
return b => a + b;
}
function square(n) {
return n * n;
}
function compose(...fs) {
return x => fs.reduce((y, f) => f(y), x);
}
[1, 2, 3].map(compose(plus, square));
うん、これで解決だな!
return b => a + b;
}
function square(n) {
return n * n;
}
function compose(...fs) {
return x => fs.reduce((y, f) => f(y), x);
}
[1, 2, 3].map(compose(plus, square));
うん、これで解決だな!
[1,2,3].map(v => (v += 2, v * v));
最初のイテレーションで仮引数vに1が代入されたのち、v += 2することが副作用かどうかと、
それが副作用でも関数外に漏らしてないから問題ないのとは別の話では?
最初のイテレーションで仮引数vに1が代入されたのち、v += 2することが副作用かどうかと、
それが副作用でも関数外に漏らしてないから問題ないのとは別の話では?
だーかーら、マヌケってだけだろー
(>>849より)
> A, Bと書くとき、Aに期待できるのは副作用のみである。
↑に対して
単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ
(>>849より)
> A, Bと書くとき、Aに期待できるのは副作用のみである。
↑に対して
単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ
>>889
> for(var VariableDeclarationList;Expressionopt;Expressionopt)Statement
ここは読んだか?
Expression の中に VariableStatement があったか?
VariableStatement の中に Comma Operator があったか?
> for(var VariableDeclarationList;Expressionopt;Expressionopt)Statement
ここは読んだか?
Expression の中に VariableStatement があったか?
VariableStatement の中に Comma Operator があったか?
結局[1,2,3].map(v => (v += 2, v * v));のv += 2は副作用なの副作用じゃないの?あくしろ
>>892
「代入=副作用」の認識だから、代入出来る事に気が付いても副作用で使えないと思ってるんだろ
「代入=副作用」の認識だから、代入出来る事に気が付いても副作用で使えないと思ってるんだろ
やっぱり変数宣言は特別なんじゃん
さっき勉強してから書けとか言ったやつ出てこいよ
さっき勉強してから書けとか言ったやつ出てこいよ
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.131 + (1000) - [97%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.135 + (1002) - [97%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.130 + (974) - [97%] - 2016/10/26 14:18
- + JavaScript の質問用スレッド vol.130 + (1001) - [97%] - 2017/11/25 20:45
- + JavaScript の質問用スレッド vol.117 + (1009) - [97%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.131 + (1004) - [97%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.132 + (1001) - [97%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.107 + (1001) - [97%] - 2013/9/7 10:16
- + JavaScript の質問用スレッド vol.133 + (1001) - [97%] - 2018/6/8 10:45
- + JavaScript の質問用スレッド vol.134 + (1001) - [97%] - 2018/8/3 23:15
- + JavaScript の質問用スレッド vol.136 + (1001) - [97%] - 2019/1/8 11:30
- + JavaScript の質問用スレッド vol.138 + (1004) - [97%] - 2019/4/20 23:45
- + JavaScript の質問用スレッド vol.139 + (1001) - [97%] - 2019/5/27 15:15
- + JavaScript の質問用スレッド vol.127 + (1001) - [97%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [97%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.113 + (1001) - [95%] - 2014/3/15 21:30
- + JavaScript の質問用スレッド vol.118 + (1002) - [95%] - 2014/8/29 22:30
トップメニューへ / →のくす牧場書庫について