質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

407閲覧

JavaScriptで、条件判定以降の行を読まないことはできますか?

nikuatsu

総合スコア177

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/12/09 05:55

編集2021/12/09 06:16

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(インデントが不要)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/12/09 06:03

単純に関数にしてその関数を呼び出す方式にすればいいのでは。 そうすれば「特定の条件を満たした場合、処理をせずに終了する」とかみたいなことが出来ますから。
nikuatsu

2021/12/09 06:25

以下の感じですか?しかし処理A、B、Cは実行されてしまいますよね。他のご意図でしょうか? ``` function hoge(){ if ( visitDatas.status === 'error' ) { // alertで終わり、他の処理をしない alert('ERROR!'); return; } } hoge(); console.log('処理A'); console.log('処理B'); console.log('処理C'); ```
BeatStar

2021/12/09 06:33

意図としてはint32_tさんの回答と同じです。インデントが深くなるのは仕方がないと思いますよ。 普通、インデントが深いとか浅いっていうのは、「関数定義のやつやクラス定義のやつ」は除きます。 つまり、「処理部だけに着目しての、インデント数」です。 言語の仕様上、関数を定義する上でのインデントは仕方がないと思いますよ。 (あえてインデントを減らすこともできなくはないがそれは可読性を下げることになるので逆にダメ)
nikuatsu

2021/12/09 06:35

なるほど。そういうものですか。ありがとうございます。 visitDatas.status の判定があるというだけで、他のすべての処理にインデントが必要になることがすごくいやなのですが、慣れるうちにこんな違和感は感じなくなりますか??
BeatStar

2021/12/09 06:38

多分ですが。私はそんなに感じなかったのでわかりませんが、多分、最初は「三点リーダー(…)は二個で一つとする」というアレに違和感を覚えるかもしれませんが小説を読みまくっているうちに、「こういうものなんだな」とすんなり受け入れていくみたいな? なので問題ないかと。
nikuatsu

2021/12/09 06:39

なるほど。ご意見ありがとうございます。信じて我慢を続けてみます笑
guest

回答3

0

ベストアンサー

そんなにインデントつけたくなければただ単につけなければいいのではと思いつつ
無理やりやるならこれでしょうか

js

1if(true){ 2 console.log("err") 3 throw new Error("hoge"); 4} 5 6console.log("処理") 7

投稿2021/12/09 06:37

編集2021/12/09 06:39
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nikuatsu

2021/12/09 06:49

つけなければいいは確かにww ご回答ありがとうございます。ベストアンサーにさせていただきます。
ozwk

2021/12/09 06:52 編集

なおこんな書き方するぐらいなら関数に入れて1段ぐらいのインデントは許容したほうがいいと思います。 メモ帳で書いているわけでもなしインデントぐらい自動で入ると思うので。
nikuatsu

2021/12/09 07:01

自動インデントというツールがあることを知りませんでした。最高のアドバイスありがとうございます。
guest

0

関数にして途中でreturnしたらどうでしょうか。

js

1 2function visit() { 3 ... 4 if (visitDatas.status === 'error') { 5 // alertで終わり、他の処理をしない 6 alert('ERROR!'); 7 return; 8 } 9 // データがある場合の処理 10 ... 11}

投稿2021/12/09 06:05

int32_t

総合スコア20832

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nikuatsu

2021/12/09 06:10

ありがとうございます。仰る内容を理解しそこねているかもしれませんが、それでもインデントは書かなけばならないのではないでしょうか?
int32_t

2021/12/09 06:19

ああ、確かに元のコードが関数内でなければインデントは増えますね。これはどうしようもない気がします。
nikuatsu

2021/12/09 06:27

なるほど。インデントに違和感を覚えること自体、素人の感覚なのでしょうか。 visitDatas.status の判定があるというだけで、他のすべての処理にインデントが必要になることがすごくいやです。笑
maisumakun

2021/12/09 06:39 編集

> visitDatas.status の判定があるというだけで、他のすべての処理にインデントが必要になることがすごくいやです。 そもそも、関数の中に入らない地の文にもりもり処理を書くということ自体、いまどきのJavaScript開発ではあまり行われません(自分としては、そっちの「違和感」のほうが強いです)。
nikuatsu

2021/12/09 06:42

え?どうして横から突然そんな言い方するんですか…汗
maisumakun

2021/12/09 06:43

「インデントに違和感を覚えること自体、素人の感覚なのでしょうか。」に対するコメントのつもりだったのですが……
guest

0

「そこで終了」ならreturn
「loopを抜けたい」ならbreak

逆転の発想で、エラーないときだけ処理

js

1if ( visitDatas.status !== 'error' ) { 2処理 3} 4

ただ、インデントは可読性のためにつける意味合いが強いので、そんなに気になるならminify仕様のコードにするしかないのでは。

投稿2021/12/09 06:04

編集2021/12/09 06:30
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nikuatsu

2021/12/09 06:22 編集

loopは使っていないのでreturnですかね? ただ、以下①②もいずれでもできませんでした。①はエラーですし、②は処理A、B、Cが実行されてしまいます。 他のご意図でしたら教えて頂けますか? ①質問のまま書きました ``` if ( visitDatas.status === 'error' ) { // alertで終わり、他の処理をしない alert('ERROR!'); return; } console.log('処理A'); console.log('処理B'); console.log('処理C'); ``` ②関数にしました ``` function hoge(){ if ( visitDatas.status === 'error' ) { // alertで終わり、他の処理をしない alert('ERROR!'); return; } } hoge(); console.log('処理A'); console.log('処理B'); console.log('処理C'); ```
m.ts10806

2021/12/09 06:22

関数をreturnしても関数実行後に処理書いてると意味ないのでは。
nikuatsu

2021/12/09 06:23

必要な処理なんですけど笑
m.ts10806

2021/12/09 06:23

関数内に処理全部書くか関数の返却値をtrue/falseにしてさらに条件式書くか。
nikuatsu

2021/12/09 06:25

インデントをなくしたいのが質問です…
m.ts10806

2021/12/09 06:32

あぁ、ブラウザ実行だと出ますね。
nikuatsu

2021/12/09 06:33

ありがとうございます。質問もそういうシンプルなコードにすべきでしたね…汗 さて、そちらのpaizaだとエラーは出ませんが、JSfiddle、codepen、ブラウザ開発ツールのコンソール画面の3つで実行しますと「Illegal return statement」のエラーでした。
m.ts10806

2021/12/09 06:34

あとは代案でtry-catchくらいで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問