プチコン3号 SmileBASIC コミュニティ投稿マシュマロ junmal2014/12/23 09:19:25質問”関数”とはどのようなものなのでしょうか? 初歩的な質問で申し訳ないのですが、どのようなものか今一つ分からないのです>< DEF文を使い、サブルーチンよりも便利~等は良く聞くのですが、どのように使い、どういう場面で便利と感じるのか、どうしてそこまで便利と言われるのかという事をお聞きしたいです。 分かりづらい文章ですが、親切な方は教えていただけないでしょうか8そうだね 27返信プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿おかっぺ Japanese_WASABI2014/12/23 9:37マシュマロさんの作品、ニャン吉の冒険はGOSUBで作られているので、以下のような経験がありませんか? FORループの中からGOSUBした先で、FORループしたら同じ変数を使っていたので、動きが変になっちゃった! あるいは、変数が増えすぎて、変数の意味していた内容を忘れちゃった。 とか。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿おかっぺ Japanese_WASABI2014/12/23 9:41ユーザ関数、ユーザ命令を知るには、GOSUBを理解していると、便利さがわかるので、もし、この投稿を見た人で、DEFに興味があるけど、GOSUB もわからない、と言う場合は、GOSUB を勉強してみてね。 それでも、とっても便利で感動するから。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿おかっぺ Japanese_WASABI2014/12/23 9:44本題、DEFで定義出来るものを、プチコンでは、ユーザ命令、ユーザ関数と呼びます。 ユーザ命令はGOSUB の様に処理が飛んで行って、終わったら帰ってくるもので、最初はこちらがわかりやすいと思います。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿おかっぺ Japanese_WASABI2014/12/23 9:48GOSUB との違いは、DEFの中で作った変数はDEFの中でしか見られないと言うことです。 DEF ORDER VAR I=5 END I=3 PRINT I ORDER PRINT I まずは、上記を実行してみて下さい。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿おかっぺ Japanese_WASABI2014/12/23 9:50DEF~ENDが、GOSUBで言うところのラベル~RETURNに相当し、呼び出しはDEFで定義した名前、ORDER と書くことで行います。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿おかっぺ Japanese_WASABI2014/12/23 9:55上記をGOSUB でやると、以下のようになりますね。 GOTO @MAIN @LABEL VAR I=5 PRINT I RETURN @MAIN I=3 PRINT I GOSUB @LABEL PRINT I 0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿おかっぺ Japanese_WASABI2014/12/23 10:00DEF とGOSUB で結果が違うのがわかりますでしょうか? DEFの中で作られた変数は、DEFの外の世界の変数とは同じ名前でも別物になると言うことです。 ※プチコンでは、DEFより上で変数を作ると、その変数はDEFから参照書き換え可能。DEFより下で変数を作ると、その変数はDEFから参照書き換え不可。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿おかっぺ Japanese_WASABI2014/12/23 10:071つ前のコメントは難しいですが、最初に書いたDEFを使ったプログラムのDEF~ENDを今度は、プログラムの最後に移動させて、動かしてみて下さい。 また、値が変わりましたよね? ちょっと混乱しやすいところなので、 慣れるまでは、以下のルールを守っておけば、扱いやすいと思います。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿おかっぺ Japanese_WASABI2014/12/23 10:12主人公の座標など、ずっと覚えておきたいものは、DEFの前に作っておく。 ただし、FOR文のインデックスなど、使い捨てにしたい変数は、必ずDEFの後に書く。 こうすることで、冒頭に書いたGOSUB の不便な点を回避することが出来ます。 (使い捨ての変数は、DEFに影響しないのでFOR文に同じインデックスを使えるし、使い捨てなので、変数の意味をずっと覚えておく必要も無くなる)0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿おかっぺ Japanese_WASABI2014/12/23 10:15実際に使ってみると、使い捨ての変数をDEFに渡したい場合や、DEFの中で作った使い捨ての変数を返して欲しい場合があるので、その時は人のプログラムか説明書を見てみてね。 (それでも、わからなければ、またきいて下さい。)0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿おかっぺ Japanese_WASABI2014/12/23 10:18ユーザ関数は、考え方はユーザ命令と同じですが値が1つだけ帰ってきます。 DEF TASIZAN(L,R) RETURN L+R END PRINT TASIZAN(5,3) を試してみて下さい。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿おかっぺ Japanese_WASABI2014/12/23 10:22また、楽しいゲーム待ってますね♪ 3つ前のコメントに一ヶ所、訂正があります。使い捨ての変数はDEFの後か、DEFの中で初めて使う様にしてください。が、正しいです。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿おかっぺ Japanese_WASABI2014/12/23 10:24長々書いてしまいましたが、あまり、説明がうまい方でも無いので、もしわからなければ、その旨、書いちゃってください。 きっと、誰かが代わりに説明してくれるはず♪0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿おかっぺ Japanese_WASABI2014/12/23 10:27ごめんなさい! 4つ目のコメントのDEFは、以下にしてください。 DEF ORDER VAR I=5 PRINT I END PRINT命令が抜けていました・・やっちまったー0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[15]親投稿マシュマロ junmal2014/12/23 10:32説明ありがとうございます! 現在、煙を吐きながら解読中です(;‐ω‐) もし分からないことが出てこればまた、お願いします0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[16]親投稿マシュマロ junmal2014/12/23 10:45あ、やはりそうでしたかw 結果が変わらないので、”?”ってなってました(;'∀') ユーザー命令についてはなんとなく理解できましたo(*'∀'*)o 同じ変数を使えるのは確かに便利ですね~0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[17]親投稿マシュマロ junmal2014/12/23 11:37ふむふむ…大体のことは理解できました! 説明感謝です<(_ _)> しかし、関数の使いどころがなかなか難しいですね>< 簡単な、関数を用いた実用的なプログラムってご用意できますか? 先ほどから我が儘ばかりすみません0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[18]親投稿おかっぺ Japanese_WASABI2014/12/23 11:42DEF BETWEEN(V,MIN,MAX) IF V<MIN THEN RETURN MIN IF MAX<V THEN RETURN MAX RETURN V END 多分、これで範囲内の値しか帰って来ないから、境界チェックで便利だと思います。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[19]親投稿おかっぺ Japanese_WASABI2014/12/23 11:47例えば主人公のスプライトが画面外に出られない様に、X=BETWEEN(X,0,400-16)みたいにすればスプライトは画面外に出られなくなりますよ♪0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[20]親投稿マシュマロ junmal2014/12/23 12:12返信遅れましたすみません なるほど。。確かにこれなら画面外判定が出来ますね♪ しかし、理解力が足りないせいでいまいち便利さが分からないです;ω; 別にユーザー定義命令or関数は、使わなくても良いのではないかと思ってしまいます><0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[21]親投稿おかっぺ Japanese_WASABI2014/12/23 12:22不思議に思うのも仕方ないかもしれません。 実はプログラムの世界では、不便にすることでバグが減る事があり、DEFもその一種の様な性質があります。 例えば、OPTION STRICT。不便になるだけに感じますがバグを未然に防いでくれます。 ユーザ命令、関数も同じ様に意図せず変数を壊してしまうのを防いだり、見た目がキレイになる、くらいのものです。でも、プログラムが大きくなるほど大事さがわかってきますよ。 昔のBASICには無かったし、使わないなら使わないでも良いと思います。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[22]親投稿ASA fusuian2014/12/23 12:50今はわからなくてもOKです。 でも、ある程度大きなプログラムを書いて、なんだかデバッグが大変だと思ったときに、このトピックを読み返すとピンと来るかも知れませんよ。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[23]親投稿マシュマロ junmal2014/12/23 12:55なるほど。。やはりプログラムは奥が深いですね(;'Д')ゴクリ 今回のことを頭の片隅に置いて今後のプログラム作りに活用していこうと思います。 ここまで付き合っていただきありがとうございました! 0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[24]親投稿でんぺん DENPEN2014/12/23 13:59関数はまだともかく、ユーザー定義命令はGOSUBから置き換えられるしGOSUBより便利なので代わりに使っていくのがいいと思いますよー0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[25]親投稿おかっぺ Japanese_WASABI2014/12/24 6:45ごめんなさい、今、ふと気付いたのですが、変数の名前を変えられる、と言うのがDEFの1番便利なところかもしれません。 通常、主人公と敵の変数は、別の名前になっていると思いますが、DEFを使うと(先程のユーザ関数の例の様に)DEFの前後で別の名前で扱うことが出来ますね。 GOSUBでこれをやろうとすると、呼び元で一旦、編集様変数に主人公や敵の座標をコピーして、たGOSUBして、戻ってきたら編集様変数から主人公や敵の座標にコピーして、とたくさん書かなきゃいけないから、変数名の変更が簡単に出来るのも、1つの特徴かなあと思います。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[26]親投稿おかっぺ Japanese_WASABI2014/12/24 7:04あとは、DEFを上手に設計しておくと、内部ロジックの変更が外部に影響しない、と言うのもあると思うけど、ちょっと説明が難しいなぁ。 親投稿に共感した方々って、この投稿に気付かないよなぁ。最初の回答に不足があったので、申し訳ないッス。0そうだね プレイ済み2017/11/04 00:50:55に取得
プチコン3号 SmileBASIC コミュニティ返信[27]親投稿マシュマロ junmal2014/12/24 19:56なるほど。。確かに同じ変数を何度も使えるというのは便利な点ですね。他の場所で使ってないか調べる必要がないというのは手間が省けて便利ですね^^/0そうだね プレイ済み2017/11/04 00:50:55に取得