+ JavaScript の質問用スレッド vol.126 +
■ このスレッドは過去ログ倉庫に格納されています
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です) ブラウザがモジュールに対応してないからビルドが必要になるということ モダンブラウザは対応してるでしょ
シェアの8割〜9割は対応してることになる
非サポート組はnomoduleで最低限の機能提供するか
JS切ってるのと同等に扱ったほうが良いだろうね 小さく始める isomorphic module pattern
https://qiita.com/Jxck_/items/14bbb49d1fd657f03343
【JavaScript】モジュールパターンについて知る
https://qiita.com/kenju/items/a8a1009f5872a8b12568
原始的なモジュール定義は、即時関数で囲めばプライベートになり、外から内部にアクセスできない。
公開する属性だけ、return で返せばよい。
下のサイトの、モジュールパターン4 を参照
本格的な開発では、Node.js, webpack, ES6 などを使う
モジュールシステムは、AMD, commonjs 方式の2つあり、
そのゲームエンジンが採用している方を使えばよい >>126
1割以下のブラウザは捨てていいって判断だと
SafariやFirefoxで動かなくてもいいやってことになるぞw それとは結構違うな
レガシーブラウザを使い続けてるって言うのは特殊な部分があるし、
ブラウザもその下のハードウェアも性能に期待できないから
ポリフィルという重しを課してまでモダンブラウザと同等に働かせるべきかと言うと
自分はハテナを浮かべるな class言ってるんだからモダンブラウザで良いでしょ >>128
シェアの8割〜9割の意味をもう少し考えたらどうだ >>131
どれくらい多くの人が見れるかでしょう?
モジュールに対応している人だけが見れるサイトだと
1〜2割の人が見れなくなる >>132
それでなんでFirefoxで動かなくていいやってことになるんだ? JavaScriptを理解するのってどのくらいの期間かかるものなの?
ドットインストールの有料コース3週くらいやってんだけど未だ難しい IEしか使えないってのは要するに企業ユーザーであって
それは案件ごとに要望に沿うだけの話だけど
宗教的理由によりIEしか使えない奴らはそれこそ知らんと言っても良いと思う >>138
たのしいRuby 第5版、2016
これを読んで半年、オブジェクト指向・関数型で、Ruby をいじくりまわしてから、JavaScript に戻ればよい。
CSS セレクターを使う、jQuery と、Ruby のNokogiri が、ほぼ同じ
Progate のサイトでも、やってみれば?
プロレベルでは以下の2冊だから、数年は掛かる
JavaScript 第6版、2012、David Flanagan
初めてのJavaScript 第3版 ――ES2015以降の最新ウェブ開発、オライリー、2017 インタラクティブ・データビジュアライゼーション
――D3.jsによるデータの可視化
原書は第2版が去年出てるみたいです。
日本語版の第2版の出版予定はありませんか? >>145
> CSS セレクターを使う、jQuery と、Ruby のNokogiri が、ほぼ同じ
ぜんぜん違う。NokogiriはjQueryに比べたら洗練されていない
通称jQueryオブジェクト呼ばれている、いちばん重要な
オブジェクトがNokogiriには搭載されていない
そのせいでCSSで取得した複数のオブジェクトをeachで繰り返して
操作するというjQuery以前のやり方をしないといけなくなってる。
NokogiriでjQueryを学んだ気になると、jQueryとしては
悪いコードになってしまう。 そりゃ、jQuery の方が洗練されてる。
Nokogiri では、単数と複数(配列)の戻り値を返す、2つの関数に分かれているから面倒
jQueryでは、単数・複数・該当要素なしでも、統一的に扱えるし、メソッドチェーンできる >>145
理解するのにどのくらいかかるかって質問してるのに
何でrubyやらjQueryが出てくるんだ? JSを理解するとは仕様書のどこを読んでも、うんうんそうだよね、と言える状況のこと
型変換、スコープチェーン、プロトタイプチェーンのようにイメージの積み重ねでの閃きのような物が必要な概念もあるけど
一方共有渡しの原理とかは仕様書を読まないと絶対に納得できない むしろ自分の中の話でなかったら何なんだ?
お前の中では>>151が世界の代弁者のつもりにでも見えるのか? すみません、以下のコードが読めません。分解して教えてくださいませんか?
1 function presetDiary(dateStr){};
2 htmlStr += "<a onclick='presetDiary(\"" +dateStr + "\");'>"+cellStr+"</a></td>";
2行目はダブルクォーテーションとシングルクオーテーションが入り乱れていて
何が書かれているかわからなくなってます。
普通にHTMLタグで書くと
<a onclick="presetDiary(dateStr)">cellStr</a></td>
となると考えていいのでしょうか? > 2行目はダブルクォーテーションとシングルクオーテーションが入り乱れていて
> 何が書かれているかわからなくなってます。
わかるだろ?
お前が本当に言いたいことは、
どこがどう対応しているのか調べるのが
「面倒です」ってだけだろ
嘘つくなや。そして怠けるな 1. は単なる関数定義。
入門書を読むか、検索でもすれば?
2.
><a onclick="presetDiary(dateStr)">cellStr</a></td>
こうだろ
<a onclick='presetDiary("dateStr");'>cellStr</a></td>
でも変数、dateStr を、" " で囲むのは、おかしい。
この文は、間違い onclickとイベントリスナーclickの違いって何があるんでしょうか? onclickの方が古く、問題があるので
解決策として出てきたのがイベントリスナー HTML 内に書くと、グローバル関数になってしまうから、良くない
また、addEventListener() は、ブラウザによっては使えないから、
jQuery を使う方が、互換性が高い
web 関連の質問は、web制作管理板へ書き込んでください。
そこの方が、知っている人が多い >>160
>>161
ありがとうございます。onclickは古いんですね。
web制作板の存在は知りませんでした。行ってきます >>162
古いから使うな、ってのも間違いなんだが、
使い分けの意味が分からず、イベントリスナーで問題ないうちは、全部イベントリスナーでも問題ないよ。 WEB広告の内容ってJavaScriptで取得できますか?
他社サービスの広告を埋め込み配置して表示させる(hiddenでもかまわない)
JavaScriptで広告の内容を取得してユーザーIDと合わせてサーバーに送信して保存する
保存したデータから個々のユーザーが興味を持っている事がわかるのでマーケティングに利用する
ということができるのではないかと考えています >>164
不可能。そういう悪用ができないようになってる キャンバス上に描く図形の色を変数から指定したいのですが変数名を入れる時にただの文字列と区別させて認識させるにはどうしたらいいでしょうか?
var str=フォーム.色.value;
con.fillStyle = 'str';
としているのですがどうしても黒のままなのです ダウンロードにプログレスつけるのって簡単にできる?
手元にとどいてるファイルのサイズってJSでみれる? Fetchって使ったことないので調べてみます
ありがとうございます >>164
できる、getUserMediaでスクリーンをキャプチャできる >>172
え?なに? それ使ったら、ユーザーの画面キャプチャして
サーバーに勝手に送信できちゃうの?
ここクリックしてーとかやったら
気になるあの娘のパソコンの画面とか
見放題だな! >>172-173
> カメラやスクリーンシェアリング、マイクのようなビデオやオーディオ入力装置の使用許可をユーザーに要求します。
> スクリーンシェアリング
> https://developer.mozilla.org/ja/docs/Web/API/MediaDevices/getUserMedia
そのための機能なのだから、出来るのだろうね > 使用許可をユーザーに要求します。
だめじゃんw
WEB広告表示されたら、画面をキャプチャして送信していいか?って聞くんだろ? これでなんで入替えできるの?
b = [a, a = b][0]; >>177
それを分からない奴が、そんな書き方のプログラムを読む意味はない 訳:「わからないので説明できない。俺が分からないのだからお前もわかる必要はない」 >>179
そう思うのならそれでいいと思うよ
普通の人は「まんまだろ」としか思わないと思うけど
てゆうかマジでそれ何?uglifierの出力か何か? >>179
つーか、ググったらヒットしたわ。ちょっと違うけど。
> a = [b][b = a,0];
> https://stackoverflow.com/questions/9864420/how-does-bb-a-0-swap-between-a-and-b
後ろ側は配列として解釈されないのか?という心配はあるが。
サイトのコード読んでいるのなら、minifyするときにそうなった可能性がある。
(良いやり方だとも思わないし、具体的に何を使えばそうなるのかも知らんが)
手でそんなのを書く奴は居ないので、
もし君がそこに引っかかっている(=文法も十分に分からない初心者)なら、今は別のコードを読むべきだ。 a = 1, b = 2のとき
b = [ a, a = b ][ 0 ]
b = [ 1, a = b ][ 0 ]
b = [ 1, a = 2 ][ 0 ]
a = 2; b = [ 1, 2 ][ 0 ]
a = 2; b = 1
b = [ a ][ a = b, 0 ]
b = [ 1 ][ a = b, 0 ]
b = [ 1 ][ a = 2, 0 ]
a = 2; b = [ 1 ][ 2, 0 ] //カンマ演算子
a = 2; b = [ 1 ][ 0 ]
a = 2; b = 1
段階は全然多くない、このくらいなら手で書かれることは十分にある
このくらいは理解できないとJS中級者にはなれない
ただ超基本的な処理の順番や構文を知っていてそれを慎重に追っていけるかの問題
因みに同じことをするのは今どきはこうする
[ a, b ] = [ b, a ] >>182
> このくらいなら手で書かれることは十分にある
> このくらいは理解できないとJS中級者にはなれない
ねーよ。お前ら相変わらず世界観が歪んでるな。 >>183
このくらいの複雑度
つまり五段回くらいの評価が一行に書かれることって
アロー関数とかが入った今ますます書かれるようになってると俺は思うが
特にreduceとか使うとこの例と似た状況にもなりがち >>185
俺の意見は、「変数の入れ替えをその書き方でする奴は居ない」だが、これで理解出来るか?
その程度の「複雑度」なら、大したことはないし、普通の人なら頭の中で読めるでしょ。
> reduce
reduceってのは数値演算をするときに多用するのであって、
通常のJavaScript(=DOM操作等)ではほぼ使わない。
そもそも変数の入れ替えも『初心者用の教材の』ソート等では使うが、実用では皆無でしょ。
お前、前から居るズレてる奴で、相変わらずズレてるよな。 >>185
というか、お前、前からreduceにこだわってるよな。
JavaScriptでどういう操作をする時にそれが有用なのか、言えるか? おい複雑度っていうのを俺俺で使うんじゃない。
コードメトリクス用語の「複雑度」とごっちゃになって紛らわしい
>>177のようなものは「複雑度」はあがらない。
上から下に単純に読み下せばいいからだ
こういうのは単に知らない命令があったってだけで複雑なのではない
「複雑度」というのは、コード自体は読めるが絡まっていて読みづらいということを指す。
具体的にはループ、条件分岐が増えることで「複雑度」が増えていく ちなみにコードが複雑というのは、コードの問題だが、
コードが読めないっていうのは、人間側の問題だからな
人間側の問題なのに「これ複雑っすよー」っていうやつが多い
(単にそいつが読めないだけ) reduceは数値演算で多様?
[1,2,3,4,5].reduce((o,n)=>{o[`n${n}`]=n;return o},{})
みたいに第二引数にオブジェクト渡して繰り返し操作したりもよくあることだと思うけど
君が全然JSを知らない・知ろうとしない。使って来てない・使おうとしないから
本当に解説書の一番上に乗っている形でしか構文やAPIの使い方を思い浮かばないのは勝手だけど
人のことをズレてるとか言うもんじゃないよ。ただ単に君の応用力が矮小なだけだからね >>189
言いたいことは分かるが、
var tmp=a;a=b;b=tmp;
と比べたら複雑なのは事実だろ。
ただし、これにより「コードが読めなくなる」事はあり得ないので、
『大規模コードの長期的メンテナンス』を前提とした
コードメトリクス用語の「複雑度」なら全く上がらないのも事実だ。
ただ、JavaScripterの話を聞いている限り、
こいつらは「どういうコードが読めなくなるか」については知らないし、
それで何とかなる世界なのだと思う。
これ自体は俺はありだと思っているし、このやり方は他言語の連中も学ぶべきだと思う。
つまり、四角四面で「絶対にメンテナンスしきる」のではなく、
ある程度の集積度や規模に留め、コードをある程度使い捨てにしていく、という方法だ。
長期メンテナンス前提で書くと色々面倒だったりするだろ。そのコストが省ける。 「コードをある程度使い捨てにしていく」っていうのはまた面白い話だけど
あの十数文字のコードがそんなに大げさな話に繋がるものかぁ?
どちらにせよ自分としてはちょっと話が違う気がする
コードを捨ててもいいから適当にああいう書き方をするっていうことになるならね
やっぱり幾らかテクニカルなコードっていうのは「どうにでもなれ!」って感じよりはむしろ
書いた本人は効率的で読みやすいと思ってる場合が多いのだろうから
もし読めない人がチームメンバーにいるのならそう書くべきじゃないだろうよ
だって「スマート」という目的が果たされてないのだから
ただ自分が言ってるのは、だからといって一般的に読めないままでいいということではないということ
あの程度は普通に読めるようになっとこうよ、中級者くらいを名乗るなら、と言いたいだけ >>191
var o = {n1: 1, n2: 2, n3: 3, n4: 4, n5: 5};
その例なら普通はリテラルで書くだろ。
もっと多ければどうせコンストラクタとして分離するし、関係なくなる。
多分君は『文法を学ぶ』事を学習と思っているのだろうけど、そうじゃない。
書いて、デバッグして、メンテして、それが学習だよ。
新文法は便利に使えばいいのであって、無理に使うものではない。
君には>>189-190が何を言っているか分からないだろ。 >>193
前提が全然違う。
あの程度は普通に読めるのは、当たり前なんだ。
そして、あの手の「1行の範囲にとどまる複雑さ」なんて、長期的には全く問題にならない、といってるんだよ。
まあ君には通じないとも思うけど。 reduceは汎用だよ。誰が数値計算にしか使っちゃいけないって言ったんだろw
サイトからダウンロードURLリスト作ってファイルダウンロードするとき一度に多ストリーム開くと問題なときreduceの中でfetchのプロミスをthenで繋げるようにして一時に1ダウンロードしか走らないように制限したり、
i(h(g(f(e(d(c(b(a(データ。数値に限らないぞ?)))))))))みたいに無数の関数を次々適用したいとき
let fns = [a,b,c,d,e,f,g,h,i]
fns.reduce(((acc,fn) => fn(acc)), データ。数値に限らない)
ってやったり…
宗教で数値計算にしか使わないのは勝手だが布教はよそでしろよな。
てかID:8fc2vBvs程度が低すぎるわ。質問に答えるでもなく程度が低いのに突っかかってばかり。糖質かな?
死ねばいいのに。 >>193
あと、多分、中級者の基準がおかしい。
君のはJavaScript『文法』の中級者なんだよ。
JavaScriptはプログラミング言語であり、プログラミング言語は実装の道具だ。
だから、本来の『JavaScript中級者』ってのは、何を実装出来るかで測られるべきなんだよ。
俺の定義なら、以下だね。
・初級者:一通りも出来ない。
・中級者:一通りやりたいことは出来る。
つまり、「ポップアップを作りたい」「ここをクリックしたらこう動かしたい」等、
やりたいことがあれば、とりあえず動く物は作れる。
・上級者:最初から最適な構造を考えて実装出来る。
勿論、新文法が便利なら使えばいいのだけど、最適な構造かどうかと新文法はほぼ関係ない。
(むしろ本質的に必要な物は先に取り入れられるから、新文法は基本的にオマケでしかないし)
それよりも、コード構造の方が何倍も重要なんだよ。 >>196
> reduceの中でfetchのプロミスをthenで繋げるようにして一時に1ダウンロードしか走らないように制限したり、
> 無数の関数を次々適用したいとき
やるのは自由だが、それ、普通に配列をforで回しても実装出来るだろ。
新文法を使う=上級者、というのは完全に間違いだって事だよ。
君らは文法にしか目が行かないからそういうことしか言えない。
それは初心者にありがちなパターンでもあるけど。
(初心者は文法から入るしかないから、どうしてもそこに目が行く) >>194
「思っているのだろうけど」とか止めてくれない?
自分はこういう構文が良いものだとも、ああ書くべきだとも言っていないよね?
こういう使い方もできる、こうも書かれることもある
そのくらい思いついて、すんなり読めるようになろうと言ってるだけ
無理に使う?君が無理かどうかなんて知ったことじゃない
>>195
長期的って言うのがそういう期間を指しているのか知らんけど
デバッグも完璧に終わってリリースしてしばらくたった後、大型アップデート時に
ってことならまだ分かるけど、今どきは毎日小変更デプロイでしょ
そういう体制だと将来的に困ったら丸ごとすげ替えればいいっていうのは通用しない
複雑なものを放置しとくと、実際困ること必至
それがJSerの考え方の面白い特徴だとか、古すぎぃ >>198
それ、reduceでできるよね。わざわざforを使って本質的でない一時変数をいじくりたい理由とは?w
reduceなんて何年も前から使える。es2015ですらない。
文法にしか目に行ってないのは君自身のことだね。悪いけど一緒にしないでもらえる?
君はどこまでも自分本意な考えで、自分の知らない文法=新文法、自分の知らない文法を他人が使うのがとにかく気に入らない、これに尽きる。これに後付けで理屈をくっつけているだけ。 >>199
> こういう使い方もできる、こうも書かれることもある
この必要がないんだよ。むしろ、してはいけない。
それが分からないのは君が『長期的』メンテナンスしたことがないからだね。
> 長期的って言うのがそういう期間を指しているのか知らんけど
CやJavaの世界では20〜30年以上だね。
そして「コードメトリクス」はそれを前提としてるから、JavaScriptにそれを適用するのも無理がある。 >>197
君は本当によくわかってる。正に君の言う通り。
自分はJavaScriptを道具だとは思っていない。
もちろん君の定義も分かる
でも曖昧で幅広すぎるでしょ?
ここはWeb制作板じゃないというのもあるし
なんだかんだ言ってもやっぱり今回は文法の問題だったので
文法レベルで言わせてもらった
ってわけでもない
自分が中級者と言って想定したのは「右も左も分からない段階を抜けてそこそこ使えてきた段階」
つまり、とにかく基準は何にせよ俺は初級者は抜けられたぞ!って思ってるような人に
そこで満足してほしくないからちょっと意地悪で大げさに発破かけただけ
皆どちらかと言うと君の基準だろうから、そこはわかった上であえて文法面をぶつけてみただけ
すまんね、自分バランス取るのが好きなひねくれ者だから >>200
> 本質的でない一時変数をいじくりたい理由とは?w
ああ、そっちの宗教の人か。
まあ、流儀があってやっているのならいい。
それで君にとって「読みやすくなる」のならそれもありだ。
ただ、reduceを知らないってことは無いし、それで読みやすくなるって事もないけどね。
関数型()の奴は1行にこだわるが、
関数間のいわゆるコードメトリクス上の「複雑さ」には無頓着なんだよ。君もね。
まあいいけど。 すまんな
自分、盛り上げるのは好きだけど盛り上がってくるとどうでも良くなるんだ
もう寝るね >>203
そういうのを藁人形論法という。
俺はforも使う。
俺には選択の自由があり適宜使い分けるが君はforにこだわる。
正しく君のほうが宗教だ。 >>205
そう思うのは自由だが、実際に関数型()の連中はかなり宗教だぞ。
そして関数型()が成果を出せなかったのも事実だろ。
俺はforにこだわっているのではなく、単に見た目そのままの書き方にするだけ。
つまり、これまでの話なら、以下だね。
> var tmp=a;a=b;b=tmp;
> var o = {n1: 1, n2: 2, n3: 3, n4: 4, n5: 5};
当然、ループ回したいだけならforで回す。
無理にreduce使う意味はないんだよ。reduce使ってる俺カッケーがしたいだけ。
それもしたければすればいいのだけど、問題は、
オブジェクト指向的には「1ヶ所に集める」ことが必要なのだが、連中は、それを理解しておらず、
「1行で書ける!」と言ってそれをコード全体に散りばめてしまうこと。
それは仮に1行で書けたとしても関数として切り出さないと不味いんだよ。
(だからそれが仮に一時変数を使って3-5行必要だとしても、関係なくなる)
「長くなるから関数に切り出す」で、短いのだからそこに書いてしまえ、になってしまっている。
これは明確な間違いだ。
ここら辺は長期的メンテナンスをすれば分かるはずなのだが、
話が通じないところを見ると、彼等にはその経験がないんだよ。君もね。
まあいい、とにかく何でもいいから長期的にメンテナンスしてみろ。色々分かるから。
reduceはそもそも筋が悪いんだ。
配列を縮退させるメソッドなのだが、そもそも縮退させるような物は最初から配列にしない。
だから一時配列で便利に初期化、みたいな例ばかりな訳でさ。
なんであんな糞使えないメソッドが導入されたのかが俺には謎だ。 >>206
やっぱ藁人形w
誰も一行で書けるからreduceがいいなどとは言ってない。
ましてや関数型至上主義者ならなおさらそのようなことは言わないだろう。
> なんであんな糞使えないメソッドが導入されたのかが俺には謎だ。
つまり、「俺に分からないreduceなんてみんなも使うべきじゃないんだ!」
ガキか。 >>207
それならそれでいい。
俺はお前の書き込み全部デタラメだと思ってるぞ。 >>209
だから、まず、
> 俺に分からないreduceなんてみんなも使うべきじゃないんだ!
が間違いなんだよ。
君にとって reduce が難しいからそう思えるのだろうけど、
実際、reduceが分からない奴なんて居ない。使いどころがないだけだ。
>>196も無理矢理でしかない。
indexOf等と比べてゴミなのは事実だろ。
というか、JavaScriptのスレには前からreduceが大好きな奴がいるが、
ここまで来るとjQuery廚と同じく布教目的か?
なら筋が悪いから無理だ。 > 君にとって reduce が難しいからそう思えるのだろうけど、
自己紹介乙w
> reduceが分からない奴なんて居ない。使いどころがないだけだ。
はいはい。じゃ更新しといてやるよ。
「ボクが使いどころが分からないreduceなんて、みんなも使うべきじゃないんだ!」
ガキか。
使いどころで使ってんだよ。テメーが分からないからって強制してくんじゃねーぞクズ。 >>190でも似たようなことを書いたが
コード側の問題 と 人間側の問題をはっきり区別つけろ
reduceがわからないっていうのは人間側の問題だ
コードの問題じゃない >>211
だから、何度も言っているが、
× 使いどころが分からない
○ 使いどころがない
なんだよ。
結局、>>196も、『一時的に』配列として持たせてreduceしただけだろ。
最初からいきなり縮退させれば済むだけの話。
reduceは『配列として意味がある』(≒配列として『持つしかない』)物を縮退させるメソッドであって、
そもそもそのケースがJavaScriptの用途においてはほぼ無いんだよ。
そして他言語でもこのメソッド持ってないだろ。大して使えないからだよ。
>>212
俺の立場をはっきりさせた方がいいのか?なら、そちらと同じで、
・reduceを使ってもコードメトリクス的な「複雑度」については上がらない。(これが原因で『長期的に』読めなくなることはない)
・reduceは難しくはない。(これが原因で『短期的に』読めなくなることもない)
・使っているコードに遭遇しないのは、そもそも使いどころがないから。
・>>196はイキった馬鹿が無理に使う例だが、まあ、やりたければやればいい。大局的な問題にはならない。 > ○ 使いどころがない
使い所はあるだろう?
いや、開発効率とか考えずに、可能不可能だけの話をしたいなら
アセンブラでもできるから高級言語の使い所はないって話になるけど > ・reduceを使ってもコードメトリクス的な「複雑度」については上がらない。(これが原因で『長期的に』読めなくなることはない)
条件分岐、ループが減るので、reduceを使うと複雑度は下がる
当然のことながら僕新人なんですみたいな
人間の問題の話はしない reduceは初期状態があって、データの数だけ
状態を変更していくというパターンにすべて使える
例えば、初期状態が0で、配列の数値を加算していくとか
もちろん加算だけじゃなくて任意の計算ができるし
初期状態も数値ではなくて配列などでも良い reduceの問題は、reduceをしたくてreduceを使うのではなく
reduceを使って何かをする、というところにあると思う
後から又は他人がコードを読んだときに
何をしているのか、何のためにreduceを使用しているのかを
一旦考えないといけない
利便性はあると思うが
やりたいことそのものズバリを表している名前や動作ではない
というところが難点なのではなかろうか > 何をしているのか、何のためにreduceを使用しているのかを
> 一旦考えないといけない
forでも同じ。なんのためにループしているのか
一旦考えてる reduceの場合(人間に問題がない場合)
その名前から「初期値になにかの計算を計上していってる」ってことまで
単語一つで分る
同じことをforでやろうとすると、forは繰り返しているだけ(何をしたいの?)
変数を見つける。その変数になにかの処理を行って、同じ変数に入れている
ここまでコードを読んで、あぁreduce相当の事をやっているんですねとわかる
reduceという単語一つでわかるのと、
コードを読んでいかないとわからない
この違いがある クロームで見たとき5chで書き込むボタンを押したとき
ボタンを押す処理をする前に自分の考えた処理を付け加えたい場合
どのようなコードを書けばよろしいでしょうか?
もしよろしければ教えてくださいませ。 >>217
同意だ。
>>216その他
言いたいことは分かるが、forの代わりにreduceを用いたところで大差ない。
reduceの場合も中身(関数)を読まなくてはならず、
そこが単純な関数なら、forで書いても単純だからだ。
結局は、
> reduceは初期状態があって、データの数だけ
> 状態を変更していくというパターンにすべて使える(216)
この汎用性を取った為、
> やりたいことそのものズバリを表している名前や動作ではない(217)
この問題が発生した、ということだ。
数値計算では average/sum/max/min 等のメソッドがarrayに欲しくなるが、
これらは reduce を用いて作れる。
ただ、これらを上位で reduce を用いて書くのは間違いで、
ラップしたメソッド array.average()等を使うべきだ。
だから直接使うのではなく、下位メソッドとして用意した、というのなら分かる。
問題は、JavaScriptで数値計算をすることはないので、この手の中位メソッドが思いつけないことと、
中位メソッド average() として分離した場合、中身がreduceでもforでもどうでもよくなることだ。
これらは所詮数行の関数であり、どっちでも大差ない。
よって、数値計算をする場合にも reduce 自体はあっても現実的にはほとんど意味がない。
そこでしか使わない特殊な縮退を書くときに便利、という程度だ。
reduceを使ってる俺カッケー馬鹿の問題は、reduceを使う為に、
average()を呼ぶべき所をreduceを使ってaverageを取ったりしてしまうことだ。
結果、余計に読むコードが増え、重複したコードが分散してしまう。
これはコードを書く側の問題だが、実際、この問題の方が大きいと思う。 >>220
onsubmit で間に合わなければ mousedown か mouseover とかで >>213
> 結局、>>196も、『一時的に』配列として持たせてreduceしただけだろ。
> 最初からいきなり縮退させれば済むだけの話。
>
> reduceは『配列として意味がある』(≒配列として『持つしかない』)物を縮退させるメソッドであって、
> そもそもそのケースがJavaScriptの用途においてはほぼ無いんだよ。
君が遭遇したことがないだけの話だなw
「ボクが出会ったことないユースケースなんだから、みんなも遭遇したこと無いに決まってるんだ!」
経験不足だよ。
反例として、フィルターの種類、数、適用順を自由にユーザーに選ばせ画像に適用するクライアント側のコード書いたことあるがw ■ このスレッドは過去ログ倉庫に格納されています