X



JavaScript の質問用スレッド vol.123 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 73c8-oPzN)
垢版 |
2017/04/03(月) 00:31:25.68ID:82yaJsi70
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
※前スレ
JavaScript の質問用スレッド vol.122
http://echo.2ch.net/test/read.cgi/tech/1472426483/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0100デフォルトの名無しさん (ワッチョイ 0fc8-Ogwz)
垢版 |
2017/05/07(日) 14:55:04.57ID:nVVEnA7X0
つか、何度も言っているが、
俺が間違っているというのなら、お前らが説明してやれよ。
マジでお前らヤクザのやり方を地で行ってるぞ。

仕様書の該当部分は既に明示されているし、
そこにはそう書いてある(と俺には読める)
これ以上俺が出来ることはないんだよ。

お前らって、内容を読まずに批判する為の批判を繰り返すよね。
そして相手が悪いという事に無理矢理持っていこうとする。
これはゆとりに多いパターンだけど。
0101(アウアウイー Sa37-gZQE)
垢版 |
2017/05/07(日) 15:04:07.44ID:tachXp58a
イデオロギーと主張と日本語が読めないと言うのは互いに疎だろうから、ちょっとこうなると話が終わらなくなるな。

>>95
正当か正当でないかは主観だから言い換えるとして「正当かもしれない批判を全部人種差別にすり替える」を技を
>>95という批難のレスが自己言及を起こしてるから、根拠を足すか別の表現で説明して。
批判のための批判ではなくて、論理的に正しい批判が読みたいな、俺は。
0103デフォルトの名無しさん (ササクッテロレ Spf7-pKhs)
垢版 |
2017/05/07(日) 16:22:44.83ID:TbpBAUHmp
ヤクザ、ゆとり、韓国人、これらはすべて論理的な議論において無用なレッテル貼りでありこれまた詭弁の典型例である
発言者が馬鹿だと論旨の正否に関わらず批判を受けるという好例だわ
0104デフォルトの名無しさん (フリッテル MM4e-UAmY)
垢版 |
2017/05/07(日) 16:58:46.44ID:oXR95zrtM
>>80は真っ当なものだし、正しいと俺は思う
根拠(URL)も十分に出てるし、補足することは何もない

対して彼の返答は「そうとしか読めない」しかなく、具体的なところは何もない
信じてもらえなくて当然だと思う
0105デフォルトの名無しさん (フリッテル MM4e-UAmY)
垢版 |
2017/05/07(日) 17:24:34.96ID:oXR95zrtM
>>96
少なくとも彼は>>80>>87で自分の正当性を説明出来ているけどね
君はなぜか完全スルーの構えでそこに触れてないが
仕様は変わらないのだから、仕様の解釈を説明するしかないのに、それが出来ないのは君に説明能力がないとしか思えない

あと、君の発言は段々、暴論になってきているから気を付けた方がいい
人格否定や差別的発言は明らかに君が間違ってる(君の論にてらせば、君が悪い)
いっちゃ悪いが、自分の発言が認められなくてだだをこねている子供のようだ
0106デフォルトの名無しさん (ワッチョイ 0fc8-Ogwz)
垢版 |
2017/05/07(日) 19:09:24.78ID:nVVEnA7X0
というかこの手の「ゆとりスクラム」、最近割と良く遭遇するようになったが、何がしたいんだ?

俺に説明能力がないというのなら、俺に説明を求めること自体がおかしいし、
説明能力があるゆとり君が代わって説明すればいいだけ。
俺が文章を読めてないというのなら、俺にそれを文章で説明しろというのは無理な話。
俺を信じれないというのなら、ああそうですかでしかない。そもそもそういう話ではないし。

ゆとりって基本的に他人に文句は言うけど、自分で改善しようとは全くしないよね。
今の現実世界はそれまでの大人達が少しずつ改善を重ねてきた結果だというのに。

俺は2chしかほぼ見てないから
> 実際、某Q&Aサイトでも名前を何度も変えては同じような質問を繰り返して、
> 詳しい回答を貰うと「初心者なので分からないです」と返信する人がいるよ (>>76)
には遭遇したことがないけど、(というより遭遇しても気づくほど見てない)
この手の「無理矢理○○って事にしたい」ってのは最近すごく遭遇するんだが。
0109(アウアウイー Sa37-gZQE)
垢版 |
2017/05/07(日) 20:36:30.42ID:tachXp58a
>>106
破綻しとる。
自説を説明する能力がある人間でも、代わって「おまえの理論」の説明はできまい。
説明能力が無いなら説明を求めるのがおかしいって無茶苦茶じゃん。
説明能力がある奴に、説明を求めるのは無意味だろ。
だって説明能力があるならば、求めるより前に説明してるはずじゃん。
説明能力か無いからこそ、説明しろと要求されていると思えよ。
論理的にやろう。ゆとりも、非ゆとりもな。
0110デフォルトの名無しさん (ワッチョイ 7b8c-7zcB)
垢版 |
2017/05/07(日) 21:20:48.44ID:7pYr0TYR0
> 俺に説明能力がないというのなら、俺に説明を求めること自体がおかしいし、

書いてあんだろ?

「俺に説明能力がない」だ
説明が足りないじゃない。
説明する能力がないのだ。


感情を表現する能力がないやつに
感情を表現しろと言っても無理だろ?
計算する能力がないやつに計算しろと言っても無理だろ?
説明する能力がないやつに説明しろって言っても無理だろ?
0113(スフッ Sd52-gZQE)
垢版 |
2017/05/08(月) 06:06:52.81ID:FkyLZnezd
>>112
違う違う。
無能だからこそ、説明を求められるんだ、と。
能力が無いならば、最初から説明しようとすらするはずが無いんだよ。
全くできない事をしようとする事はあり得ないんだし。
空が飛べないのに空を飛んで見せるのが、全くできない事をするって言うことだよ。

相手の言葉をうまく摘んで「無い」の定義を適当に用意してはいかん。ただの逃避だよ。
それこそ自分が揶揄してるやつ。
吐いた唾は飲もう。
0115デフォルトの名無しさん (フリッテル MM4e-UAmY)
垢版 |
2017/05/08(月) 11:29:12.00ID:tZFlTACxM
自らの正当性を主張する人が自己完結していないわけがなので、ID:nVVEnA7X0も俺も自己完結している点では同じ
見解の相違で衝突した場合、お互いに根拠を出しながら意見を出すのが普通
相手の論理を崩すには「相手が出した根拠が間違っている証拠」をだしたり、「根拠の解釈が間違っている論理的矛盾」をだしたり、と論理的に話をする

ところが、ID:nVVEnA7X0 は「いや多分あの書き方だと(>>75)」「そうとしか取れない(>>88)」と恣意的な感想を述べるばかりで根拠も論理展開も何もなければ、相手の論理的矛盾に言及するわけでもない
根拠や意見を掲示するのは>>80だけ
説明出来ないというが、「そうとしか取れない」理由を具体化すれば説明可能なはず
具体的な何をすれば良いかは>>84で補足要求してくれているのに無反応
この状況で説明能力がないといわれるのは仕方がないし、何も反論出来ないのなら説明能力がないと認めているも同義だと思うがね
0120デフォルトの名無しさん (ワッチョイ c311-AQGr)
垢版 |
2017/05/11(木) 22:25:00.55ID:D3pDarkB0
window.fetchでshift-jisのデータをダウンロードしてresponse.text()で文字列にすると文字化けしてしまうのですがどのようにすれば文字化けしないようにできますか?
0122デフォルトの名無しさん (ワッチョイ c311-AQGr)
垢版 |
2017/05/12(金) 08:36:44.00ID:C/LqUOBj0
>>121
外部サーバーなので出来ないです(´;ω;`)
0124デフォルトの名無しさん (ワッチョイ cf75-yoyE)
垢版 |
2017/05/12(金) 09:40:01.01ID:lh1VWFPT0
2chも、shift-jisだから、JSで扱えない

でも、YQL(Yahoo Query Language)を通して取得したら、UTF-8になってる。
文字コードを推測して、変換しているのかね?

この板よりも、web制作管理板で質問した方がよいかも。
そっちの方が、人が多いから
0127124 (ワッチョイ cf75-yoyE)
垢版 |
2017/05/12(金) 10:15:34.52ID:lh1VWFPT0
iframe に読み込ませれば、ブラウザが自動変換するから、文字化けしないけど、
自分で、JSで、2chのHTMLを取得しようとすると、shift-jis のままじゃないの?

つまり、ブラウザを通せば、変換されるけど
0131デフォルトの名無しさん (ガックシ 067f-AQGr)
垢版 |
2017/05/12(金) 14:55:20.81ID:5Al+NPqt6
>>130
リクエスト時のヘッダーにコンテンツタイプを指定するってことですよね?やったんですが出来ませんでした。
0132デフォルトの名無しさん (ガックシ 067f-AQGr)
垢版 |
2017/05/12(金) 14:56:27.27ID:5Al+NPqt6
>>28
相手は2ちゃんのサーバーです
0133デフォルトの名無しさん (ガックシ 067f-AQGr)
垢版 |
2017/05/12(金) 15:00:29.58ID:5Al+NPqt6
fetchにはオーバーライドマイムヘッダーはないというとこですか?
文字コードを変換することは出来ませんか?
実行環境はelectronのrenderer processです
出来ればnode.js特有のモジュールを使わない方法がいいですが...
0134sage (ワッチョイ b3d1-Y6YN)
垢版 |
2017/05/12(金) 22:45:38.02ID:LHrmkeU40
setTimeoutとseIntervalって使い分けってどうやるんやるんですか?
なんか参考にするコード教えてください
0136デフォルトの名無しさん (ワッチョイ cf75-yoyE)
垢版 |
2017/05/13(土) 02:16:56.42ID:nrviLaTM0
>>132
2chは、文字コードを指定していないから、やっかい。
JSでは、UTF-8 と扱われて文字化けする

結局、jQueryから、YQL (Yahoo! Query Language)のサービスを使って、
2chのHTMLを取得できた。
YQLで、shift-jis からUTF-8へ、文字コードを自動変換しているのかな?

jQuery → YQL → 2ch

VBScriptについて必死に話し合うスレ
http://echo.2ch.net/test/read.cgi/tech/1416826139/924
0139デフォルトの名無しさん (ワッチョイ 433c-tBO/)
垢版 |
2017/05/13(土) 10:44:28.39ID:OFQbtHdZ0
HTMLのテキストボックスへ日本語を入力中に、
強制的に確定(Enterを押した場合と同じこと)
もしくは入力をキャンセルさせる(ESCを2回押したような処理)ことは可能ですか?
0142デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 20:35:36.55ID:BFgjnkHK0
カンマ演算子を積極的に使っているコードを知らないか?
この際、他言語でも構わない。

三項演算子を使って宣言的(という言い方が正しいかは微妙だが)に記述すると、
var somevalue = (caseA)? valueA : (caseB)? valueB : valueC;
という形になってくるのだけど、
この際単純な式だけでは無理な時があって、カンマ演算子を使いたくなってくる。

とはいえCの世界ではほぼ完全に禁止に近くて、推奨とか積極使用とかは聞いたことがない。
おそらく何らかの問題をはらんでいるからだと思う。
元々Cは手続き的だし、限界までチューニングするので、相性も悪い。

そこで、わりと好き勝手やっているJavaScriptの世界なら誰かしら使っているかもしれんし、
ソースも見えて助かるので、どこか積極使用しているところとか知らないか?
推測だが、他の「宣言型」と言われる言語も
本当に宣言的に記述するのなら大量使用しているはず。
ソースが公開されていて、何をやっているか分かり、
相手の技量も分かる状況なら他言語でも構わないのでよろしく。
さらっと調べてはみたんだが、
そもそも使ってない言語の検索では要領を得ず、いいのが出てこない。

Scala使っているやつ居たよな?そっちではどうとか、あればよろしく。
0143(スププ Sd9f-4rj3)
垢版 |
2017/05/13(土) 20:52:18.30ID:l2RlSRsKd
>>142
google closure compilerが割と積極的に,使ってくるよ。

問題と言えば、代入だったら実際に代入される値から遠いとか、そもそも分けて書けよとか、アトミックである保証がある場合とない場合があるとか、色々ある。
0144デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 21:35:25.83ID:BFgjnkHK0
つかClosureCompiler遣い居たのか。
それってコンパイル後のコードって読まないでしょ?
(なんで君が読んでいるのかは知らんが。
さすがにミニファイは読めないから信じるしかなくて、
通常ClosureCompilerもそれに近い扱いだと(勝手に)思っているが)

おそらく問題は「可読性」だけなんだと思っている。
だからコンパイラやトランスパイラが使うのは全く問題なくて、
逆に言えば、使うメリットがあるからコンパイラが使っているとも言える。

可読性の問題はおそらく「色々な書き方が出来ること」「読む方が不慣れなこと」に尽きる。
だから「コンマ演算子が多用されている『世界』」があれば、
彼等はなんとかしているのだとも思っている。だからそれを確認したい。
googleのコーディングルールでは、
C++もJavaScriptもカンマ演算子を明確には禁止にしていない。多分グレーゾーンだ。

> アトミックである保証がある場合とない場合があるとか
カンマ演算子でアトミックに出来るか?
というかいわゆるマルチスレッド環境で言う「アトミック」はJavaScriptにはないはずだが、
それ以前にシングルスレッドだからアトミックとか要らんわけだが。
0145デフォルトの名無しさん (ワッチョイ 9321-n/2N)
垢版 |
2017/05/13(土) 21:37:14.85ID:qMDptb/r0
カンマ演算子みたいな副作用前提のものを宣言型プログラミングで積極的に使うなんてことあるかぁ?
ただ一文になってるってだけじゃん
普通は関数化して処理部分は関数内に隠蔽するでしょ
0146デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 21:58:34.66ID:BFgjnkHK0
いやその関数を2回呼びたくない時にどうするかだよ。

副作用無しの関数なら、先に呼んでしまって一時変数化するというのが通常の解法。
でも最初の分枝、142の例で言うとcaseAに当たった場合にこれは不要なら、
関数呼ぶだけ無駄でしょ。

関数に副作用がある場合は一時変数化も出来なくて、
if文でしこしこ書くことになる。

とはいえ関数型の場合は副作用無しにして何度でも呼んでしまえ、が正義なのかもね。

なお俺が使おうとしている状況は、、、と詳細に説明しようとしたが、
JavaScriptの場合は型無しなので、 || と && 上手く使ったら
カンマ演算子無しで書けそうな気もしてきたorz
0148デフォルトの名無しさん (ワッチョイ cf75-yoyE)
垢版 |
2017/05/13(土) 22:23:27.64ID:nrviLaTM0
どの言語でもそうだけど、

コロンで区切れば、独立した文だから、安全

カンマでは、独立した文にならないから、
副作用・評価順序などを勘違いしやすく、バグが多くなる。
だから、カンマは使わない方がよい

短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
使わない方がよいと言われる
0151デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 22:35:17.69ID:BFgjnkHK0
>>147
あ、いや、やっぱ多分無理だ。こんな感じ。
(カンマ演算子は使ったこと無いから文法が怪しいが、多分これであってると思う)

var result = (sel==='ALL')? query_set(name, 'ALL') :
(var tgts = get_tgts(name), (tgts)? query_set(name, tgts) : obj[name]);

sel==='ALL'の時にはquery_setを呼び出す。
それ以外の時にはget_tgtsでリストを確認し、該当した場合はquery_setを呼び出す。
該当無しの場合は単にobjを名前で引く。

query_setは何度呼んでもいいが、
初めて呼ぶ場合には obj[name] に色々初期化した物を作成して登録する。
登録されている物はobj[name]で確認出来るし、
2回目以降(既にobj[name]が存在した場合)にはobj[name]が返される。
だから上記は、
sel==='ALL'の時は常にobj[name]を引き、無ければ登録してそれを返す、
それ以外の場合は、新規登録リストget_tgtsにあれば新規登録してそれを返す、
なければ既に登録されていればそれを返す、となる。
ここで get_tgtsは何度呼んでもいいから上記は

var result = (sel==='ALL')? query_set(name, 'ALL') :
(get_tgts(name))? query_set(name, get_tgts(name)) : obj[name];

とすることも可能だが、 get_tgts(name)は重くなる可能性があるので
必要な時にのみ一度引くようにしたい。
逆に obj[name]は1回引いて終わりだし、こちらも何度引いてもいいので、

var result = (sel==='ALL')? query_set(name, 'ALL') :
(obj[name])? obj[name] : (var tgts = get_tgts(name), (tgts)? query_set(name, tgts) : null);

とも出来る。
0152デフォルトの名無しさん (ワッチョイ cf75-yoyE)
垢版 |
2017/05/13(土) 22:35:19.85ID:nrviLaTM0
これだと、fが1回呼ばれるのか、2回か、どちらか分からない
1 < f() && f() < 10

こう書けば、1回しか呼ばれない
a = f();
1 < a && a < 10

Pythonでは、こう書けるから、1回しか呼ばれない
1 < f() < 10

fがオブジェクト・関数などの場合、どういう副作用があるか分からない。
何かのリソースにアクセスして、その電荷を変えてしまうかもしれない

volatile というけど、読み取っただけでも、電荷が逆転するデバイスがあるから、
2回読み取ったら、正常に動かないとか
0153デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 22:35:56.65ID:BFgjnkHK0
諦めてif文でしこしこ書いてもいいのだが、tgtsなんて結局ここでしか使ってないし、
欲しいのはresultだけだから var result = の書き方で出来た方が見やすい。

ただ、関数型ならここをそのまま切り出して、

function somefunc(name){
ここはif文でしこしこ
return result;
}

で上位からは

var result = somefunc(name);

で隠蔽してよしとするのかな?
多分ここが噛み合ってないのだと思う。
0154(スププ Sd9f-4rj3)
垢版 |
2017/05/13(土) 22:38:11.42ID:l2RlSRsKd
>>144
いや、カンマ演算子全体に対して言ったんだよ。
読む側が不慣れとかじゃなくて、どれくらいのメリットあるの?
メリットがあってもデメリットを下回れば、そりゃ無駄なんだし。
0155デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 22:50:19.81ID:BFgjnkHK0
>>154
ちょっと輻輳気味だが、

>>151内、
1. get_tgts(name)はユーザー作成リストを参照するので際限なく重くなる可能性があり、
可能であれば出来るだけ引きたくない。
2. ちなみに今はこの手の「重くなるかもしれないユーザー作成リスト」についてはキャッシュを作成し、
それを引いているから実は重くないのだが、キャッシュの管理が面倒なのも事実。
3. だから「重いけど我慢出来る範囲」ならキャッシュ無しで組むのもありか?とも思ったり。
その時に出来るだけ無駄のない動作をする為の記述が必要であり、それが今回。

つっても同様のケースは以前からあり、
カンマ演算子を三項演算子内で使用することについては、考えてはいたんだが。

実際、result を得る為だけに使う tgts とかは result = 式内に閉じこめた方が見やすいでしょ。
そして記述通りに動くのならそれが最速の記述ではあるし。
見やすくて速いんだからやらない理由はない。
ただしカンマ演算子については積極的に使っているのを見たことがないから、
多分何かしらかなり問題があって、、、だろうからそれを先に確認したくてね。
0157デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 23:06:40.11ID:BFgjnkHK0
>>148
> 短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
> 使わない方がよいと言われる
いやそれはCの世界では嘘だ。あっちは短絡評価ありきで組む。
そして俺はもちろんJavaScriptもそうしているし、
逆にwhile文とかは短絡評価無しだと組みにくいでしょ。
典型的パターンは以下。

var i = start;
while (i<arr.length && arr[i].prop!=xxx) i++;

関数型?で無理矢理組めば、

var i = arr.slice(start).findIndex(function(v){return v.prop==xxx;})+start;

なのか?しかし無駄が多いし余計に見にくいだろ。
0158デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 23:17:11.98ID:BFgjnkHK0
>>156
それが
> 普通は関数化して処理部分は関数内に隠蔽するでしょ (>>145)
なのか?

その書き方ではカンマ演算子を使わなくて済んでいる。
引数を一時変数に使うことにより回避している。
これは事実だが、余計に見にくくないか?(多分if文使って書いた方がマシ)
また、それって一般的か?俺はあんまり見ないが。

(もっとも、俺は配信されているもの、
つまりコンパイル後のコードしか見てないから、ES3準拠?とかの可能性はあり、
コンパイル以前のコードについては知らないんだが)
0159デフォルトの名無しさん (ワッチョイ 9321-e8oa)
垢版 |
2017/05/13(土) 23:23:24.73ID:qMDptb/r0
「配列arrの中の、start番目以降の要素の中で、prop==xxxに当てはまる最初の要素のインデックス」を
求めるならこんな感じにそのまま書けばいいのよ
var i = arr.findIndex((v, idx) idx>=start && v.prop==xxx);
0161デフォルトの名無しさん (ワッチョイ 838c-O3YC)
垢版 |
2017/05/13(土) 23:36:49.07ID:f5G7qLua0
>>157

var i = arr.slice(start).findIndex(function(v){return v.prop==xxx;})+start;

最近の書き方だとこうだろ?
var i = arr.slice(start).findIndex(v => v.prop == xxx)+start;

んで、lodash使えばこうなる。
var i = _.findIndex(arr, {prop: xxx}, start);
0162デフォルトの名無しさん (ワッチョイ 838c-O3YC)
垢版 |
2017/05/13(土) 23:38:27.63ID:f5G7qLua0
>>157 >>160

> なのか?しかし無駄が多いし余計に見にくいだろ。
> (俺はあの書き方はそもそもしないから慣れてない)


コードの話をしようぜ?

俺は見にくいというのは、コードの話じゃなくて
お前の話になってる。

お前が見にくいっていうのなら、単にお前が未熟ってだけ。
コードの話をしている時に、人の話をしてはいけない
0164デフォルトの名無しさん (アウアウウー Sa87-aLXf)
垢版 |
2017/05/13(土) 23:46:38.05ID:Iih4R+8da
カンマ演算子の使いどころは、一つのStatementしか記述を許されてない箇所にある
(while文の条件式、アロー関数の省略記法、三項演算子など)
省略記法が大好きな人ほど好む傾向があるかも知れない
0165デフォルトの名無しさん (ワッチョイ 9321-n/2N)
垢版 |
2017/05/13(土) 23:48:01.73ID:qMDptb/r0
>>158
いやまぁもちろんこんな無名関数をそのまま書いたりしないけどね
上と抽象度違っちゃってるし、いつもはちゃんと名付けするよ(面倒だから手抜きしましたごめんなさい)
「一般的か?」って言われたら、JavaScriptでは一般的ではないでしょう
だいたいみんなif文使うし、宣言型なんて見ない見ない
ただまぁこうやって引数にしちゃえばキャッシュ出来るよという参考までに
あとは自分で選べばいいさ
0166デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 23:49:06.10ID:BFgjnkHK0
>>161
sliceした方がいいかどうかは場合によるのだけど、
一般的にはsliceせずに回す>>159だと思うぞ。

それはおいといて、そもそも findIndexに開始地点を指示出来ないのが謎なんだが。
だからlodashが必要になるわけで。
とはいえlodashは普及しないよ。
確かに短く書けるけど直感的ではないし、わざわざ学ぶほどの価値もない。

とにかくその件については俺はwhileの一択だ。
速いし分かりやすいし。
君がそう思わないのも君の自由。
ただいずれにしても、おれはカンマ演算子について聞きたいのであって、
157以降は俺の興味以外だから降りるよ。
0167デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/13(土) 23:55:22.89ID:BFgjnkHK0
>>165
> JavaScriptでは一般的ではないでしょう
ちなみにこれを他言語では一般的にやってるのか?それは何言語?
別に糾弾しようってわけではなくて、ちょっと見てみたい。

ちなみに抽象度については俺も思ったが、それ以前に、
1つのことをやる物を2つに分解して配置したくないので、
俺は「名前付き関数」にして呼ぶって事もしない。if文で書く。
ただしこれはCでは関数内関数が使えないからそういう文化なのであって、
関数内関数が使える言語なら別文化もありだとは思う。
0168デフォルトの名無しさん (ワッチョイ 9321-e8oa)
垢版 |
2017/05/13(土) 23:56:04.26ID:qMDptb/r0
>>157
もちろん、それでいいと思うよ
そこら辺考えだすとそうするしかない
折衷案としてはこんな感じでwhileの部分を関数化する感じかな

var searchPropIdx = function(arr, tgt, start){
var j=0, len=arr.length;
while (j<len && arr[j].prop!=tgt) j++;
return j;
};
var i = searchPropIdx(arr,xxx,start);

これでも何してるかは関数名が教えてくれるから宣言的といえるのではないでしょうか
0170デフォルトの名無しさん (ワッチョイ 838c-O3YC)
垢版 |
2017/05/13(土) 23:59:09.17ID:f5G7qLua0
>>168
自分で関数作るぐらいならlodashの方がいいな。
いきなりsearchPropIdxとか書かれても
コード読まないと何をしているのかわからない。

lodashのような有名ライブラリであれば
有名なライブラリを知っているならば使い方わかるし
たとえ知らなくても、誰かが解説してくれてれる
0172デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/14(日) 00:09:32.47ID:Rp58SwPv0
>>168
まあ、俺も必要な場合はそのように関数化してくくり出すけどね。

メリットは抽象度が上げられて依存関係を切れる(隠蔽出来る)ことだが、
ここら辺は要するにオブジェクト指向のメリットであり、
そもそもオブジェクト指向は巨大なコードを何とかする手法だから、
ここでlodashを布教している奴が理解することはないというのは、
これまでさんざん見てきたとおり。

俺はlodashが使える環境でも使わないね。whileで書く。
ただここら辺は各人が好きなようにすればいいだけの話だね。
0174デフォルトの名無しさん (ワッチョイ 9321-n/2N)
垢版 |
2017/05/14(日) 00:45:18.37ID:zJfJO46R0
>>167
「値は引数を関数に適用させて作るもの」ってのはラムダ計算の基本的な考え方だから、大抵の関数型言語ならそうじゃない?
そもそも例えばHaskellなんかは今回でいうget_tagを同一スコープ内で何回実行したところで、
引数が同じなら計算結果は最初のものを常に使い回すしね

別に好きに書けばいいんだよ
ただ最初に宣言的って言ってたのが何か勘違いしてそうで引っかかっただけで
0175デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/14(日) 01:10:19.27ID:Rp58SwPv0
>>174
> ただ最初に宣言的って言ってたのが何か勘違いしてそうで引っかかっただけで
これについてはそちらの指摘通り、俺は勘違いしていると思う。
俺は関数型言語を使ってはいないからね。
これは、俺の用語に誤用がある可能性を考慮しつつ話をしてもらうしかない。

> そもそも例えばHaskellなんかは今回でいうget_tagを同一スコープ内で何回実行したところで、
> 引数が同じなら計算結果は最初のものを常に使い回すしね
Haskellってインミュータブルだったっけ?忘れたけど、
確かにインミュータブルだったらこれで終わりだね。
つべこべ言わずに何回も書いても関係ない事になる。
しかもHaskellの場合は遅延評価だから事前に書いても大してオーバーヘッドもない。
まあこの辺が便利なのかもね。

> 大抵の関数型言語ならそうじゃない?
そうか。了解した。
0177デフォルトの名無しさん (ワッチョイ cf75-yoyE)
垢版 |
2017/05/14(日) 02:45:59.49ID:wDkNkjbA0
>>157
>> 短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
>> 使わない方がよいと言われる
> いやそれはCの世界では嘘だ。あっちは短絡評価ありきで組む

後ろの式に、副作用がある場合、バグ含みになるから、危険。
それで、Pythonでは、以下のように書けるようになってる
1 < f() < 10

MISRA-C 2004 のコーディング規則を参照
0179デフォルトの名無しさん (ワッチョイ cf75-yoyE)
垢版 |
2017/05/14(日) 07:47:04.55ID:wDkNkjbA0
<tr>
<td><%= name %></td>
<td><%= gender %></td>
<td><%= job %></td>
</tr>

lodash.js (underscore.js)には、template があるから、
jQueryですべての要素を作らなくても、HTMLファイルに値を埋め込むだけでよい
0180デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/14(日) 08:05:39.42ID:Rp58SwPv0
>>177
つかMISRAを持ち出すのなら番号まで指定してくれ。
あれは膨大な数があるんだから。
つっても、見てもそうだとしか書いてないとは思うが。

> 1 < f() < 10
Pythonがそう書けるのはいいとは思うが、そもそもCプログラマで
> 1 < f() && f() < 10
をやる奴はいないんだよ。これは常識だから。
次に、関数型が「参照透過(キリッ」とかやっているのも
Cだと最初からほぼ参照透過なんだよ。
クロージャはないし、グローバルもほぼ使わないんだから。
(通常はポインタを与えないと非参照透過にならない。
ポインタについては明示的に見えるから、
クロージャのある言語のように「参照透過」を気にする必要がない)
だからそこら辺の文化は明らかに違う。

実際、whileループなんて短絡評価ありきでないと組めないし、
俺が出した例なんてマジで頻出だぞ。

で、それを「俺は配列の長さなんて管理したくない。
該当するインデックスが欲しいだけだ」と言うのなら、
コード例も既に出したように、それが明示的には見えないコードにすればいいだけだろ。
ただ俺はあれで効率が上がるとは思えないがね。

根本的に違うのは、
while (i<arr.length && arr[i].prop != xxx) i++;
はCに於いてはarrに対して副作用を持ち得ないんだよ。(通常はvolatileでないから)
ところがJavaScriptではゲッタやプロキシがあるし常用されるから、これだけでは言い切れない。
だからそもそも「副作用」に対する感覚が全然違うんだよ。
0182デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/14(日) 09:13:34.23ID:Rp58SwPv0
>>181
それは

× 短絡評価が駄目
○ 短絡評価内で副作用が駄目

だよ。重ねていうが、以下認識は間違いだ。

> 短絡評価も、後ろの式が実行されるかどうか、分かりにくいので、
> 使わない方がよいと言われる (>>148)

結局の所、12.4も「短絡評価されるから」という大前提でしょ。
Cの世界はそうだよ。
短絡評価自体が駄目なんてのは、聞いたことがない。
0183デフォルトの名無しさん (ワッチョイ 43c8-SU9n)
垢版 |
2017/05/14(日) 11:13:06.81ID:Rp58SwPv0
というか今更気づいたが、カンマ演算子ってほとんどの言語ではないんだな。
むしろある方が異端のようだ。

ある:C/C++, JavaScript, Perl
ない:Java(ただしfor文内のみ可), C#, Ruby, てか多分他全部

JavaScriptの場合は匿名関数をその場で定義して使っても構わないから、
文が書けないからカンマ演算子という時は大抵この方法でも回避出来る。
といっても余計に見にくくなるが。
例: (function(){ /*何かの動作*/ })()
0188デフォルトの名無しさん (アウアウカー Sa67-n/2N)
垢版 |
2017/05/14(日) 13:27:08.87ID:pHcsRThma
そもそも関数型風のメリットは論理と計算の分離であって、どっちがいいとかじゃないし
三項演算子を使ってcaseAの場合aが返ってくるなら、そうでない場合は同等の型のbが返ってくるのが基本
三項演算子をネストさせるってことはそもそも論理と計算が分離されてない
それを気にしないなら別に好きにすればいいんだよ
見やすい見にくいみたいな主観に任せればいい
0190デフォルトの名無しさん (ワッチョイ 2370-NgNF)
垢版 |
2017/05/14(日) 20:32:09.27ID:QAEk2mhn0
全部プロトタイプベースで書けばいいと言うのと同じくらい無意味な綺麗事
つうかconstは長いし普通の人にとっては読みにくい
意地っ張りの価値観の押しつけをする気が無いのなら
手元では好きに書いていいが挙げるときは置換くらいしてくれ
それが最低限のマナー
0200デフォルトの名無しさん (ワッチョイ 2370-NgNF)
垢版 |
2017/05/15(月) 18:12:27.51ID:5bRXjaUX0
>>198
いやいや、フルconstの自由があるならAltJSくらい余裕でしょ
つうかconstの実際価値があるっていうのじゃなくて
単にconst、constって書いて自己満足、安心「感」を得たいだけになってるでしょ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況