回答(全4件)
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
2
この機能は開放されていません
評価を下げる条件を満たしてません
提示されているコードだと、try/catch の「大域脱出」の利点を享受できるものになっていませんね。通常の関数呼び出しのフローより大きく脱出できるところが嬉しいわけで、だからこそ異常系の処理に向くわけです(が、異常系処理以外でも使いどころはあります)。
$(".sample").click(function(){
try{
validate();
}
catch(e){ // ※ 例外捕捉
return false;
}
/* 上のチェックにひっかかない場合に行う処理をここに記述 */
})
function validate(){
...
if (/* あれのチェック */) throw new Error('あれがおかしい');
...
if (/* これのチェック */) throw new Error('これがおかしい');
...
if (/* それのチェック */) throw new Error('それがおかしい');
return; // 問題ナッシング
}
ここで validate()
が別関数になっているところは重要ではありません。異常を発見したらボンボン例外を投げちゃうことで、正常系の処理を書くことに集中できます。下のコードのほうが本質を理解しやすいかもしれません。
$(".sample").click(function() {
try{
doSomething();
}
catch(e){ // ※ 例外捕捉
return false;
}
});
function doSomething() {
...
if (/* あれのチェック */) throw new Error('あれがおかしい');
...
if (/* これのチェック */) throw new Error('これがおかしい');
...
if (/* それのチェック */) throw new Error('それがおかしい');
/* 上のチェックにひっかかない場合に行う処理をここに記述 */
}
validate()
や doSomething()
の中で例外を投げ分けることで、※印のところで例外の種類による処理の変更なんかもできます。
余談ですが、手続き型言語の多くに提供されている return
も、いわゆる構造化プログラミングのフローを飛び越えて脱出できる命令と考えることができます。
$(".sample").click(function() {
if (! validate()) return false;
/* 上のチェックにひっかかない場合に行う処理をここに記述 */
});
function validate() {
...
if (/* あれのチェック */) return false;
...
if (/* これのチェック */) return false;
...
if (/* それのチェック */) return false;
return true; // 問題ナッシング
}
最初のコードとほぼ同じです。違うところは、return
は自分のいる関数から脱出することしかできないのに対し、throw では try をしかけたところまで脱出できることです。つまり、validate()
が超複雑で、さらに細かい検証関数を呼び出すような作りにした場合でも、その中で例外を投げるだけで簡単に大域脱出できるということです。
2016/02/15 23:22 投稿
isset($replyData['Comments']["total_count"]) ? $replyData['Comments']["total_count"] ?>
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
0
この機能は開放されていません
評価を下げる条件を満たしてません
validate でスローせずに boolean を返してみてはどうですか?
ちなみに、isError という名前にする場合は true がエラーです。
false をエラーとしたいのであれば、変数名は isValid などにすべきですね。
$(".sample").click(function(){
if (validate()){
alert("Error発生");
return false;
}
/* 上のチェックにひっかからない場合に行う処理をここに記述 */
})
function validate(){
var isError = false;
/*
* 長いエラーチェック。エラーの場合、isError = trueをセット。
*/
return isError;
}
2016/02/15 22:12 投稿
isset($replyData['Comments']["total_count"]) ? $replyData['Comments']["total_count"] ?>
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
0
この機能は開放されていません
評価を下げる条件を満たしてません
throw
は処理を強制的に停止させたい場合に使いますが、せっかく throw
したところを try-catch
で例外を止めて処理させる部分に矛盾を感じます。
例外を発生させたいのなら throw new Error
で強制終了させれば良いですし、静かにエラーを発生させたい(強制終了したくない)のなら throw
を使わないようにしてみてはいかがでしょうか。
'use strict';
function validate (element) {
element.checkValidity();
var validity = element.validity,
error = [];
if (element.valueMissing) {
error.push('required');
}
if (element.patternMismatch) {
error.push('pattern');
}
return error;
}
function handleClick (event) {
var error = validate(event.currentTarget.elements['hoge']),
errorMsg {required: '必須項目です', pattern: '文法エラーです'};
for (var i = 0, l = error.length; i < l; ++i) {
console.error(errorMsg[error[i]]);
}
}
jQuery(('.sample').on('click', handleClick);
Re: lmnwtr2027 さん
2016/02/16 01:01 投稿
isset($replyData['Comments']["total_count"]) ? $replyData['Comments']["total_count"] ?>
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
0
この機能は開放されていません
評価を下げる条件を満たしてません
=の比較演算子は=2つまたは3つです。
===の厳密な比較の方でいいと思います。
/* 誤 */
if(isError = false)
/* 正 */
if(isError == false)
if(isError === false)
また、他の方も仰っていますが、初期値をfalseにして、
エラーがあったらtrueにした方が、このように書けます。
var isError = false;
// エラーがあったら
isError = true;
if(isError){ //エラー処理 }
2016/02/16 10:07 投稿
isset($replyData['Comments']["total_count"]) ? $replyData['Comments']["total_count"] ?>
関連した質問
-
受付中
JavaでSSLSocketを使いFTPS(explicit)でファイルをSTORしたい
javaの業務で、ファイルを他サーバーに転送しなくちゃなのですが、できなくて困っています。
転送先のサーバがFTPはFTPSのみ受け付けている、という状態です。
大変困っています。
-
受付中
Javaの質問です。テキストファイルのデータを上書き(部分的に削除)したいです。お力をお貸しください...
初めて利用させていただきます。 

現在私は、テキストファイルを用いるJavaの勉強をしております。 
テキストファイルに、コンソールで入力した「name」「job」「sex」を
-
解決済
$.ajaxでオブジェクト形式のデータをDB登録用phpファイルに渡したい
参考(http://webcake.no003.info/webdesign/jquery-ajax-php-post-sample.html)を参考にして、 
submitボタン
-
解決済
phpでアップロードするファイルの拡張子を制限したい。
phpで以下の順序でバリデーションを実施したいです。 
1.ファイルが選択されていること 
2.拡張子がpdf,jpg,pngのいずれかであること 
3.ファイルサイズが2M以下で
同じタグがついた質問を見る
- JavaScript
3652questions
JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。
- 例外処理
11questions
例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。