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

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

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

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

Q&A

解決済

3回答

1618閲覧

【JavaScript】 sかs2が出るまで待機して、それぞれ別の戻り値を返したい

kanon962

総合スコア7

JavaScript

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

0グッド

0クリップ

投稿2015/08/26 00:20

以下のソースで、"s"の文字が出力されるまで待機という処理にしているのですが、これを"s"か"s2"が出るまで待機して更にそれぞれ別の戻り値を返したいのですが、どうすればいいのかがわかりません・・・。
どなたかご解答お願い致します。

JavaScript

1fuction wait(s,con){ 2 Thread.Sleep(10); 3 var r = con.ReceiveDAta(); 4 while( r.indexOf(s) == -1 ){ 5 Thread.Sleep(10); 6 r += con.ReceiveData(); 7 } 8}

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

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

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

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

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

guest

回答3

0

このwait関数は単体で動作するものではなく、別の処理から引数sと引数conを指定して呼び出されるもののはずです。
処理の前後関係や変数の説明が足りないと、推測に頼った回答となってしまいます。

以下、はずしていたらごめんなさい。

記載いただいたコードから、
・引数sは文字列
・引数conはRecieveData()メソッドを持つクラス
・引数conの内容は記載外の処理により随時に変化し、con.RecieveData()は実行した時点での
conの内容(文字列)を返す
・wait関数ではcon.RecieveData()から返される文字列を変数rに連結していき、
引数sで指定された文字列が出現するまでこれを繰り返す
ということが(推測も込みで)読み取れます。

つまり「引数sに指定した文字がcon.RecieveData()の結果に出現するまで待機する処理」だと思います。

これがもし「"s"の文字が出力されるまで待機という処理」であるのなら、wait関数の呼び出し元の処理では
wait関数の引数sに固定的に文字列"s"を指定して呼び出しているのだと思います。

//wait関数の呼出し wait("s",con);

おそらく実際に行いたいことは「"s"か"s2"の文字が出力されるまで待機」したいのではなく、takitoさんが提示されているように「引数s、引数s2と2種類の文字列を指定して、どちらかに一致するまで待機」したいのではないでしょうか?
なぜなら、文字列"s2"には文字列"s"が含まれているため、"s2"が出現した場合もIndexOf("s")で検出できているはずだからです。

kanon962さんはこのコードをどこまで理解できているでしょうか?
改修を行う前に、ベースとなるソースを正しく理解することが近道のような気がします。

がんばってください。

投稿2015/08/26 05:58

編集2015/08/26 06:13
jawa

総合スコア3013

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

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

kanon962

2015/08/26 12:55

実際にしたいこと…の部分、正にその通りでした。 この度初めて質問させて頂きましたが、改めて具体的な質問をすることの大切さを知りました…。 言葉足らずな中、色々な推測をさせてしまい申し訳ございません…。 また、"を付けていなかったりと自分自身理解不足な点が多いまま質問をしてしまっていたこと等、勉強不足を実感致しました。 これから自分自身きちんと理解をしながら学習を続けていきたいです。
guest

0

ベストアンサー

怪しいところは多々ありますが、、、とりあえずこのコードを拡張するならばこんな感じでよいと思います
(s2も引数で渡される前提で)

fuction wait(s,s2,con){ Thread.Sleep(10); var r = con.ReceiveDAta(); var ret = 0; while( ret == 0 ){ Thread.Sleep(10); r += con.ReceiveData(); if ( r.indexOf(s) != -1 ){ ret = 1; } else if ( r.indexOf(s2) != -1 ){ ret = 2; } } return ret; }

このコードが動くかどうかはわかりません
あくまでもロジックとしての一例ということで

投稿2015/08/26 01:44

編集2015/08/26 06:28
takito

総合スコア3111

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

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

kanon962

2015/08/26 12:52

丁寧な回答ありがとうございます。 実際のケースにあてはめて実装してみたところ、無事この形で出来ました。 言葉足らずの中わかりやすい例を提示して頂きありがとうございました!
guest

0

これは本当に JavaScript ですか?
Thread.Sleep というAPIは聞いたことがありませんし、Google 検索してみると Java の API のように思えてくるのですが。

それからどこまでが分かっていてどこからが分からないというように具体的に分からないポイントを示した方が良いと思います。

投稿2015/08/26 00:30

think49

総合スコア18162

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

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

kanon962

2015/08/26 12:51

質問があまり的を得ていない質問で申し訳ありませんでした…。 他のかたがおっしゃっている通り、自分自身ネット等から拾ってきた情報を元に組み立ててしまっているので、理解がまだ足りていなく…言葉足らずですみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問