私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript & jQuery 質問用スレッド vol.5 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
手続き型プログラミングとしてはこれ以上は減らしようがない気がする
関数型プログラミングに変えれば、多少は変わるけど、所詮はコーディングスタイルの違いで明確な優劣はない
for文はforEachよりも速く、forEachは関数スコープで区切ることが出来るぐらいか
for文でもlet文を使えばスコープを区切ることが可能だけど
関数型プログラミングに変えれば、多少は変わるけど、所詮はコーディングスタイルの違いで明確な優劣はない
for文はforEachよりも速く、forEachは関数スコープで区切ることが出来るぐらいか
for文でもlet文を使えばスコープを区切ることが可能だけど
>>800
> ライブラリがあれば短くかけるのは当然としてライブラリを使わないから冗長で無駄ってのは子のスレでしか聞かないなー
元のレスにjQuery使ってって書いてあるのに、使わないで冗長に書くっていうのは
目的を果たしていない上に無駄でしか無いなw
> ライブラリがあれば短くかけるのは当然としてライブラリを使わないから冗長で無駄ってのは子のスレでしか聞かないなー
元のレスにjQuery使ってって書いてあるのに、使わないで冗長に書くっていうのは
目的を果たしていない上に無駄でしか無いなw
汎用性を求めるとrows,cellsを使うことになるよね
特に複合型はindexで参照できないといろいろ面倒
特に複合型はindexで参照できないといろいろ面倒
とりあえず中間のつもりだけど、これ以上やっても
あまり良くならないのでこれで最後にするかも。
http://jsfiddle.net/eoxzjqwu/14/
for文の中で無意味にやっていた変数の宣言の排除
多すぎて分かりづらい変数の削除
処理の改善(++k して --k するのにはワロタw)
jQuery化
jQueryのremove()への置き換えと不要になったremove()の削除
即時関数なくしてインデントを下げる
79行 => 56行(不自然な行減らしはしてないつもり)
などを行った。
あまり良くならないのでこれで最後にするかも。
http://jsfiddle.net/eoxzjqwu/14/
for文の中で無意味にやっていた変数の宣言の排除
多すぎて分かりづらい変数の削除
処理の改善(++k して --k するのにはワロタw)
jQuery化
jQueryのremove()への置き換えと不要になったremove()の削除
即時関数なくしてインデントを下げる
79行 => 56行(不自然な行減らしはしてないつもり)
などを行った。
あと ++v から v++ に変更(笑)
C++を知らんのか?
普通は変数の後ろに++やで?
C++を知らんのか?
普通は変数の後ろに++やで?
一応、案だけ書いておくか。
colSpanの設定は、attr('colspan', function() {・・・}) あたりを使えば
1~2行減らせるんじゃないかと思ってる。rowSpanも同じく。
そしてrowSpanの方は、インデックス(i, j)を使ってforでぐるぐる回すんじゃなくて
セレクタtd:nth-childを使って縦のcellを取ってくれば、
colspanとほぼ同じコードで良くなって、3行程減らせるんじゃないかと思ってる。
もしこれによってcolspanとrowspanのコードを共通化できれば半分になるから
40行程度まで減らせるかもしれない。
colSpanの設定は、attr('colspan', function() {・・・}) あたりを使えば
1~2行減らせるんじゃないかと思ってる。rowSpanも同じく。
そしてrowSpanの方は、インデックス(i, j)を使ってforでぐるぐる回すんじゃなくて
セレクタtd:nth-childを使って縦のcellを取ってくれば、
colspanとほぼ同じコードで良くなって、3行程減らせるんじゃないかと思ってる。
もしこれによってcolspanとrowspanのコードを共通化できれば半分になるから
40行程度まで減らせるかもしれない。
やばいw 理屈の上ではcolspanとrowspanのコードは同じでいいはずだよなぁ
ぐらいの感覚で>>808書いて、なんも考えずにコピペして適当に置き換えたら動いたw
これ本当に共通化できるよ。
http://jsfiddle.net/eoxzjqwu/16/
ぐらいの感覚で>>808書いて、なんも考えずにコピペして適当に置き換えたら動いたw
これ本当に共通化できるよ。
http://jsfiddle.net/eoxzjqwu/16/
ここまでかな。
http://jsfiddle.net/eoxzjqwu/22/
attrを使う案はうまく行かなかった。
あとせっかく減らしたインデントが共通関数のために深くなってしまった。残念。
最終的に 79行 => 42行
http://jsfiddle.net/eoxzjqwu/22/
attrを使う案はうまく行かなかった。
あとせっかく減らしたインデントが共通関数のために深くなってしまった。残念。
最終的に 79行 => 42行
せっかくの減らしたインデントがまた深くなったのが悔しいので
jQueryプラグインにしたよw
行数も39行まで減った(無理やり空行削れば34行)
http://jsfiddle.net/eoxzjqwu/29/
jQueryプラグインにしたよw
行数も39行まで減った(無理やり空行削れば34行)
http://jsfiddle.net/eoxzjqwu/29/
>>790はパフォーマンス寄りにチューンしてる感じ
いかにも手続き型言語らしい書き方だな
いかにも手続き型言語らしい書き方だな
C++の名前から後置インクリメントがベターと記憶したのか
深く考えずに定型コードをそのまま使うタイプだな
深く考えずに定型コードをそのまま使うタイプだな
while (i++ < length - 1)
while (++i < length)
どっちでもいいとおもう
while (++i < length)
どっちでもいいとおもう
>>814
深く考えたら、++i なんてしねーよw
深く考えたら、++i なんてしねーよw
そもそもfor文内で宣言した変数はその1ループごとに破棄されるから多重扱いですらないのでは
>>820
まあ何のために、一行を長くして可読性を下げてまで
for内でやらなくていい変数定義をしたのか理由がわからんね。
深く考えてないんだろうけどw
そもそも元のコードは変数多すぎ。
それに縦と横でアルゴリズムが大きく変わるはずがないことに
気づかなかったのかねぇ。おかげで2倍のコードを読む羽目になった。
アルゴリズム上、これlengthっていらなくね?って思ったらやっぱりそうだった。
元のコードは縦のcellリストを作らずにループでやってたから終了条件として必要だったんだろうな。
http://jsfiddle.net/eoxzjqwu/30/
無駄なコードを削って37行に。気づけば元のコードの半分以下になってるな。
修正後のvarで定義している変数の数はたった3つ。
まあ何のために、一行を長くして可読性を下げてまで
for内でやらなくていい変数定義をしたのか理由がわからんね。
深く考えてないんだろうけどw
そもそも元のコードは変数多すぎ。
それに縦と横でアルゴリズムが大きく変わるはずがないことに
気づかなかったのかねぇ。おかげで2倍のコードを読む羽目になった。
アルゴリズム上、これlengthっていらなくね?って思ったらやっぱりそうだった。
元のコードは縦のcellリストを作らずにループでやってたから終了条件として必要だったんだろうな。
http://jsfiddle.net/eoxzjqwu/30/
無駄なコードを削って37行に。気づけば元のコードの半分以下になってるな。
修正後のvarで定義している変数の数はたった3つ。
さらに、縦と横のコードを両方共セレクタに置き換えることで
汎用化してblock呼び出しも削った。
http://jsfiddle.net/eoxzjqwu/35/ (30行)
分割代入とか使えば、もう少し可読性上がるけど
IEで動かないのであえて使ってないw
汎用化してblock呼び出しも削った。
http://jsfiddle.net/eoxzjqwu/35/ (30行)
分割代入とか使えば、もう少し可読性上がるけど
IEで動かないのであえて使ってないw
>>818
評価値を使わないならどちらでも変わらない
評価値を使わないならどちらでも変わらない
動いてはいるのだけど、明らかに無駄な処理過ぎるので突っ込まれる前に直した。
http://jsfiddle.net/eoxzjqwu/36/
http://jsfiddle.net/eoxzjqwu/36/
>>826
「一長一短」という言葉があってだな
おまえの中の優先順位と他人の優先順位が同じとは限らない
更にいえば、「おまえの中では可読性が低い」というだけ
手続き型プログラミングとしてはあのぐらいは当たり前にある
「一長一短」という言葉があってだな
おまえの中の優先順位と他人の優先順位が同じとは限らない
更にいえば、「おまえの中では可読性が低い」というだけ
手続き型プログラミングとしてはあのぐらいは当たり前にある
COBOLではあのぐらい当たり前にあるっていう理由で
JavaScriptでCOBOL風の可読性の低い書き方をされたら
たまったもんじゃないなw
JavaScriptでCOBOL風の可読性の低い書き方をされたら
たまったもんじゃないなw
>>819
知ってるけど、多重定義を避けたい気持ちは理解できる
while (i--) {
var obj = array[i];
console.log(obj.a, obj.b);
}
このコードの var obj の行がとても気持ち悪い
これは感覚であって理屈じゃないんだよね
まあ、変数の代入に先行して初期化処理があるべき、といえなくもないけど
知ってるけど、多重定義を避けたい気持ちは理解できる
while (i--) {
var obj = array[i];
console.log(obj.a, obj.b);
}
このコードの var obj の行がとても気持ち悪い
これは感覚であって理屈じゃないんだよね
まあ、変数の代入に先行して初期化処理があるべき、といえなくもないけど
>>831
varで書いてメリットは、あとでletに置き換えやすいということ。
コードには、そうする意図があるわけで、
その位置にvarを書いておけば、whileの外では使わないものである
という意図が明確になる。たとえ使えたとしてもだ。
varで書いてメリットは、あとでletに置き換えやすいということ。
コードには、そうする意図があるわけで、
その位置にvarを書いておけば、whileの外では使わないものである
という意図が明確になる。たとえ使えたとしてもだ。
>>836
>>732はできるかな?って思ってやってみただけだけどね。
処理的には属性つけて更新して削除してとかやってるからなんか無駄だし、
縦にはそのままでは対応できない。頑張ってもあの程度の量で出来るかどうかわからない。
>>827が思いの外シンプルに修正できたので、通常はこっちをおすすめする。
それはそれとして、こういうのに挑戦すると楽しいし技術力も上がるよ。
人によっては動けばいいが最優先になってる人もいるけど、
そういう人のコードは無駄が多いし、いつもその程度でやめるてるから技術力はあがらない。
JavaScript使っていても過去にやってた手続き型風の書き方のままになっちゃう。
動けばいいでやめるからそうなるわけ。
時間をかけて最初に書いたものをそれ以上に修正していくことで
次からはそれを最初からかけるようになるよ。
面白いネタを持ってきてくれた人に感謝だなw
>>732はできるかな?って思ってやってみただけだけどね。
処理的には属性つけて更新して削除してとかやってるからなんか無駄だし、
縦にはそのままでは対応できない。頑張ってもあの程度の量で出来るかどうかわからない。
>>827が思いの外シンプルに修正できたので、通常はこっちをおすすめする。
それはそれとして、こういうのに挑戦すると楽しいし技術力も上がるよ。
人によっては動けばいいが最優先になってる人もいるけど、
そういう人のコードは無駄が多いし、いつもその程度でやめるてるから技術力はあがらない。
JavaScript使っていても過去にやってた手続き型風の書き方のままになっちゃう。
動けばいいでやめるからそうなるわけ。
時間をかけて最初に書いたものをそれ以上に修正していくことで
次からはそれを最初からかけるようになるよ。
面白いネタを持ってきてくれた人に感謝だなw
>>790は面目丸つぶれw
>http://jsfiddle.net/eoxzjqwu/
>
> 件の人が「コードが長すぎて冗長だ」と煽り立てるのが目に浮かぶが、「簡潔で美しいコード」はコード量が少ないことを指すわけではない。
> >>732のようなアルゴリズム上の無駄を美しくないと感じる人もいる。
>>732が>>790を修正したコード
↓
http://jsfiddle.net/eoxzjqwu/36/
>http://jsfiddle.net/eoxzjqwu/
>
> 件の人が「コードが長すぎて冗長だ」と煽り立てるのが目に浮かぶが、「簡潔で美しいコード」はコード量が少ないことを指すわけではない。
> >>732のようなアルゴリズム上の無駄を美しくないと感じる人もいる。
>>732が>>790を修正したコード
↓
http://jsfiddle.net/eoxzjqwu/36/
>>839
>>790はletに置き換える事を意識している気配がある
話の流れ無視すんなーw
> for (var k = 0, cells = rows[j].cells, n = cells.length, cell, textContent, colSpan, nextCell; k < n; ++k) {
> cell = cells[k];
> textContent = cell.textContent;
> colSpan = cell.colSpan;
例えばこことか、forの行でcells.lengthをnに入れるのはまだわかるが、
そのすぐ下の行で代入してる、cell、textContent、colSpanなんかを
forの行でやる意味がない。
for (var k = 0, n = cells.length; k < n; ++k) {
var cell = cells[k];
var textContent = cell.textContent;
var colSpan = cell.colSpan;
↑こう書けばいいだろ。
varの動作からしたら、適切じゃないかもしれないが、
意図としてはこのとおりなんだし、あとからletに置き換えやすい。
という流れだろうがw
>>790はletに置き換える事を意識している気配がある
話の流れ無視すんなーw
> for (var k = 0, cells = rows[j].cells, n = cells.length, cell, textContent, colSpan, nextCell; k < n; ++k) {
> cell = cells[k];
> textContent = cell.textContent;
> colSpan = cell.colSpan;
例えばこことか、forの行でcells.lengthをnに入れるのはまだわかるが、
そのすぐ下の行で代入してる、cell、textContent、colSpanなんかを
forの行でやる意味がない。
for (var k = 0, n = cells.length; k < n; ++k) {
var cell = cells[k];
var textContent = cell.textContent;
var colSpan = cell.colSpan;
↑こう書けばいいだろ。
varの動作からしたら、適切じゃないかもしれないが、
意図としてはこのとおりなんだし、あとからletに置き換えやすい。
という流れだろうがw
伝わってない人もいるようなので書くと、こんなコードね
var a = 1;
var a = 2;
仕様上は問題ないけど、2回目はvar宣言を外したい
var a = 1;
var a = 2;
仕様上は問題ないけど、2回目はvar宣言を外したい
> 仕様上は問題ないけど、2回目はvar宣言を外したい
いや、forの行でvarしても中でvarしても
変数に対するvarは一回だけですが?
2回目ってどこのことですかね?
いや、forの行でvarしても中でvarしても
変数に対するvarは一回だけですが?
2回目ってどこのことですかね?
>>842
k === 1 になった時
k === 1 になった時
関数で考えればわかるはずなんだが、
↓ このコードは実行できる。
foo();
function foo() { ・・・ }
foo()を実行する段階では、まだfunction foo() {}は実行されてないじゃないか!?って
思う人はいないだろう。
理由は簡単で、実行時じゃなくてパースした後にfunction foo()は定義されるから。
それと同じで、var a も、var aと書いた所でvarされるのではなくて、
パースした後に定義されるんだけどな。
ループで繰り返すたびに、varするわけじゃないんだよw
もちろん代入自体は行われるけどね。
↓ このコードは実行できる。
foo();
function foo() { ・・・ }
foo()を実行する段階では、まだfunction foo() {}は実行されてないじゃないか!?って
思う人はいないだろう。
理由は簡単で、実行時じゃなくてパースした後にfunction foo()は定義されるから。
それと同じで、var a も、var aと書いた所でvarされるのではなくて、
パースした後に定義されるんだけどな。
ループで繰り返すたびに、varするわけじゃないんだよw
もちろん代入自体は行われるけどね。
>>845
だから、それは理解してる
変数は関数呼び出しされた時点でundefinedで初期化される
わかってるけど、コードをそのまま読むと変数を再宣言しているように見えてしまうんだよ
letならブロックスコープ単位で初期化されるから再宣言はしないね
何度もいうけど、感覚の話だから
だから、それは理解してる
変数は関数呼び出しされた時点でundefinedで初期化される
わかってるけど、コードをそのまま読むと変数を再宣言しているように見えてしまうんだよ
letならブロックスコープ単位で初期化されるから再宣言はしないね
何度もいうけど、感覚の話だから
>>846
> >>840の2,3,4行目を展開すればそうなる
JavaScriptを勉強しようぜw
function setColSpan (tableSection /* [... tableSection] */) {
省略
for (var k = 0, n = cells.length; k < n; ++k) {
var cell = cells[k];
var textContent = cell.textContent;
var colSpan = cell.colSpan;
っていうのは変数の巻き上げって処理が行われて、こう解釈されるんだぜ
function setColSpan (tableSection /* [... tableSection] */) {
var k, n, cell, textContent, colSpan;
省略
for (k = 0, n = cells.length; k < n; ++k) {
cell = cells[k];
textContent = cell.textContent;
colSpan = cell.colSpan;
この後で展開した所で、varは2回でてくることはない。
> >>840の2,3,4行目を展開すればそうなる
JavaScriptを勉強しようぜw
function setColSpan (tableSection /* [... tableSection] */) {
省略
for (var k = 0, n = cells.length; k < n; ++k) {
var cell = cells[k];
var textContent = cell.textContent;
var colSpan = cell.colSpan;
っていうのは変数の巻き上げって処理が行われて、こう解釈されるんだぜ
function setColSpan (tableSection /* [... tableSection] */) {
var k, n, cell, textContent, colSpan;
省略
for (k = 0, n = cells.length; k < n; ++k) {
cell = cells[k];
textContent = cell.textContent;
colSpan = cell.colSpan;
この後で展開した所で、varは2回でてくることはない。
>>831
お前はJavascriptだけじゃなくプログラムを学び直すべき
お前はJavascriptだけじゃなくプログラムを学び直すべき
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript & jQuery 質問用スレッド vol.8 + (1001) - [98%] - 2019/2/9 14:00
- + JavaScript & jQuery 質問用スレッド vol.7 + (701) - [98%] - 2022/12/19 17:15
- + JavaScript & jQuery 質問用スレッド vol.7 + (993) - [98%] - 2017/11/10 8:15
- + JavaScript & jQuery 質問用スレッド vol.6 + (980) - [98%] - 2016/11/20 14:31
- + JavaScript の質問用スレッド vol.95 + (1001) - [72%] - 2012/1/17 4:16
- + JavaScript の質問用スレッド vol.75 + (1001) - [72%] - 2010/1/23 1:07 ○
- + JavaScript の質問用スレッド vol.85 + (1001) - [72%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.135 + (1002) - [70%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.105 + (1001) - [70%] - 2013/5/20 4:45
- + JavaScript の質問用スレッド vol.125 + (1001) - [70%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.115 + (1001) - [70%] - 2014/5/29 16:16
- + JavaScript の質問用スレッド vol.93 + (1001) - [70%] - 2011/12/10 18:31
トップメニューへ / →のくす牧場書庫について