基本的なプログラムの流れについて

24 views
Skip to first unread message

cafe...@gmail.com

unread,
Mar 8, 2017, 10:50:24 AM3/8/17
to 日本コロナの会
基本的なプログラムの流れについて質問です。
私はBASICやCOBOLみたいなインタプリタ言語しか使えないので、プログラムは上から順に下に流れていくものと思っています。
coronaSDKも同じと考えてよいのでしょうか?

例えば、

--abcに3を代入

local abc = 3

--abcの数値を表示

local abcde = display.newText(abc, _w/2, _h/2, nil, 30)
        abcde:setFillColor(192, 192, 192)

--abcを消す

abc = nul

この状態で、この後もプログラムが続くと仮定した場合、abcは消えたままになるのでしょうか?
また、このプログラム全体を abc.luaとした場合、別の.luaにgotoSceneで移動して、またabc.luaに戻った場合、abcには3が入って表示された後に消去される一連の動き、つまり初期状態に戻ってプログラムが継続して動くのでしょうか?

そのメモリ管理?で詰まっています。
アドバイスよろしくお願いいたします。


C.C.

unread,
Mar 8, 2017, 11:37:34 AM3/8/17
to coro...@googlegroups.com
かなり久しぶりの ML ですね、cafeyuuma@ さんこんにちは C.C. です (^^;;

まず、BASIC や COBOL はコンパイラ系もインタプリタ系も両方あります。
最近では殆どコンパイラかビーコードコンパイラと呼ばれるタイプが主流です。

また、プログラムが上から下に順に流れていくのは程んどの言語同じですが、
それは処理ラインが同じ場合で、メモリを介した遅延実行やエクセプションな
どがあれば、同コード上に別時間軸の別処理ラインを記述する言語体系もあり、
これはインタプリタとかコンパイラの違いではなく言語仕様の違いが大です。

で、本題の CoronaSDK は Lua を使っていますが、cafeyuuma@ さんが書い
たようなコードの場合、変数ではなく即値がコピーされます。
詳しくは abcde の中をダンプしてみて頂ければわかりますが・・
 abcde.text = “3”
こんな感じに、文字列として格納されちゃってますので、コピー後の abc の
生き死には全く関与しません。

変数は、ライフタイムとスコープがあるので、それを意識するとわかりやす
いかもしれませんが・・
abc は関数に属しているローカル変数ですので、関数が終了すればライフタイ
ムが終了して削除されます、スコープも同じ期間です。
abcde はディスプレイオブジェクトで、ディスプレイグループに属しているの
で、ライフタイムはディスプレイグループに属しています、スコープはこの関
数終了で終わってしまって見えなくなります。
(この場合も死んだわけではないので無理やり見直す方法もあります)
ここでは、ローカル変数に入れているように見えますが、実際そこには指し
示すポイントのようなものが入るだけで、そこに実体はいないというのがポ
イントになります。

この辺りは、CoronaSDK というより Lua と言う言語の特性ですので、そち
ら系の資料を見るか動作した状況の中身を見て、どう動いているか判断した
方が良いと思いますが・・
って、話が長くなってしまいましたが、こんな感じでわかりますか? (^o^!




> 2017/03/09 0:50、cafe...@gmail.com のメール:
>
> 基本的なプログラムの流れについて質問です。
> local abc = 3
> local abcde = display.newText(abc, _w/2, _h/2, nil, 30)
> abcde:setFillColor(192, 192, 192)

cafe...@gmail.com

unread,
Mar 9, 2017, 7:52:07 AM3/9/17
to 日本コロナの会
CyberCatfish様、返信ありがとうございます。
ライフタイムとスコープの概念自体知りませんでした。
PC9801時代のN88BASICのプログラム知識と概念で無理やりcoronaのプログラムを組んでおり、
NULしたはずのオブジェクトが残っていたりして独学も限界にきてました。
1年越しの問題が解決しそうです。
もう少しLUAを勉強します。
ありがとうございました。


2017年3月9日木曜日 1時37分34秒 UTC+9 CyberCatfish:

C.C.

unread,
Mar 9, 2017, 12:28:25 PM3/9/17
to coro...@googlegroups.com
cafeyuuma@ さんこんばんわ C.C. です (^^;;

N88BASIC に反応してしまいました、リアル世代でございますw
僕もプログラムを PC8801 で習得した世代で、最初はマシン語やBASICでした
よねぇ、いやぁ懐かしい僕も全部独学です (^o^;;

BASIC の場合は全てグローバルでしたけど・・、他言語だとグローバル意外に
ローカルだったり、ライフタイムやスコープの違う変数やオブジェクトが出てき
ます、このあたりを意識しながら書いてみると、実は大した違いには思えなくな
りますので、気楽に気楽にw

そうそう、環境何使ってます?

僕は最初はテキストエディタと自前のデバッグツールとか組んでたんですけれど、
色々使った挙句、最終的には下記のツールを使うようになってます。
これ結構便利です、ブレークポイントで止めて変数の中身を見るといった
通常の IDE ができるようなことはできますし、途中で止めて中身が見れれ
ば、どこまで生きてて何処でみられなくなるのかとか、簡単に確認できる
ようになりますよ v(^o^ ) おためしあれ。



2017/03/09 21:52、cafe...@gmail.com のメール:
ライフタイムとスコープの概念自体知りませんでした。
PC9801時代のN88BASICのプログラム知識と概念で無理やりcoronaのプログラムを組んでおり、
NULしたはずのオブジェクトが残っていたりして独学も限界にきてました。

cafe...@gmail.com

unread,
Mar 10, 2017, 5:48:27 AM3/10/17
to 日本コロナの会
CyberCatfish様

素晴らしいツールを教えていただき、ありがとうございます。
私は当初は桜エディタを使っており、今はGeanyを使っています。
プログラムの処理の端にprintで印をつけたり、変数の中身を表示させたりして確認してました。
教えていただいたツールでさらなるレベルアップが見込めそうです。

昔はインターネットなどなかったので、本屋でプログラムの本を買う位しか学ぶ手段がなかったですよね(お金持ちの方はパソコン通信がありましたが・・・)。
それに比べれば、本当にいい時代になりました。
ありがとうございました。


2017年3月10日金曜日 2時28分25秒 UTC+9 CyberCatfish:
Reply all
Reply to author
Forward
0 new messages