[過去ログ]
+ JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net (1002レス)
+ JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net http://peace.5ch.net/test/read.cgi/hp/1444186237/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
533: Name_Not_Found [sage] 2015/11/03(火) 16:10:07.51 ID:??? >>532 >>511-513 http://peace.5ch.net/test/read.cgi/hp/1444186237/533
534: Name_Not_Found [sage] 2015/11/03(火) 16:24:38.04 ID:??? スマートの基準が人それぞれだから回答者同士でいがみあっても仕方ない パフォーマンス基準、コードの短さ基準、いろいろ基準がある 最も、正規表現を使うなら /^[^\r\n]*/.exec(string) で十分だと思うが http://peace.5ch.net/test/read.cgi/hp/1444186237/534
535: Name_Not_Found [sage] 2015/11/03(火) 16:36:56.17 ID:??? ロジック上の無駄は省くべきだが、コードが短ければ良いというものでもないよな http://peace.5ch.net/test/read.cgi/hp/1444186237/535
536: Name_Not_Found [sage] 2015/11/03(火) 16:44:28.40 ID:??? どっちにしろ var foo = new Hoge(text); var line = foo.getLine(); while (line !== null) { なんか; line = foo.getLine(); } とか foo.bar(function (line) { なんか; }); のような感じで使えるようにしておくかな俺なら http://peace.5ch.net/test/read.cgi/hp/1444186237/536
537: Name_Not_Found [sage] 2015/11/03(火) 16:48:35.24 ID:??? どちらかというと俺は>>530の関数で第一引数がString型でない時に例外が発生する仕様が気になる >>531も同様の問題を抱えているが、>>534のように書けば修正されるな http://peace.5ch.net/test/read.cgi/hp/1444186237/537
538: Name_Not_Found [sage] 2015/11/03(火) 17:59:55.41 ID:??? >>537 配列を引数にとると例外すら発生しなかったので修正した http://jsfiddle.net/cau4mx8d/1/ http://peace.5ch.net/test/read.cgi/hp/1444186237/538
539: Name_Not_Found [sage] 2015/11/03(火) 19:31:10.08 ID:??? お前らの話を見ている限り、お前らは絶対的にコードを書き足りていない。 書けば上手くなるものではないけど、書かなければ上手くなることはない。 だから、今のお前らはもっとコードを書かないと駄目だ。 >>530,538 君はコードを書いた。それはいいことだと思うし、君はそれによって前進したいようだ。 ならばちょっと手助けしてみようと思う。 getFirstLine1では、Math.minを使ってはいけない。そして処理の順番が逆だ。 多分君には意味が分からないと思うが、逆に、この順番にした理由、Math.minを使った理由もないだろ? だったら何故駄目なのか考えてみることだ。 getFirstLine2では、前置にこだわりが見られるが、ここら辺は流儀にもよる。 個人的には後置にするところだが、まあこのコードはありだろう。 こだわりを持つこと自体は悪いことではない。 http://peace.5ch.net/test/read.cgi/hp/1444186237/539
540: Name_Not_Found [sage] 2015/11/03(火) 20:11:01.96 ID:??? >>539がコード書きまくった熟練のコードを見せてくれるそうです http://peace.5ch.net/test/read.cgi/hp/1444186237/540
541: Name_Not_Found [sage] 2015/11/03(火) 20:16:13.06 ID:??? 足りてないのはコードを書くのではなく、読む量が全然足りてない。 新人のコードをレビューすると全然他者のコードを読んできていないのがわかる。 俺の下に付いた人には、先人の美しいコードをどんどん読ませることにしている。 すぐに生産性が上がりバグの作り込みが減る。 http://peace.5ch.net/test/read.cgi/hp/1444186237/541
542: Name_Not_Found [sage] 2015/11/03(火) 20:33:02.83 ID:??? 質問させてください。 特定時間にページ更新、カートをクリック この機能だけ使えるスクリプトを作りたいのですが、どれから始めていいか分かりません。 お勧めの書籍がありましたら教えてください。 よろしくお願いします。 http://peace.5ch.net/test/read.cgi/hp/1444186237/542
543: Name_Not_Found [sage] 2015/11/03(火) 20:40:11.46 ID:??? >>542 >どれから始めていいか まずはあなたのレベルを申告することから でないとどこから始めるべきか他人にわかるわけがない http://peace.5ch.net/test/read.cgi/hp/1444186237/543
544: Name_Not_Found [sage] 2015/11/03(火) 20:53:09.65 ID:??? jsなんてゴミから入ったら悪い癖がつくだけだ やめとけ http://peace.5ch.net/test/read.cgi/hp/1444186237/544
545: Name_Not_Found [sage] 2015/11/03(火) 20:53:49.90 ID:??? 完全な素人です >>544 ほかどんなものがお勧めでしょうか? http://peace.5ch.net/test/read.cgi/hp/1444186237/545
546: Name_Not_Found [sage] 2015/11/03(火) 21:21:54.76 ID:??? >>541 コードを読ませること自体はいいことだし、その教育方針も妥当だと思うが、 既に読んでいることを新人に期待するのは無理がある。それがないから新人なのだから。 とはいえ、JavaScript界隈はコードを読んでいる方だと思うぞ。 お前らも結局読んで返事をしているみたいだし、他の連中もそんな感じだ。 これは一つにはJavaScriptの構造上、基本的にコードは晒されるというのがあって、 読めるという前提で文化が醸成されているからだと思う。 これは他言語にはない特徴であり、JavaScript界隈が活発な一つの要因だと思う。 他言語の場合は、読みたくても読めないことが大半だからね。 http://peace.5ch.net/test/read.cgi/hp/1444186237/546
547: Name_Not_Found [sage] 2015/11/03(火) 21:38:56.03 ID:??? >>539 書いた http://jsfiddle.net/cau4mx8d/3/ Math.minは確かに迷った結果のコードだが、ダメとする絶対的な理由が足りない (他が比較演算子を使用するので統一感はないとは思うが) 処理順に関しては値の切り分けによって後述処理を都合よく処理する為だ falsy, truly な例外処理を先にするかは状況によるし、ポリシー次第だと思う (構造化プログラミング的にはこの手法はダメだが、出口を一つにするメリットがなかったので採用しなかった) そこまで否定される理由はないと思ったが、あなたはどのような理由でダメだと思った? >>541 では、美しいコードを見せてくれ http://peace.5ch.net/test/read.cgi/hp/1444186237/547
548: Name_Not_Found [sage] 2015/11/03(火) 23:40:45.08 ID:??? >>547 おー書いたか。ご苦労様。ならばその労に報いよう。 はじめに俺はJavaScriptが専門ではないと断っておく。しかしここら辺はプログラミングで共通だからね。 一般的に、JavaScriptではコード自体のフットプリントが問題になることはまずない。 したがって、実用的には A. 見やすいコード B. 速いコード のどちらかを採用することになる。逆にいえば、これ以外のコードは要らない。 ただしJavaScript特有として「イレギュラーに対する対処」を考慮する必要がある。(後述) ここではコードの量に異常にこだわる奴が散見されるが、見やすいコードというのは 「後で見た時に誤解がないコード」であり、タイピングが少ないことではない。 見やすい=後でメンテナンスしやすいであり、後でメンテナンスする気がないのなら見やすさなんて不要だからだ。 (お前らはコードのメンテナンスの経験が不十分だから、何が見やすいのか定義できていないように感じる) JavaScriptにおいて正規表現は標準だから、AについてはgetFirstLine3で決まりだろう。 正規表現の内容も、こう書くしかないというレベルのシンプルさだ。誤解しようがない。 となると残りはB(速度)を目指すコードしか要らない。(こんな実装も出来る俺カッケーなコードは死ねでいい) http://peace.5ch.net/test/read.cgi/hp/1444186237/548
549: Name_Not_Found [sage] 2015/11/03(火) 23:41:16.88 ID:??? getFirstLine2はcharAtを使うのならこの実装で妥当だろう。 イレギュラー対策をdo/whileにしてstring.chaAtで引っかけるというのは若干トリッキーではあるが、 これが許可されるのならこれでいい。(少なくとも速度オーバーヘッドはない) ただしJavaScriptだと一般的にはgetFirstLine1の方が速いはずなので、これが使われることはないだろう。 (C言語ならgetFirstLine2が最速) さてgetFirstLine1だが、先述の通り、ここはB(速度)を目指さないといけない。(存在価値がない) 記述にもこの意識は見られ、Stringオブジェクト変換を減らしている。この辺はいい。 そこで処理順なのだが、速度を目指すのだから、よくある順にショートカットにして組むことが必要になる。 つまり、-1 && -1 の「例外」を最初に見るのではなく、 20,21とかの「通常」のケースを最初に処理しないといけない。 ただし、 > ポリシー次第だと思う これはその通りで、「最初に例外処理を行うというルール」であれば、 最初に -1 && -1 を記述しなければならず、旧コードが妥当なものになる。 ただこのケースは余りないように思う。(後述) Math.minについては、比較演算子よりも遅く、今回は採用する理由がない。 速度を目指すコードである以上、可読性が極端に落ちない限りは速い記述を採用するべき。比較演算子は十分に分かりやすい。 この場合はindexOfの戻り値である以上、型はnumberで確定しているのだから、比較演算子で何も問題ない。 (そちらの指摘通り、「比較演算子」と「メソッド」のどちらかに統一しろというルールもあると思うが、 俺は見た目ではなく実用性を考えているので上記の理由になる。 多分そちらの「構造化プログラミング」ってのはreturnを1個にしろという話だろうけど、そういうのは俺は気にしていない。 あくまで実用性重視であり、見た目が欲しければ最初からA(getFirstLine3)を使って終わらせる。 わざわざgetFirstLine1を使うのは速度が欲しい時だけであり、中速で中途半端に整ったコードには実用性がない。) http://peace.5ch.net/test/read.cgi/hp/1444186237/549
550: Name_Not_Found [sage] 2015/11/03(火) 23:41:52.38 ID:??? さてイレギュラー対策だが、多分(ここら辺は本職から聞くべきだが) α. 安全重視、全箇所でチェック。 β 速度重視、最初にチェック、以降は「型」までは確定、値については保証無し。 のどちらかで組むのだと思われる。 ポリシーαで、どういう状態でも安全性を明示するために「最初に例外処理」のルールなら旧コードが妥当になるが、 実用的にこれはないように思われる。 普通の仕様としては、「イレギュラーなら例外、それ以外は正しく処理」であり、関数内の記述順まで規定される必要はない。 記述順を規定する=ソースコードを見てデバッグするということだが、その場合は普通は「例外を投げずに自分で処理しろ」となるからだ。 またJavaScriptの場合はgetFirstLine3のように「暗黙的なイレギュラー対策」が出来ることも多く、(確認していないが) 「明示的なイレギュラー対策を最初に行え」というルールだと色々無理が生じてしまう。 だから、お行儀がいいとは言えないが、 現実的にはgetFirstLine2のようなトリッキーなイレギュラー対策もありってことになっている場合が多いのではないかと推測される。 (ソースコードに明示的に書いてあるかどうかではなく、実際に動くかどうかが仕様) ただ、それ以前に、「どんな型でもちゃんと処理しろ」というのはやはり負担が大きく、どこかしらでバグるだろうから、 普通はポリシーβで、getFirstLineが呼ばれる時はstringが渡されるところまでは確定していると思う。 この場合は「正しく処理しろ」という仕様だろうから、-1 && -1 の処理は後回しでいい。(最初に書くことを強制されない) 俺の場合はポリシーβで、基本的に最初は全部Aで書いて、問題がある場合のみBに差し替えるという方法を採っている。 したがって中速コードは不要で、各関数に於ける例外処理も基本的に無しだ。だからこんな感じになる。 他のポリシーと記述スタイルなら他の考え方もありうるとは思うが、 上記のように現実的にはαは効率が悪くて無理だと思うし、 速度についてもソースから直接予想できるケースばかりでもないので、 結果的に本職も俺と同様のポリシーになっているのではないかとは思っている。 http://peace.5ch.net/test/read.cgi/hp/1444186237/550
551: Name_Not_Found [sage] 2015/11/03(火) 23:45:31.01 ID:??? まあ漏れらベテランは、nullが返されて、 nullオブジェクトで関数を呼んだら、 そんな関数はありませんという実行時エラーを、 無数に経験しているからな。 用心深くもなるわな >>542 Firefoxで、Selenium IDEで、 ボタンをクリックしたり、 ページをリロードしたり試してみれば? JavaScriptもプログラミング素人には難しいよ http://peace.5ch.net/test/read.cgi/hp/1444186237/551
552: Name_Not_Found [sage] 2015/11/03(火) 23:46:59.02 ID:??? gdgdはいいからはよコード書けよ http://peace.5ch.net/test/read.cgi/hp/1444186237/552
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 450 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s