[過去ログ] + JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
565: 547 2015/11/04(水)03:54 ID:pUq54Vxq(4/9) AAS
>>561-562
> 何故だ?cau4mx8d/3/とcau4mx8d/4/では速度差は出ないはずだが。(中身は同じだ)
空文字ならば length が 0 なので charAt を実行する必要はない
do-while なら必ず1回は実行してしまう

> もちろんその通りだが、バグを少なくするコツは「簡単にすること」だ。
だから、RegExp#exec(string) は簡単だろう?

> だから、単純に「どんな型が来るか分かりません」よりも「必ずstring型が来ます」の方がバグらない。
「どんな型でもString型に変換します」は実にシンプルな解だと思うが、何か問題があるのか?
正直、あなたの意見は抽象論が多すぎるので具体性にかけて説得力が弱いのだが

> ただここら辺は本職に確認した方がいい。
省9
566: 547 2015/11/04(水)03:57 ID:pUq54Vxq(5/9) AAS
>>562
> -1の比較回数を減らすのは実は余り効かない。それはループではないから。(関数で1回だから)
それならばループ処理ではない「よくある順」に拘る理由もなくなるはずだろう?
「よくある順」のレベルで拘る人は他にも拘るべきポイントがあると思ったのだが、「よくある順」だけ例外視する理由は何なのだ?

> これな、以前は確かにこの通りだったが結局最適化で何とかなったらしく、
スコープチェーンは ES 仕様の規定内なので最適化で何とかなるレベルではないのだが
速度差が小さくなる事はあっても差がなくなる事はあり得ないので無駄な対策ではない

> String()はイラネーみたいな記事もあって、
「String()はイラネー」は速度以前の問題だと思うが、なぜ「イラネー」なのだ?
567
(1): 2015/11/04(水)04:09 ID:??? AAS
> > だから、単純に「どんな型が来るか分かりません」よりも「必ずstring型が来ます」の方がバグらない。
> 「どんな型でもString型に変換します」は実にシンプルな解だと思うが、何か問題があるのか?

問題はある。一番重要な点「バグらない」が実現できてない。

どんな型でもString型に変換するというルール自体はシンプルだが、
String型に変換した結果、バグってしまったら意味は無い。

「バグらない」を実現するためには、型というより値が想定内でなければならない。
String型であっても、想定外の値であれば、バグってしまう。
だから想定内の値(に変換される型)だけの方がバグらない。
568
(1): 547 2015/11/04(水)04:20 ID:pUq54Vxq(6/9) AAS
>>567
何を持って想定外なのかわからんが、全て想定内だから問題ないのでは?
有体にいえば、getFirstLine1 の仕様を理解していないプログラマが悪い
569
(2): 2015/11/04(水)04:28 ID:??? AAS
>>568
俺は一般的な話をしている。

String型ではない話をしよう。

MyHoge型を扱うコードに、YourHage型を渡したらどうなるか?
エラーにする以外何もできることはない。
570
(1): 547 2015/11/04(水)04:33 ID:pUq54Vxq(7/9) AAS
>>569
俺も一般的な話をしている
あなたは静的型付き言語の仕様を期待しているのだろうが、ECMAScript では異なる型を与えられてもエラーにならないのが一般的だ
型変換では吸収仕切れない場合のみにTypeErrorとなる

/null/.test(null); // true
[].forEach(); // TypeError: undefined is not a function
571
(1): 2015/11/04(水)04:46 ID:??? AAS
>>570
だから、

「エラーにならない」のと「バグにならない」は意味が違う。

一番問題なのは、バグなのに、エラーにならずに
処理が進むことだ。
572
(1): 547 2015/11/04(水)04:52 ID:pUq54Vxq(8/9) AAS
>>571
バグとは想定外の挙動をする事だ
繰り返すが、想定内であれば問題はない
あなたが動的型変換の仕様を想定できていない事がおかしい
573
(1): 2015/11/04(水)04:55 ID:??? AAS
>>572
バグというのは言語仕様ではなくて、アプリの
要求仕様で決まった動き以外をすることだ。

アプリの要求仕様っていうのは、作るシステム毎に
ユーザーや開発者が決めることで
言語仕様で決まっているものは一つもありはしない。

お前の言ってる、挙動が言語仕様で決まってるものであれば
それは、全く関係ない話をしている。
574
(1): 547 2015/11/04(水)06:24 ID:fA0eMUeX(1) AAS
連続投稿規制に引っかかったのでID変わるけど

>>573
> アプリの要求仕様っていうのは、作るシステム毎にユーザーや開発者が決めることで
その通りだ
getFirstLine1 が String 型に変換するのは開発者である私が決めた「仕様」であって「バグ」ではない

> 言語仕様で決まっているものは一つもありはしない。
勿論、決まっているわけではないが、設計思想的な意味ではある程度の制限を受ける
動的型付き言語、プロトタイプベース言語、というような性質は ECMAScript で定められているもので変更できない
自分が書いたコードもその性質に合わせる事で統一感のある挙動を期待できるだろう
逆にESの性質に反する挙動にする場合は統一性を得る為に標準機能を書き換える手間が生まれ、どうにもならない性質の違いに頭を悩ませる事になる
省5
575
(1): 2015/11/04(水)06:37 ID:??? AAS
>>574
どうも根本的な所が間違ってる。

言語開発者じゃないんだよ。
言語ユーザーなんだよ。

言語をどうしたいとかじゃなくて
言語を使う側にとってどうあるべきかを考えよう。
576: 2015/11/04(水)07:11 ID:??? AAS
>>575
脇から見ていると本筋から逃げようとしているようにしか見えんぞ
バグと仕様の区別もつかんのか
577: 2015/11/04(水)07:30 ID:??? AAS
所詮口でギャーギャーいってるやつなんてそんなもん
578
(1): 2015/11/04(水)07:45 ID:??? AAS
>>555
WindowsならPowerShellの、schtasks で、
タスクをスケジュールに登録できる

Linuxなら、cron で登録できる

それと投稿する際は、名前欄に、542と入れておくれ
579
(3): 547 2015/11/04(水)09:11 ID:pUq54Vxq(9/9) AAS
結局、彼の反論は予測の範疇で新しい発見はなかった
アルゴリズムにはそれなりの理解があるが、仕様理解に乏しく、机上の空論をいっている部分も見受けられるのでもう彼にレスするのは止めようと思う

最後にこれまでのコードを計測してみたのだが、予想に反して while 文が最速だった
外部リンク:jsperf.com
懸念していた String#charAt のコストはたいした事がなかった
RegExp#exec は Google Chrome が健闘しているが、Firefox では最下位になり、やはり実装依存の傾向が強いようだ
(String#indexOf は実質的なコストは「String#indexOf x 2 + String#slice」なので判断に迷うところではあったのだが)
思い込みをせずに計測してみる事の重要さを再確認した
580: 2015/11/04(水)14:32 ID:??? AAS
なんでgetFirstLine2がそんなに高速化してるんだ
581: 2015/11/04(水)16:40 ID:??? AAS
ユーザーの入力を扱うとかいう場面では数十%のパフォーマンス差を気にすることはないだろう。
実際は例えばFileAPIからの入力なら文字列として受け取らずバッファとして受け取って、
asm.js記法で処理するのが一番効率が良い。
582
(1): 2015/11/04(水)16:40 ID:??? AAS
>>542
それってブラウザ操作を自動化したいって話?
ならiMacrosとかChrome Extensionとかでググってみればいい
JS単体じゃ難しいと思うよ
583: 2015/11/04(水)18:28 ID:??? AAS
結局、速度重視でなければ意味がないと彼が長々と説明していたindexOfは最遅でお呼びでなかったわけか
対応していた547にはご愁傷様としかいいようがない
584
(2): 2015/11/04(水)18:35 ID:??? AAS
Chormeだけえらい変な所で不具合が出るなと思って調査したら

function f1() {
//console.log(arguments == arguments);
console.log(f.arguments == f.arguments);
}
f1(); //-> false

function f2() {
console.log(arguments == arguments);
console.log(f.arguments == f.arguments);
}
省2
1-
あと 418 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.016s