わがままプログラミング。
アプリケーションでもゲームでもパラメータは重要です。
ゲームはパラーメータ設定が複雑で莫大なコードから出来てるって想像できますね。
実際はゲームエンジンがやってくれてるでしょう。
今どきゲームの初期設定画面をいちいち書くのは芸がない。
マイクロソフトはパラメータのレジストリーシステムを構築しました。
アプリケーションの挙動を細かく管理するのに不可欠です。
一般アプリが使ってもいいようですね。
pythonの世界ではJSONが役にたちそうです。
JSONは外部ファイルを内部の辞書として読み込みのに便利。
アプリケーションには実行時パラメータは必須ですね。
一般には使わない隠れパラメータとかは普通です。
パラメータはアプリの挙動に影響を与えます。
パラメータ化はアプリの設計ではかなり重要。
メンテ性が上がるけど不安定にもなる。テストケースが増えます。
プログラムに内蔵して変更不可にするかパラメータとして変更可能にするか、
アプリによって事情はいろいろですが、商用アプリは多様な顧客ニーズに対応するためにパラメータが多いのが一般的。パラメーターが多い分複雑な傾向が高い。
極端に割り切れば定数はすべて外出し。
商用だと多言語化でエラーメッセージを内包することはありません。
ソースコードはロジックと必須な内部変数で書く。
すべての定数を変数として外に出して一括管理。
パラメータはデータフロー上も重要。
pythonだとタプルにすれば変更できません。
この作業は一人アプリでもかなり面倒なんですね。
まず外部ファイルに変数と初期値を定義しないといけません。
それから初期値を外部から読み込むコードを作成し実行。
これは完全に二度手間。
ルーチンとしては大したことなんですが私には嫌な作業ですね。
まず、パラメータをJSONファイルとして作ります。
{”name":"中島みゆき”,"tbl1":[1,2,3,4]}
Json形式だとリスト型も辞書型も初期値として外部から設定できます。
それから、pythonコードを書く、
name=json("name”) jsonファイルの”name"を引っ張る
tbl1=json("tbl1")
個人レベルアプリならこれで十分。一般には設定画面を設ける。
大した作業に見えませんよね。後はJson側の定数を変えればいい。
これが何事もなく進めばいいんですが開発してると増えたり減ったりするんですよ。
数が多くなるとJSON側とソース側を同期して維持するのがいやになる。
今回作ったアプリはGUI主体でパラメータにした変数は1000を越えました。
内包した定数もまだ多いです。
入力ー>処理ー>出力
|
パラメータ(副作用を誘引するので関数型では禁止)
私は彩りだとおもうけどね。
そして最終に出た答えは「JSONからpythonソースを作る」でした。
プログラムの最初で変更があったJson ファイルを読みます。
変数名と設定値が判るのでpythonソースに落とす。
そのpythonソースをロードする。と内部空間に初期値のテープルができる。
インタプリターpythonの得意技ですね。
例えば{"func":act.get()}と書いてあれば func=act.get()となって
実行する関数をパラメータで決めれる事になります。アプリとしては危うい構造。
こんなアプリ組んだらまず叱られます。遊びではいいけど業務用は許されません。
そんなアプリはドキュメントが書けないので門外不出。
パラメータ次第でアプリの挙動をかなりコントロールできることになります。
学習ってのはパラメータを変えながら処理を繰り返すのでこのやり方は好都合。
オブジェクト指向ではクラスに継承の概念がありますが、
パラメータ駆動にするとアプリレベルに継承概念を持ち込む事が出来ます。
GUIを使わないのでその分高速。