私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.122 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
なんだ、try{}catch{}で遅いループを速くするバッドノウハウも知らんのか。ショボwIE5が出て程なく発見した俺より15年遅れている。
>>734
> じゃあ、バグはどうする?
それは「自分で書いたコードのエラー」
仕様から読みとるのは「native関数のエラー」
あなたが言及した新機能APIへの対策は後者
一つの問題(後者)の話を棚に上げて、新しい問題(前者)を持ってくるべきではない
> じゃあ、バグはどうする?
それは「自分で書いたコードのエラー」
仕様から読みとるのは「native関数のエラー」
あなたが言及した新機能APIへの対策は後者
一つの問題(後者)の話を棚に上げて、新しい問題(前者)を持ってくるべきではない
>>741
bar() でエラーを発生させるなら foo() で改めてエラーを発生させる必要はない
エラーの所在をはっきりさせないからこんなコードになる
foo, bar の要求仕様が確立されていれば、「foo で発生させるエラー」と「bar で発生させるエラー」は明確に区別されるはずだ
Array.prototype.forEach と Array.prototype.filter を組み合せた時、各メソッドで「同時に同じエラーが発生する」ことはないのと同じ
bar() でエラーを発生させるなら foo() で改めてエラーを発生させる必要はない
エラーの所在をはっきりさせないからこんなコードになる
foo, bar の要求仕様が確立されていれば、「foo で発生させるエラー」と「bar で発生させるエラー」は明確に区別されるはずだ
Array.prototype.forEach と Array.prototype.filter を組み合せた時、各メソッドで「同時に同じエラーが発生する」ことはないのと同じ
結局、このスレの総意はtry-catch使うなってことでいいの?
あと本当のエラーって抽象的な言い方じゃなく具体的なコード出して示してみろよ
あと本当のエラーって抽象的な言い方じゃなく具体的なコード出して示してみろよ
全てのコードをtry-catchで囲って「はい、全てのエラーに対応したよー」っていうやり方が馬鹿だってことでしょ
try-catch自体は否定されてないように思うが
try-catch自体は否定されてないように思うが
>>743のコードのこと。
なんか反論(エラーを戻り値で返すときの素晴らしい方法)を
書いているかと思えばやっぱりソースコードを書いたのは俺だけだったね。
使えねぇな。
書いているかと思えばやっぱりソースコードを書いたのは俺だけだったね。
使えねぇな。
>>754
まず最初に修正したソースコード書いてね。
まず最初に修正したソースコード書いてね。
>>755
> 結局、このスレの総意はtry-catch使うなってことでいいの?
いや、なんのために、try-catchが言語仕様としてあるのかとw
昔、例えばC言語にはないんだよ。
それで苦労した歴史がある。
新しい言語には漏れ無く、try-catch相当の仕様が言語にある。
try-catchは何のための機能か?当然エラー処理のためだよ。
エラー処理専用の言語仕様が、新しい言語には漏れ無く付いている。
それはこの機能が極めて有効だってことを意味するんだよ。
> 結局、このスレの総意はtry-catch使うなってことでいいの?
いや、なんのために、try-catchが言語仕様としてあるのかとw
昔、例えばC言語にはないんだよ。
それで苦労した歴史がある。
新しい言語には漏れ無く、try-catch相当の仕様が言語にある。
try-catchは何のための機能か?当然エラー処理のためだよ。
エラー処理専用の言語仕様が、新しい言語には漏れ無く付いている。
それはこの機能が極めて有効だってことを意味するんだよ。
>>762
ちゃんと書いてほしいよね。
エラーを戻り値で、つまりエラーコードで返す場合。
俺はすごく疑問なんだ。
数値を返す関数の内部でエラーが起きた時、
一体、何を返すのか?
NaN? null? undefined?
しかしこれではエラーコードは返せない。
詳細な理由はわからない。
さては文字列を返すのか?
しかし、今度は文字列を返す関数でエラーが起きたらどうするのか?
今度は、エラーコードを返すのか?
エラーの値が統一されていない。
関数によって、エラー処理の方法を変えるのか?
どれだけ大変なことをしているんだろう。
実際に書いているコードを見てみたいんだよね。
ちゃんと書いてほしいよね。
エラーを戻り値で、つまりエラーコードで返す場合。
俺はすごく疑問なんだ。
数値を返す関数の内部でエラーが起きた時、
一体、何を返すのか?
NaN? null? undefined?
しかしこれではエラーコードは返せない。
詳細な理由はわからない。
さては文字列を返すのか?
しかし、今度は文字列を返す関数でエラーが起きたらどうするのか?
今度は、エラーコードを返すのか?
エラーの値が統一されていない。
関数によって、エラー処理の方法を変えるのか?
どれだけ大変なことをしているんだろう。
実際に書いているコードを見てみたいんだよね。
ちなみに、コンシューマーゲーム機のゲームはほぼ全部C++で作られてるけど
コンパイラの例外処理と実行時方情報(RTTI)はデフォオフられてる
さらにSDKの全APIは厳密にエラーコードが定義されてるが、それを戻り値で返す
例外を返すAPIは全く無いし、例外処理(try-catch)を遣ってるゲームも皆無だろう
ゲームに突然例外が発生しましたはありえない
ありとあらゆる状況で正しく動作する事が前提で、全てのSDKのAPIは
基本的に戻り値をチェックしてエラーが返ったら何らかの対処をする必要がある
コンパイラの例外処理と実行時方情報(RTTI)はデフォオフられてる
さらにSDKの全APIは厳密にエラーコードが定義されてるが、それを戻り値で返す
例外を返すAPIは全く無いし、例外処理(try-catch)を遣ってるゲームも皆無だろう
ゲームに突然例外が発生しましたはありえない
ありとあらゆる状況で正しく動作する事が前提で、全てのSDKのAPIは
基本的に戻り値をチェックしてエラーが返ったら何らかの対処をする必要がある
突然コンシューマ機の例を持ってくる馬鹿がいてワラタ
JavaScriptは特定の環境だけで動作するものなんですかねえ?
JavaScriptは特定の環境だけで動作するものなんですかねえ?
>>765
> ちなみに、コンシューマーゲーム機のゲームはほぼ全部C++で作られてるけど
> コンパイラの例外処理と実行時方情報(RTTI)はデフォオフられてる
うん。知ってる。らしいね。
理由は、究極的に速度が必要だから。
で、このスレの内容には当てはまらない
例外の話なんで、消えてくんない?
> ちなみに、コンシューマーゲーム機のゲームはほぼ全部C++で作られてるけど
> コンパイラの例外処理と実行時方情報(RTTI)はデフォオフられてる
うん。知ってる。らしいね。
理由は、究極的に速度が必要だから。
で、このスレの内容には当てはまらない
例外の話なんで、消えてくんない?
>>766
> buz()の処理内容次第では>>743が使えなくなるのなら、>>743はどういう意図で書いたんだ?
baz()の処理内容で使えなくなるのは、>>741だよ。
もしbazがが新たにエラーコードを追加した。ERROR_CODE3ね。
そしたらbarはそのままでは使えなくなる。
barを修正すればいいけど、あぁ大変だ。
さて、ERROR_CODE3を追加するだけならまだ楽だ。
もしbazの中で新たに、そうだね例えばlocalStrorageを使って
キャッシュさせる処理を実装したとしよう。そうすると、bazは例外を出すようになる。
例外を使ったコードにしていれば楽だが、今は戻り値でエラーを返す場合の話だ。
localStorageのエラーをERROR_CODE4として追加するのか?
localStorageがだすQUOTA_EXCEEDED_ERRというエラーをERROR_CODE4とし、
その他のエラーは・・・あぁ、調べるのが面倒くさい。だが戻り値で返すならば全部調べないとな!がんばれよ!
エラーコードだけならまだいい。エラーメッセージはどうしよう。
localStorageは"An attempt was made to add something to storage that exceeded the quota." という
エラーメッセージを例外オブジェクトの中に入れてくれる。
しかし、エラーを戻り値で戻すならエラーコードしか戻せない。
さてどうしよう。
baz()の処理内容次第で>>741だとどんどん悩みが増えていく。
> buz()の処理内容次第では>>743が使えなくなるのなら、>>743はどういう意図で書いたんだ?
baz()の処理内容で使えなくなるのは、>>741だよ。
もしbazがが新たにエラーコードを追加した。ERROR_CODE3ね。
そしたらbarはそのままでは使えなくなる。
barを修正すればいいけど、あぁ大変だ。
さて、ERROR_CODE3を追加するだけならまだ楽だ。
もしbazの中で新たに、そうだね例えばlocalStrorageを使って
キャッシュさせる処理を実装したとしよう。そうすると、bazは例外を出すようになる。
例外を使ったコードにしていれば楽だが、今は戻り値でエラーを返す場合の話だ。
localStorageのエラーをERROR_CODE4として追加するのか?
localStorageがだすQUOTA_EXCEEDED_ERRというエラーをERROR_CODE4とし、
その他のエラーは・・・あぁ、調べるのが面倒くさい。だが戻り値で返すならば全部調べないとな!がんばれよ!
エラーコードだけならまだいい。エラーメッセージはどうしよう。
localStorageは"An attempt was made to add something to storage that exceeded the quota." という
エラーメッセージを例外オブジェクトの中に入れてくれる。
しかし、エラーを戻り値で戻すならエラーコードしか戻せない。
さてどうしよう。
baz()の処理内容次第で>>741だとどんどん悩みが増えていく。
>>766
はやくコード出せよ
はやくコード出せよ
JavaScriptでは非同期処理が多用されるわけだけど、
それの異常系もtry/catchでなんとかなると思っているんだろうか
それの異常系もtry/catchでなんとかなると思っているんだろうか
>>775
戯言に反論できないからと言ってムキになるなよ
戯言に反論できないからと言ってムキになるなよ
>>777
馬鹿に反論できなくて悔しいのは分かった
馬鹿に反論できなくて悔しいのは分かった
>>779
さっきも言ったけど、>>743のような万能な対応方法はないというのが主張だから、例を挙げてもしょうがないと思うが…
document.getElementById("hoge").style.color = "red";
このコード、もし#hogeが存在しない場合、try-catchで捕捉できる。でも、いつもそれが正しいと言える?
こうしたい時だってあるはず
var elm = document.getElementById("hoge");
if(!elm){ /* #hogeが存在しないことに対する対応。#hogeを作成するなりなんなり。本当に例外にしたいならthrowする */ }
elm.style.color = "red";
あとは>>774のいうように、setTimeoutやXMLHttpRequestなど、非同期のものはtry-catchでは対応できない。
さっきも言ったけど、>>743のような万能な対応方法はないというのが主張だから、例を挙げてもしょうがないと思うが…
document.getElementById("hoge").style.color = "red";
このコード、もし#hogeが存在しない場合、try-catchで捕捉できる。でも、いつもそれが正しいと言える?
こうしたい時だってあるはず
var elm = document.getElementById("hoge");
if(!elm){ /* #hogeが存在しないことに対する対応。#hogeを作成するなりなんなり。本当に例外にしたいならthrowする */ }
elm.style.color = "red";
あとは>>774のいうように、setTimeoutやXMLHttpRequestなど、非同期のものはtry-catchでは対応できない。
>>768
速度も重要だが
> ゲームに突然例外が発生しましたはありえない
という方が重要
全てのエラーを捕捉して対処する事に意味がある
try-catchを使ったからと言って簡単になるわけではない
↓これをtry-catchで簡単にしてみて (hoge()やhage()が例外を投げる前提)
var res = hoge();
if (res >= 0) {
// 成功
} else {
// なんらかのエラー
switch (res) {
case -1:
// なんらかのエラー処理1
break;
case -2:
// なんらかのエラー処理2
break;
case -3:
// なんらかのエラー処理3
break;
default:
// 未知のエラーの為の処理
break;
}
error(); // 共通のエラー処理
return errorCode;
}
var res = hage();
// 以下同じような処理が続く
速度も重要だが
> ゲームに突然例外が発生しましたはありえない
という方が重要
全てのエラーを捕捉して対処する事に意味がある
try-catchを使ったからと言って簡単になるわけではない
↓これをtry-catchで簡単にしてみて (hoge()やhage()が例外を投げる前提)
var res = hoge();
if (res >= 0) {
// 成功
} else {
// なんらかのエラー
switch (res) {
case -1:
// なんらかのエラー処理1
break;
case -2:
// なんらかのエラー処理2
break;
case -3:
// なんらかのエラー処理3
break;
default:
// 未知のエラーの為の処理
break;
}
error(); // 共通のエラー処理
return errorCode;
}
var res = hage();
// 以下同じような処理が続く
最初JSONの破損チェックの話じゃなかったっけ
(o.a.b.c.d.e.f.g.h.i.j.k.l.m.n == 1)
このテストで
アホみたいに先頭から順番にif文で確認するのもいいけど
try{
if(o.a.b.c.d.e.f.g.h.i.j.k.l.m.n == 1){
}
}catch(){
}
全部囲めば楽だよねって話
(o.a.b.c.d.e.f.g.h.i.j.k.l.m.n == 1)
このテストで
アホみたいに先頭から順番にif文で確認するのもいいけど
try{
if(o.a.b.c.d.e.f.g.h.i.j.k.l.m.n == 1){
}
}catch(){
}
全部囲めば楽だよねって話
もうjavascript関係無いな、いつの時代の議論だよって感じ
try~catchやエラーコードに関するコードを書かないのは、もう何十年も議論され尽くされててちょっと探せば沢山コードなんて見つかるのに、今更「ソースまだぁ?」とか言う勉強不足野郎に呆れてみんな書かないんじゃないの?少なくても俺はそうだ
try~catchの誕生した背景と解決しようとした課題、そして新たに出てきた問題とか色々引っくるめて結論だけ言うと
「適材適所で使い分けろ」
だ。銀の弾丸なんで存在しない。コードが短くなるから~とかスビードガァとか、そんな短絡的な理由でどっちが優れてる!使うべき!とか、レベル低すぎるんだよ
try~catchやエラーコードに関するコードを書かないのは、もう何十年も議論され尽くされててちょっと探せば沢山コードなんて見つかるのに、今更「ソースまだぁ?」とか言う勉強不足野郎に呆れてみんな書かないんじゃないの?少なくても俺はそうだ
try~catchの誕生した背景と解決しようとした課題、そして新たに出てきた問題とか色々引っくるめて結論だけ言うと
「適材適所で使い分けろ」
だ。銀の弾丸なんで存在しない。コードが短くなるから~とかスビードガァとか、そんな短絡的な理由でどっちが優れてる!使うべき!とか、レベル低すぎるんだよ
>>780
> document.getElementById("hoge").style.color = "red";
> このコード、もし#hogeが存在しない場合、try-catchで捕捉できる。でも、いつもそれが正しいと言える?
正しいじゃんか。
このコードは、#hogeが存在しないことはありえないってことだろ?
アプリの仕様として#hogeが存在しないことはありえないなら、
こういうコードを書いていいし、
ありえないことが起こってしまった場合(おそらくバグだろう)
それはエラーになるべきだ。
それこそが、未知のエラーよ。
こういう未知のエラーに対して汎用的なコードを用意しておけば
ユーザーのシステムエラーが起きたことを通知したりログをとったり出来る。
> こうしたい時だってあるはず
> var elm = document.getElementById("hoge");
> if(!elm){ /* #hogeが存在しないことに対する対応。#hogeを作成するなりなんなり。本当に例外にしたいならthrowする */ }
これは意味が変わってる。アプリの仕様として
#hogeが存在しない場合がありえるときにこう書く。
> document.getElementById("hoge").style.color = "red";
> このコード、もし#hogeが存在しない場合、try-catchで捕捉できる。でも、いつもそれが正しいと言える?
正しいじゃんか。
このコードは、#hogeが存在しないことはありえないってことだろ?
アプリの仕様として#hogeが存在しないことはありえないなら、
こういうコードを書いていいし、
ありえないことが起こってしまった場合(おそらくバグだろう)
それはエラーになるべきだ。
それこそが、未知のエラーよ。
こういう未知のエラーに対して汎用的なコードを用意しておけば
ユーザーのシステムエラーが起きたことを通知したりログをとったり出来る。
> こうしたい時だってあるはず
> var elm = document.getElementById("hoge");
> if(!elm){ /* #hogeが存在しないことに対する対応。#hogeを作成するなりなんなり。本当に例外にしたいならthrowする */ }
これは意味が変わってる。アプリの仕様として
#hogeが存在しない場合がありえるときにこう書く。
>>786
お前、設計がおかしい。
そもそもエラー毎に個別のエラー処理が必要になることはまず無い。
そのの処理はこうなる。
try {
var res = hoge();
var res = hage();
} catch(e) {
共通のエラー処理
throw e; // エラー再送信
}
その上で重要なのは、例外は深い階層から一気に
上の層まで処理を飛ばせること。
発生したエラーを画面にalertでだすか、
console.logにだすか、サーバー側に通知するかはアプリ次第。
どうするかは、一箇所にまとめるべき。それがonerror
もし上の処理が、foo -> bar -> baz の中の処理だった場合、戻り値でどうやって処理を中断させるのか?
お前、設計がおかしい。
そもそもエラー毎に個別のエラー処理が必要になることはまず無い。
そのの処理はこうなる。
try {
var res = hoge();
var res = hage();
} catch(e) {
共通のエラー処理
throw e; // エラー再送信
}
その上で重要なのは、例外は深い階層から一気に
上の層まで処理を飛ばせること。
発生したエラーを画面にalertでだすか、
console.logにだすか、サーバー側に通知するかはアプリ次第。
どうするかは、一箇所にまとめるべき。それがonerror
もし上の処理が、foo -> bar -> baz の中の処理だった場合、戻り値でどうやって処理を中断させるのか?
もし上の処理が、foo -> bar -> baz の中の処理だった場合、戻り値でどうやって処理を中断させるのか?
function foo() {
bar();
// 正常時の処理
}
function bar() {
baz();
// 正常時の処理
}
function baz() {
var res = hoge();
var res = hage();
// 正常時の処理
}
もしどこかでエラーが起きた場合、例外であればちゃんとそこで
returnしたような動きに出来る。
これを戻り値で書くとこうなる。大変だよなぁw
function foo() {
bar();
// 正常時の処理
}
function bar() {
baz();
// 正常時の処理
}
function baz() {
var res = hoge();
var res = hage();
// 正常時の処理
}
もしどこかでエラーが起きた場合、例外であればちゃんとそこで
returnしたような動きに出来る。
これを戻り値で書くとこうなる。大変だよなぁw
function foo() {
if (!bar()) {
return;
}
// 正常時の処理
}
function bar() {
if (!baz()) {
return;
}
// 正常時の処理
}
function baz() {
var res = hoge();
if(!res) {
return;
}
var res = hage();
if(!res) {
return;
}
// 正常時の処理
}
ほら、戻りを使うと、もうコードが倍になっちゃうw
if (!bar()) {
return;
}
// 正常時の処理
}
function bar() {
if (!baz()) {
return;
}
// 正常時の処理
}
function baz() {
var res = hoge();
if(!res) {
return;
}
var res = hage();
if(!res) {
return;
}
// 正常時の処理
}
ほら、戻りを使うと、もうコードが倍になっちゃうw
中身が薄くてレベル低すぎだろ
いい加減放置しろよ、795は引っ込みつかなくなって自分が正しいと証明したいだけの自己愛性パーソナル障害
いい加減放置しろよ、795は引っ込みつかなくなって自分が正しいと証明したいだけの自己愛性パーソナル障害
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.122 + (116) - [100%] - 2018/5/2 18:30
- + JavaScript の質問用スレッド vol.125 + (1001) - [97%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.123 + (966) - [97%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.120 + (1002) - [97%] - 2014/11/8 1:15
- + JavaScript の質問用スレッド vol.124 + (1001) - [97%] - 2015/7/16 1:30
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.132 + (1001) - [97%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.142 + (984) - [97%] - 2020/8/27 19:15
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.129 + (981) - [97%] - 2016/5/5 8:16
- + JavaScript の質問用スレッド vol.129 + (926) - [97%] - 2017/7/27 13:45
- + JavaScript の質問用スレッド vol.128 + (1001) - [97%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.123 + (1002) - [97%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.127 + (1001) - [97%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [97%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.142 + (926) - [97%] - 2019/12/23 13:15
トップメニューへ / →のくす牧場書庫について