投稿
プログラムを作ってて行き詰って質問して「今日覚えた事」を。 DEFで宣言した命令の中の変数の値を保持したい場合は同じ変数をDEFの外でも宣言すれば可能。 但しローカル変数扱いで無くなる為注意が必要。 先日公開したニコ風コメントをDEF用として作ってたら同じ位置で表示し続けてたので。
9そうだね
プレイ済み
返信[1]
親投稿
例えば、 WHILE 1:VSYNC 1:K:WEND DEF K P=P+1:PRINT P END これだとPがずっと1を表示しますが、 P=0 WHILE 1:VSYNC 1:K:WEND DEF K P=P+1:PRINT P END これだとPが加算され続けていきます。 この疑問にアドバイスを下さった皆様に改めて感謝いたします。
0そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
「DEFで宣言した命令の中の変数の値を保持したい場合」というのは「DEF内でグローバル変数を使いたい場合」の方が意図が伝わりやすいと思います。 恐らく初心者向けに分かりやすい記述にしたのでしょうが、グローバル変数が分からない人だとローカル変数も分からないと思います。
0そうだね
プレイ済み
返信[3]
親投稿
そうですね。なんか言葉を探してましたがいいのが見つからない状態でしたので。補足ありがとうございます。
0そうだね
プレイ済み
返信[4]
親投稿
ちなみにDEFの中でVARで宣言すれば、同じ名前の変数でもローカル変数になりますよ。 この辺はOPTION STRICTをつけた方がよくわかるかもですね。(つけないとDEFの中でグローバル変数定義されてないのを使えばエラーだし、DEFの中でちゃんと定義すればそれはローカル変数として扱われるし)
1そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
DEF内で宣言もしくはDEF外で未使用の変数→DEF内でローカル変数として使える DEF外で宣言もしくは使用した変数→DEF内でグローバル変数として使える ローカル変数とグローバル変数を確実に使い分けるためにはちゃんと変数を定義して使うのがベターです。
0そうだね
プレイ済み
返信[6]
親投稿
けい kei0baisoku
でんぺんさんとおちゃめさんのコメントで十分な気もしますが、見てる初級者の方向けに補足を。 OPTION STRICTが無い状態だと、変数を使おうとした時点で裏で自動的に作られます。 つまり、 (1)DEFの外に既に変数Pがある場合→そのPを使う (2)まだ変数Pが存在しない場合→こっそり「VAR P」した上でたった今作ったPを使う 少し大きいプログラムだとPがどこで作られたものか自分でも分かりづらくなるため、そういう面からも作りやすくするためにOPTION STRICTを付けるのはオススメです。
0そうだね
プレイ済み
返信[7]
親投稿
突然ムスカのコメント訪問。ではなく、第13回東方公開キー欲しいコメント。ここでこんなコメント出しても意味ないかも知れないが・・・
0そうだね
未プレイ
返信[8]
親投稿
イカ ikasan1830
DEF使いこなしてる人ってあこがれるわあ。
0そうだね
プレイ済み
返信[9]
親投稿
DEFも『理解すれば』そこまでややこしいものでもないんですが 理解するまでが少しかかりますよね 繰り返し書くのが面倒な処理をまとめたり こういう命令欲しいんだけど無いんだよな~と思う処理を自分で書けるのが関数なので覚えると便利です DEFをモノにするには小さいテストプログラムをいくつも書いて動きを調べるのが良いですよ ↓テストプログラムの例 DEF ADDDQ S$ OUT RET$ RET$=CHR$(34)+ADDS$+CHR$(34) END S$="もじをダブルクォートでかこむテスト" ADDDQ S$ OUT S$ PRINT S$
1そうだね
プレイ済み
返信[10]
親投稿
↑のは引数あり戻り値ありのシンプルな書き方です 戻したい値が2つあるならOUTの後ろに,で区切って変数を増やせばいいし 戻したい値が無いならOUT以降書かなくていい 引数も同じです 戻り値も引数も要らないなら書くのは関数名だけでオーケー 呼び出すときはDEFの行をまるまるコピーしてDEFだけ削れば呼び出せます 何を関数にすると便利かは他の人のプログラムを参考にすると少し見えてくるんじゃないかと思います
0そうだね
プレイ済み
返信[11]
親投稿
あ、サンプルにミスがあったので訂正します RET$=CHR$(34)+ADDS$+CHR$(34) となっているのですが 実際はRET$=CHR$(34)+S$+CHR$(34) が正解です 失礼しました
0そうだね
プレイ済み
返信[12]
親投稿
イカ ikasan1830
おお!なんとなくわかった気が! でも、やっぱり身に付けるには自分で打ち込んで覚えないと駄目ですね。やってみます。
1そうだね
プレイ済み