JavaScriptで、条件判定以降の行を読まないことはできますか?
以下のように、データ( visitDatas )の有無を判定し、なければ alert 以降を実行したくないです。
理由は、else{} の中に書いているためのインデントに違和感を持つためです。処理A、B、Cにいちいちインデントを付けることに何となく納得できません。
(ちなみに visitDatas はアクセス時にPHPから visit.js へ出力されるオブジェクトです。)
js
1/* visit.js */ 2 3if ( visitDatas.status === 'error' ) { 4 5 // alertで終わり、他の処理をしない 6 alert('ERROR!'); 7 8} else { 9 10 // データがある場合の処理を、この else{} 内に書くからインデントに違和感 11 // 処理A(インデントが必要) 12 // 処理B(インデントが必要) 13 // 処理C(インデントが必要) 14}
イメージしている流れは次の書き方で、これなら処理A、B、Cにインデントが不要です。
次のdie(); のような関数があればいいと思っているのですが、、
js
1/* visit.js */ 2 3if ( visitDatas.status === 'error' ) { 4 5 // alertで終わり、他の処理をしない 6 alert('ERROR!'); 7 die(); 8 9} 10 11// データがある場合の処理を、これ以降に書くことができればインデントは不要 12// 処理A(インデントが不要) 13// 処理B(インデントが不要) 14// 処理C(インデントが不要)
単純に関数にしてその関数を呼び出す方式にすればいいのでは。
そうすれば「特定の条件を満たした場合、処理をせずに終了する」とかみたいなことが出来ますから。
以下の感じですか?しかし処理A、B、Cは実行されてしまいますよね。他のご意図でしょうか?
```
function hoge(){
if ( visitDatas.status === 'error' ) {
// alertで終わり、他の処理をしない
alert('ERROR!');
return;
}
}
hoge();
console.log('処理A');
console.log('処理B');
console.log('処理C');
```
意図としてはint32_tさんの回答と同じです。インデントが深くなるのは仕方がないと思いますよ。
普通、インデントが深いとか浅いっていうのは、「関数定義のやつやクラス定義のやつ」は除きます。
つまり、「処理部だけに着目しての、インデント数」です。
言語の仕様上、関数を定義する上でのインデントは仕方がないと思いますよ。
(あえてインデントを減らすこともできなくはないがそれは可読性を下げることになるので逆にダメ)
なるほど。そういうものですか。ありがとうございます。
visitDatas.status の判定があるというだけで、他のすべての処理にインデントが必要になることがすごくいやなのですが、慣れるうちにこんな違和感は感じなくなりますか??
多分ですが。私はそんなに感じなかったのでわかりませんが、多分、最初は「三点リーダー(…)は二個で一つとする」というアレに違和感を覚えるかもしれませんが小説を読みまくっているうちに、「こういうものなんだな」とすんなり受け入れていくみたいな? なので問題ないかと。
なるほど。ご意見ありがとうございます。信じて我慢を続けてみます笑
回答3件
あなたの回答
tips
プレビュー