投稿
omusubi▲ omusubi_p
あなたが便利な機能をまとめたユーザー関数・命令群を作ったとします。ライブラリとして皆に使ってもらう時、どのインポート方式を採用しますか? USE + 初期化関数・命令 ? EXEC ? USE + 初期化サブルーチン ?
1そうだね
プレイ済み
返信[1]
親投稿
omusubi▲ omusubi_p
USE + 初期化命令 の例
0そうだね
プレイ済み
返信[2]
親投稿
omusubi▲ omusubi_p
EXEC の場合
0そうだね
プレイ済み
返信[3]
親投稿
omusubi▲ omusubi_p
USE + 初期化サブルーチン
0そうだね
プレイ済み
返信[4]
親投稿
omusubi▲ omusubi_p
理由も付けていただけると助かります
0そうだね
プレイ済み
返信[5]
親投稿
Godot orz_127
単体実行も可 別スロットに置いて参照すればライブラリに、的なものにしたい。 別ツールとしても動かせるし、とか そのまま実行すると最後についてる使用サンプルが動くよ的な。 となると、EXECの選択肢がなくなる^^; それがなくて完全にライブラリ的な部分だけとわりきればどっちでも都合のよいほうでいいかなと思う今日この頃ですw とりあえずガイドブックの 「COMMON DEF」の説明に 「…呼び出すユーザー定義命令、関数が書かれたプログラムSLOTを、[USE]や[EXEC]命令を使って使用可能にしておく必要があります。」と言うあったので。
1そうだね
プレイ済み
返信[6]
親投稿
れい rei-nntnd
コピペ
0そうだね
プレイ済み
返信[7]
親投稿
けい kei0baisoku
以前に当たり判定ライブラリを自分で作った時は「USEのみ&単独で実行したらサンプル」の方式を採用したのですが、実際に自分で使う時の事を考えると、多分コピペで持ってきます。 理由は、一番は1ファイルだけに抑えて管理をシンプルにしておきたいからです。 (例えば、1ファイルに収まらない時点で専用プロジェクトが必要になるのが確定するなど) あとは、他のプログラムを動的に読んで使ってることで、それが更新された時に勝手に挙動が変わるのを避けたいからや、別スロットは参考プログラムの置場所や便利ツールの使う場所とかでも消費するのでなるべく空けておきたいから、などです。 あとは単純に、別スロットとの連携がメンドクサイのもあるかもしれません………(-ω-)
1そうだね
プレイ済み
返信[8]
親投稿
自分用のコピペライブラリは作ってます。
0そうだね
プレイ済み
返信[9]
親投稿
ヨッシー okkun2002
コピペ以外は全部かな? EXECで動かしても初期化して使えるようになる。 USEとルーチンでも初期化して使えるようになる。 USEとそのルーチンに飛ぶ関数でも初期化して使えるようになる。 みたいな感じで、自分の関数ツールを実際に作ってます。 スロット0で実行したときはサンプルが動きます。
0そうだね
プレイ済み
返信[10]
親投稿
omusubi▲ omusubi_p
> Godot さん EXECは単体実行とライブラリとしての使用とが一緒になっちゃうのが欠点ですよね > れい さん、けい さん、でんぺん さん コピペも自分用や短くて単純な関数だとアリですよね。 コピペだと変数の衝突が起こり、それを毎回修正する必要があるので、条件としてはそれが出来る規模のものに限られます。質問では、中身の複雑な計算を知らない他の人が使うことを想定していましたので、コピペは除外しました。 >ヨッシー さん 私も、今回の質問に際してどのパターンでも通る形で書いてみましたが、結局そこに落ち着くのかも。いくつか知らないとハマる注意点はありますが、どれを採用するかに悩むくらいなら全然いい。 EXECで読み込むだけの時とサンプルが動く時の分岐法が分からないので、そこを教えてほしいです。
0そうだね
プレイ済み
返信[11]
親投稿
omusubi▲ omusubi_p
どの方式でも通る複合例。 実態としては、定義自体はサブルーチン方式で、関数やEXECではそのサブルーチンを呼び出すことで定義する仕組み。 関数内からサブルーチンを呼ぶのが特殊なのと、サンプル実行で定義した変数を使うには、初期化サブルーチンを上に配置しなくてはいけないところが注意点。
0そうだね
プレイ済み
返信[12]
親投稿
れい rei-nntnd
他人が使うことを想定してもコピペ。 むしろ他人が使うことを想定するからこそコピペ。 変数の衝突は関数にしとけばかなり減るし、短ければ問題にならない。 コードが大きい場合や複雑な場合は、公開手法を考える前にそのコードの設計を考えた方がいい。 大きくて複雑な場合、一般には処理に時間がかかる。 プチコンはスレッドも割り込みもないので、処理している間はフリーズする。 別スロットの共通関数で時分割処理を入れると複雑なコードがさらに複雑になる。 それなら粒度を再考して小さい関数群としたほうがいい。 USE使ったほうがいいケースは 時分割処理が簡単に入るか、フリーズしてもいい場合、巨大だけど高速な時だけ。 自分用に作ったライブラリで別スロットになってるのは 無限桁整数演算ライブラリとFFTライブラリくらいかな。
0そうだね
プレイ済み
返信[13]
親投稿
ナツキ natukin1978
USE+初期化サブルーチン かな 私の場合、スロット0がメイン。 スロット1に自作の単体テスト。 という構成でやりました。 EXECを使うという発想がそもそもなかった。 ライブラリみたいなのを作りたいと思った事はありますが、他所様の関数名と被る事が容易に想像できたので諦めました。 名前空間みたいなのが在れば良かったのですが……
0そうだね
プレイ済み
返信[14]
親投稿
おかっぺ Japanese_WASABI
USE+初期化関数、単独起動は使い方のサンプルに1票。 ライブラリは一元管理の意味もあるのかなと思います。 バグがあったときや、プチコンVerUpで動かなかったときに、ライブラリ差し替えで対応出来るとか。 もちろん、利用者さんが自己責任でコピペするのもありだと思います。
0そうだね
プレイ済み
返信[15]
親投稿
ヨッシー okkun2002
確か、BACKTRACEとCHKCHR$でスロットを見て0じゃなければ読み込むのが一番かな? 作った頃は知らなかったから(知ってたけどよくわからなかった)スロット名を検索してく方法をとったけど1と3に入ってたら困るので最初の方がいいかな?って思ってるのにあとの方法をまだ使用している(><) もっといい方法があったら教えてください。スロット探す以外でもないかなぁ。
0そうだね
プレイ済み
返信[16]
親投稿
けい kei0baisoku
そう言えばグローバル変数のこと忘れてました。 ただ、適切な名前をつければ大丈夫かな?と思います。 どちらにせよCOMMON DEFは衝突しない名前をちゃんと考えて付けますし。
0そうだね
プレイ済み
返信[17]
親投稿
使う側からの意見ですが、プログラムの前の方に、プロジェクト名とプログラム名(出来ればルーチン名も)を入れておくと、ライブラリをそこに読み込んでくれるもの(自動コピペ)があると楽かなと思います。理由は、ライブラリが増えてきたり、バージョンが増えてきたりしたときにスロットが不足しないか気になるためです。
0そうだね
プレイ済み
返信[18]
親投稿
MIKI ifconfig
れいさんの楕円ライブラリ見たとき、全部の変数に型指定が付いてるのをみて、あーー、コピペで使えるようにするってこういうことかと目鱗でしたね。 つまり option defint とか期待できないってこと。 flood fill 公開したときはそれにならって型つけて、 グローバル変数も全て ff_ で始めるようにしました。
0そうだね
プレイ済み
返信[19]
親投稿
れい rei-nntnd
いちおう名前空間はある。 スロット毎にグローバル変数別(それグローバルじゃないし)にはなってるし、def毎にべつにもなってる。 作り込み甘くてアチコチバグあるのと、ドキュメントがないのが問題。 いくつかまえのトピでgodot氏困ってるのとか。 一応使えなくはないんだけど。 あたりまえだけど、構造化に関してはC++以下といったレベルだし、 コーディング規約ととのってないから他人に使ってもらえるライブラリってのはまだ無理かなぁ プリプロセッサに期待してたんだけど、方向性違うっぽいし。 プチコン機能拡張するならこの辺だと思ってた。
2そうだね
プレイ済み
返信[20]
親投稿
ナツキ natukin1978
自動コピペいいなぁ。使いたい関数を選んだら、その関数とそれに依存する関数や変数を自動で抜き出してくれる。 以前、私のツールで使っているファイル選択処理だけを抜き出して公開した事があったのですが、依存する関数を抜き出すのが大変だった。 こういう作業は手作業でやるべきではないですね。コンピューターにやらせるべき。
0そうだね
プレイ済み
返信[21]
親投稿
omusubi▲ omusubi_p
> れいさん ライブラリの中身のことは具体的に考えていなかったけれど、モノによって手段を変えることになるのは、その通りですね。 スロットまわりは実装優先で作ったとの話もあり、現状のプチコンできちんとしたライブラリを構成するには改善されるべきところも多いです。私も、これでガチなやつを作ろうとは思えないかなw。そういう改善の要望について、こういった議論を通じて具体的に現状皆がどう使っていてどこに問題があるのかフィードバックをあげられると良いです。 > ナツキさん 私もEXECを使うことは考えてなかったですね。 でも、公式がEXECをライブラリの呼出に使うとしているのならば、それを汲んで作るべきとも思い悩みどころです。 スロット跨ぎのサブルーチンは、限定的に使わないとスパゲッティ化のもとですが、初期化の解決法としてはベターな折衷策だと考えています。
0そうだね
プレイ済み
返信[22]
親投稿
omusubi▲ omusubi_p
> おかっぺBEERさん 初期化関数は配列初期化の問題がクリアになればまだ安心して使えるんですけどね。 おかっぺさん含め、ライブラリの単独実行でサンプル起動という声が結構あるのは意外でした。ライブラリは単独で使うものではないし、他のプログラムに組み込むことを考えると中に余計なコードを含んでいるのは邪魔なので、サンプルは別にしてほしいというのが私の考えだったからです。 > ヨッシーさん BACKTRACEはDirect専用命令でもありますし(何故かDirectでなくても動くけれどw)、使うとしたら個人的にこれしかないって時に限りますね。サンプル実行のためだけに一般的な方法として人に勧められるものではないですよね。 スロット番号ぐらい簡単に取得できて問題ないと思いますし、次のアップデートで取得できるようにしてくださいと要望しとくかな。
0そうだね
プレイ済み
返信[23]
親投稿
omusubi▲ omusubi_p
> けいさん 何でもかんでもモジュール分割(ライブラリに分ける)すべきでもないですから、コピペでも管理できる範囲ならば問題ないと思います。 どの段階で分けるのかは色々と流派があって確定的なことは言えないですが、ライブラリにまとめることに限定すると、プログラムの構成やデータ整理が固まった段階になるので、頻繁に改変が必要な時はまだライブラリ化する段階にないですし、また多少の中身の変更があっても、呼び出すインターフェース部分がコロコロ変わらないよう整えることを含めてライブラリ設計だと思います。
0そうだね
プレイ済み
返信[24]
親投稿
omusubi▲ omusubi_p
> コータさん 3号のスロットという4か所だけに限定されるような仕組みは過渡的なものだと考えているので、プチコンの次期verで順当に進化すればもっと一般的なインポートの形になるのではと思っています。なので、スロットが足りなくなって自動で調整してという規模にもなると、もう3号でやる範疇じゃないかなと。 あぁ、でも、私も機能で見たら別々にしたいところを、使う時にこれ一つのためにスロット埋めるの勿体ないからってやってますねw 自動コピペのアイデア自体も便利そうですね。作る時は別スロットにガンガン分けて書いておいて、後から自動で一つにまとめてくれるみたいなこともできそう。
0そうだね
プレイ済み
返信[25]
親投稿
omusubi▲ omusubi_p
丁度、ほしけんさんの漢字ライブラリが良い感じになっていて、色々参考になりそうだと思った。 組み込みやすいようにサブセット化ツールまで付いていて、皆がここまでしなくてはいけないかとなるとハードル高いけれどw
0そうだね
プレイ済み