今回も継承関係の話なんだけど、ちょっとその前にやっときたい事があるんだ。 | |
…もしかしてまた前置き長いの? | |
ん〜、まぁでも前回ほどじゃないから。 | |
はぁ… で、やっときたい事って? |
|
前回は、ファイルを選択するクラスを作ったよね。 | |
うん。SimpleFileSelector クラスと、テキストファイル用の TextFileSelector クラスを作ったね。 | |
今回はまず「ファイルを開く」と「名前をつけて保存」の両方を使える FileSelector クラスを作るところから始めようと思うんだ。 | |
それって SimpleFileSelector クラスを継承して作るの? | |
ううん。FileSelector クラスは今回の本題と直接関係ないから SimpleFileSelector クラスを書き換えて作るよ。 | |
りょーかい。 | |
じゃ、作ってみて。 | |
え、わたしが作るの? | |
ん。ここしばらく説明だけだったからね。 | |
そーいえばそうだね。 うん、じゃ作ってみるね。 |
|
コンストラクタとデストラクタ、あとプロパティは SimpleFileSelector クラスと同じでいいから省略するね。 | |
うん、わかった。 | |
じゃ、まずは getParams メソッドから。 前回は引数なしだったけど、今回はダイアログボックスの種類を指定する引数をつけてね。 |
|
ダイアログボックスの種類って? | |
引数が true だと「名前をつけて保存」で、 false だと「ファイルを開く」にするってこと。 | |
あ、そういうことね。 えーっと、じゃあ… |
<getParams メソッド>
こう? | |
うん、OK。 じゃあ次は SimpleFileSelector クラスの openFile メソッドをベースにして、 ファイル選択ダイアログボックスを表示する showDialog メソッドを作ってみて。 引数は getParams メソッドと同じにしてね。 |
|
それって、引数が true だったら「名前をつけて保存」の方を表示して、 false だったら「ファイルを開く」の方を表示するってこと? | |
そうそう、そういうこと。 | |
ってことは、引数をそのまま getParams メソッドに渡せばいいんだから… |
<showDialog メソッド>
こんな感じかな。 | |
ん、これも OK だね。 じゃあ最後に openFile メソッドと saveFile メソッドを作ってみて。 それぞれ「ファイルを開く」と「名前をつけて保存」ダイアログボックスを表示するメソッドね。 |
|
showDialog メソッド使っていいんだよね? | |
うん、もちろん。 | |
じゃ簡単だね。 |
<openFile メソッドと saveFile メソッド>
こうだよね。 | |
うん。 まとめると、FileSelector クラスはこうなるね。 |
はい、これで前置きは終わり。 じゃ本題に入るね。 |
|
今回の前置きも結構長かったね… | |
前回よりは短かったでしょ。 | |
まぁ、それはそうだけどねぇ… | |
で、今回は多重継承の話。 | |
多重継承? | |
多重継承っていうのは、スーパークラスが2つ以上ある継承のこと。 | |
なんか複雑そうだね… | |
まぁ普通の継承よりはね。 じゃあ、できるだけシンプルになるようにスーパークラスが2つの場合を説明するね。 |
|
うん、わかった。 | |
まず1つ目のスーパークラスは、辞書配列の内容をファイルに保存する DictionarySaver クラス。 |
§1.15 でも辞書配列のメソッドを使ったけど、 これって書き方がややこしいんだよねぇ。 | |
まぁね。 ちなみにこの書き方とか incontextof 演算子は、多重継承の説明が終わったら説明するつもりだけどね。 |
|
え、そうなの? | |
うん、一応ね。 | |
う〜ん、色々知っとかなきゃいけないことがあるんだね… あ、ところで saveStruct って初めて見るメソッドだよね? |
|
saveStruct は辞書配列の中身をファイルに保存するメソッドだよ。 引数には保存するファイル名を指定するんだ。 |
|
辞書配列ってどうやってファイルに保存するの? | |
辞書配列の中身をテキスト形式でファイルに書き出して保存するんだけど、後で実際にやってみるから、その時にまた説明するね。 | |
うん、りょーかい。 | |
じゃ、次はもう1つのスーパークラス、DictinaryLoader クラス。 これは辞書配列をファイルから読み込むクラスだよ。 |
isExistentStorage メソッドって初めて見るね。 あと、Scripts っていうクラスも今まで使ったことないクラスだよね。 |
|
うん。じゃあまず isExistentStorage メソッドから説明するね。 これは Storages クラスのメソッドで、ファイルが存在するかどうかをチェックするメソッド。 |
|
じゃあ、ファイルが存在すれば true を返して、存在しなければ false を返すの? | |
そうそう。 このメソッドで引数に指定されてるファイルが存在するかチェックして、もし存在しなければ void を返してるの。 |
|
なるほどねー。 じゃあ、Scripts クラスの evalStorage メソッドってどんなメソッドなの? |
|
Scripts クラスはその名前の通り TJS スクリプトに関係するメソッドを扱ってるクラス。 で、evalStorage メソッドは、引数に指定されてるファイルの内容を TJS 式として読み込むメソッドなんだ。 |
|
えっと、じゃあファイルに辞書配列のデータが書いてあったら、evalStorage メソッドを実行するとその辞書配列が返ってくるってこと? | |
ん、そうだよ。 ちなみに、戻り値がどうなるかはファイルの中身によって決まるんだ。 ファイルに数値が書いてあれば整数型か実数型の値が返ってくるし、文字列が書いてあれば文字列型の値が返ってくるよ。 あと、配列データが書いてあれば配列が返ってくるよ。 |
|
へぇ、そうなんだ。 | |
ただし、ファイルに TJS 式と見なせないデータが入ってる場合は例外が起こるから注意してね。 今回はファイルに辞書配列のデータが入ってると仮定してスクリプトを書いてるから。 |
|
うん、わかった。 | |
で、この2つのスーパークラスを多重継承して、辞書配列の保存と読み込みができるクラスを作ろうと思うんだけど… | |
だけど? | |
それはまた次回ね。 | |
あ、次回に続くんだ? | |
今回はだいぶ長くなっちゃったからね。まだ先も長いし。 というワケで、続きは次回ね! |