プチコン3号 SmileBASIC コミュニティ投稿ねこはち neko800012015/01/08 21:55:19ちょっと疑問なのですが、whileやuntil等の繰り返し系の制御の中からGOTOで抜けた場合、それらの状態を保っている内部処理ってプログラム終了まで生きたままなのでしょうか? 今のところ使ってる分には挙動に影響がないのですが、なんとなく気持ち悪い感じがしますよね?6そうだね 26返信プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿ASA fusuian2015/1/8 22:09そこ、僕も気になってWHILE文からGOTOで抜けるテストプログラムを走らせてみましたが、数分ほっとくくらいでは落ちませんでした。 普通に使う分には問題ないようです。 サブルーチンのFOR〜NEXTからRETURNで抜ける書き方は、昔のBASICでは禁じ手でしたがmk2ではオーケーなので、そのあたりは対応がされているのだと思います。 2そうだね プレイ済み2017/11/04 00:25:46に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿みけらんジェロ chikuwaxx2015/1/8 22:14誤動作防止の為にちゃんとWHILEとWEND、FORとNEXTなどは完結させた方がいいかと。 洗面所の蛇口の水を止めないまま出て行ってしまう気分です。1そうだね プレイ済み2017/11/04 00:25:46に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿ねこはち neko800012015/1/8 22:22>>ASAさん なるほど、数分回しても影響がないって事は、何かを保っている感じの処理ではないって事ですかね 単純にラベル+IFで回しているのと同じ処理をしているのかな? >>みけらんジェロさん そうですね。BREAKでも説明文に”強制的に”って一語があるだけで使うのを嫌ってしまいます 一本の流れの上の処理ってのは、リストを眺めていると気持ちいいですからね0そうだね プレイ済み2017/11/04 00:25:46に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿コータ[quota] W.D.WE2015/1/8 22:251段だけなら、BREAKで抜けられますが、ネストが深い場合は、GOTOを使った方がすっきりするような気がします。1そうだね プレイ済み2017/11/04 00:25:46に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿ASA fusuian2015/1/8 22:32蛇口はSmileBASICが締めてくれているのだ、と考えていますが、他の処理系で困る可能性はありますね^^; 僕のミニゲーム程度なら、ゲームのメインループを抜けること即ゲームオーバーなので、WHILE 1ループからBREAKで書いちゃいます。1そうだね プレイ済み2017/11/04 00:25:46に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿ねこはち neko800012015/1/8 22:33>>コータさん 抜けた瞬間に状態を開放してくれているのが明確に解っていればそれもアリだと思いますが、見えてない部分で何をしているのかを考えるとなんだかモヤモヤした気分になります0そうだね プレイ済み2017/11/04 00:25:46に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿でんぺん DENPEN2015/1/8 22:36通常は大丈夫なはずです。(バグでないかぎり) ただFORやWHILEとかのループからは出来るだけBREAKで抜ける方がいいですね。でもRETURNも別に普通ですよ。 GOTOに関してはコータさんの言うような限定されたパターンで使用するのがベストですが、ケースバイケースなのとBASICなので個人的にはソースがわかりにくくならない範囲であれば許容範囲かなと思ってます。1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿ねこはち neko800012015/1/8 22:37>>ASAさん 高級言語のモヤモヤ感は親切設計から生まれるってやっと気付いたよ!0そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿コータ[quota] W.D.WE2015/1/8 22:396段のFORループを作って、最深部から10000000回脱出を試みましたが、特に問題は発生しませんでした。ちなみに、これらの外側はREPEAT/UNTILでループさせました。1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿ASA fusuian2015/1/8 22:40ループをGOTOで抜けると、やっぱり蛇口はちゃんと締めてくれるようです。 (サンプルは二つめのWENDでエラーになる)1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿でんぺん DENPEN2015/1/8 22:42ちなみに多重ループからGOTOで一気に抜けるのは、GOTOが極端に嫌われているC言語などでも唯一の例外としてアリとするという考え方もあるようですよ。1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿ねこはち neko800012015/1/8 22:43ふーむ。どうしてもコードが思いつかない場合にはGOTOで抜けるのもsmileBASICだからと割り切れればオッケーみたいですね1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿bigslope bigslope2015/1/8 22:51「WHILE~WENDの中に入った時点で、自分がループの中にいるってフラグを立てているのかな?」と思って、ちょっとこんな実験を。 GOTOでループを抜けた場合、フラグが解消されないのだとしたら、下のBREAKの所に来た時点で、WENDの直後まで逆戻りする(そして2回目のBREAKでエラーになる)はず。 実際は、BREAKがSyntax Errorになるので、最初に構造のチェックを行い、それで問題が無ければ実行するという事を行っているだけで、フラグ立てはやっていないみたいですね。1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿おかっぺ Japanese_WASABI2015/1/8 22:53とても勉強になりました。 そして、このあとも話題が続くなら読みたいので、コメントさせて頂きました。1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[15]親投稿けい kei0baisoku2015/1/8 22:53mk2の初心者講座で「FOR文からGOTOで抜けるとメモリリークを起こす」とはっきり書かれていたのでこの組み合わせだけは避けていましたが、コータさんの検証結果を見ますと3号では解消されたようですね。 Cでも、多重ループから抜ける目的の時だけはGOTOの方がスッキリしますね。そのような状況が意外と滅多に無いですが。1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[16]親投稿ASA fusuian2015/1/8 22:55昔のBASICのGOTOがマズかったのは、行番号全部が飛び先になる仕様のせいだったと思うのです。 行番号が廃され、飛び先としてラベルのみを指定するプチコンでは、昔ほどのスパゲッティにはならないはずなんですよ。 mk2時代はENDIFがないせいでねじれたコードを書く場面もままありましたが^^;1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[17]親投稿ねこはち neko800012015/1/8 22:58>>bigslopeさん 単純にコンパイル時にWENDやBREAKを見つけたら直前のWHILEを探して、分岐処理を置く、みたいな事なのかもしれませんね これだとフラグいらないですし0そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[18]親投稿ねこはち neko800012015/1/8 23:02もしかしたら、昔からの刷り込みで自分に縛りをかけているってだけの事なのかもしれませんね エラーが出なけりゃそれでいいじゃん!って考えられるくらい大物になりたいです…1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[19]親投稿べー mmmggg2015/1/8 23:10こんな風にFORに行かないでのNEXTも動くので、只のSTEP+GOTOと同じ処理なんでしょう1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[20]親投稿てらこや actorbug2015/1/8 23:14ループ内にGOTOで飛び込んでもエラーにならないことから推測すると、最初にプログラムを読み込んだ時点でFOR-NEXTなどの対応を取った上で、内部的にIFとGOTOに書き換えているのだと思われます。2そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[21]親投稿ゆうたん yu-tan-sama2015/1/8 23:47ループなら特別なことはやってないと思うなぁ 内部的にはgotoと同じでいいはずだし、何かフラグ的なものが必要でもグローバル変数みたいに静的に持つだけでいい プチコンで危険なgotoの使い方ってなると… gosubで飛んでからreturnを使わずgotoで戻るとか?(できるのかな?)1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[22]親投稿ねこはち neko800012015/1/9 0:10ループに限らず、プチコン3号の処理がどうなっているのかを推測しあうだけでも、下手なADVゲームより面白いですね これで1000円って安すぎ!1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[23]親投稿でんぺん DENPEN2015/1/9 0:16最近ちょっと思うんですが、内容の割には1000円って破格ですよね。でもこういう系のソフトは万人に受けるわけではないので、そんなに売れてないかもしれないので、そうなるとスマイルブームさんは大丈夫かと少し心配になったりもします(^^;2そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[24]親投稿けい kei0baisoku2015/1/9 0:29割りと真面目に、経産省から補助金とか出てもいいんじゃないかと思うんですよねー(´з`)2そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[25]親投稿おちゃめ ochame_nako2015/1/9 0:53スタック用のメモリが減っていくのでそのうちStack overflowになりますが、同じFORやREPEATやWHILEを何度実行してもスタック用のメモリは消費されないためGOTOで抜けても問題はないと思います。 大量のFORやREPEATやWHILEを実際に記述しない限りは大丈夫でしょう。1そうだね プレイ済み2017/11/04 00:25:45に取得
プチコン3号 SmileBASIC コミュニティ返信[26]親投稿UDADTO udamasahisa2015/1/9 1:20僕はそもそも、FOR~NEXT文にも限らず、WHILE~WEND文・REPEAT~UNTIL文でGOTOを使いませんね。そういえば、あまり気にしてなかったな…。1そうだね 未プレイ2017/11/04 00:25:45に取得