メッセージ(文字列)管理
なんの事やらな表題が続きます。
プログラムと言うものは、目指すところは変わらなくても、作り始めてから大幅な変更をしたくなる(あるいは必要が出てくる)事が良くあります。
現在リリースしているゲームブックアプリは、コンティニュー機能のみの簡略化した(そしてテスト的な)アプリだったので問題にならなかったのですが、機能追加版はユーザに対するメッセージ表示の必要性が出てきて、少々面倒な事になっています。
むしろ簡略版ゲームブックでは、『選択肢を選んでください』以外のメッセージが出てこないので失念していたのですが、シナリオやページごとのカスタマイズを考えていた以上、もっと早くから取り組むべき問題でした。
ここを見ているのがどういう方なのか判らないので、プログラム経験がほぼ無い方向けにも判るように説明がんばります。
文字表記が全くないアプリと言うものもあるかと思いますが、多くのアプリには何らかの文字が表記されていると思います。
ゲームブックアプリで言えば、ボタンに「次へ」や「あなたの攻撃」等の文字を表示した方が判りやすいです。
プレイヤーが見るのは、『そこ』に書かれた文字な訳ですがプログラム的には
・『そこ』に直接、文字列をそのまま表示する
・『そこ』の表示と、ある変数を紐づけてその値を表示する
の2つのやり方があると思います。
前者は圧倒的に楽ではあるのですが、変更するときの難易度の高さと似たような表示な他の部分と違う表示になる恐れから、あまり好ましくない事も多いです。
もう少し具体的に書きます。
エラーのたびに『エラーです』とメッセージを出すことにしたとして、テストの時に『エラーかも?』と表示が出た場合、その部分の表示修正だけなら難しくはないかもしれませんが他に記述ミスがないのかを考えるとチェックと修正が困難かも知れません。
また表記を『エラーだよ』に変更しようと思うと、すべての箇所を(見落としなく)変更しないといけないので、これも面倒ですね。
また少し意味合いが違いますが、ユーザに見えないプログラム内であっても文字列を直接使うのは面倒なエラーの原因になることがあります。
『有る変数の値が"i"だったら次の処理を行う』と書くつもりが
『有る変数の値が"I"だったら次の処理を行う』と書くと問題が起き、
しかも原因に気づかなかったりします。
そんな事情で文字列を直接使わない方向で考えると、各文字列を変数に入れて使うという事になる訳ですが、今度はどの変数を使うんだったのか?と言う問題が当然おきます。
じゃあどうするの?と考えていたのですが、昨日、ふと思いついたのが外部JSONファイルを使えば行けそうだという事です。
JSONとは?と言う説明は割愛しますが、階層構造を持つことのできる変数と思ってください。
例えば、選択肢画面で起きる1番目のエラーのテキストを”選択肢を選んでください”にしたり、
データセーブ画面で2番目の確認テキストを”このスロットには既存のデータがあります。上書きしますか?”としたりしようという訳です。
プログラムコード的には
txtJSON["DivSelect"]["Err"]["1"] →『”選択肢を選んでください”』
txtJSON["DivSave"]["Confirm"]["2"] →『”このスロットには既存のデータがあります。上書きしますか?”』
と言う感じで使用時はやや冗長な記述になりますが、個々の変数を別々に定義するよりは使い勝手は良いのではないかと期待しています。
ただまあ、色々書き直しなんで進捗は遅れそうですが・・・
追記
あれ?
これ、変数全般にも使えそうな・・・
どうせ使用時は”this.変数名”で使う訳だし、文字列ではマズい変数とhtmlとバインディングされている一部変数以外は行ける?
試してみます。