連載[2-2] ソフトが人間の言葉を理解するのはなぜ?
|
《 データベースからレコードを取り出す方法
》
|
|
|
」
|
先生、Recordが要素なら「Record 1」の「1」は「1番目の要素」って意味ですか? あっ、分かった。 データベースにはたくさんのレコードがあるから要素も複数になる。要素がたくさんある場合は、番号で指定するんだっ。 |
|
先生
|
だんだん分かってきたね。要素を指定する方法はいろいろあるんだが、まず一番簡単というか一般的なのが、 Record 1 word 2 みたいに番号で指定する方法だ。このほかに名前でも指定できる。今まで自然に使っていたが、 Cell "電話番号" Database "住所録" document "私の書類" などがそれに相当するな。 |
|
」
|
paragraphなんかの用語も使えるんですか? |
|
先生
|
もちろんだよ。characterだって使える。 例えば、 tell application "EGWORD6.0" to get character 1 of word 4 of document "Not Pippin" というスクリプトを実行してみよう。 "Not Pippin"という文書に I am not Pippin, my name is Macintosh. と書いてあれば、 "P" という文字が返ってくるはずだ。 |
|
|
|
」
|
本当だ。Pippinてバンダイが作るというゲーム用のマック・クローンですね。マックOSのライセンス戦略は、これからどうなるんでしょうかねぇ。 |
|
先生
|
まぁ、いいから。同じことを相対的に表現することだってできるんだ。 tell application "EGWORD6.0" to get first character of word after (third word of document "Not Pippin") とやってごらん。 |
![]() |
|
|
」
|
ほう、同じ答えが来ましたよ。「3番目の単語の後ろの単語の最初の文字」だから、確かに「Pippin」の「P」ですね。 |
|
先生
|
こんなように要素の指定方法はいくつかもあるんだよ。 |
|
」
|
ますます人間の普通の言葉に近いものがありますね。 |
|
先生
|
それがオブジェクト指向のいいところだね。 要素の指定方法はほかにもいろいろなバリエーションがあるけど、おっつけ教えてあげよう。 |
|
《 nameはオブジェクトの身分証にあたる
》
|
|
|
」
|
話は前に戻りますが、 name of aFile というのがありましたよね。これは、nameがfileの要素ということなんでしょうか? |
|
先生
|
いや、nameはfileクラスの属性(property) なんだ。 |
|
」
|
属性? |
|
先生
|
人間で言えば、名前や住所、身長や体重、メガネをかけてるとか髭を生やしてるとか、いろいろあるじゃないか。 丁度パスポートに書かれる「所有者の特徴」みたいなものが属性になるんだな。 ファイルならそのファイル名だとか、ウインドウだったら その位置とか、要するに個々のオブジェクト固有の情報のことだね。 |
|
」
|
そう言えばさっきの用語説明に「Properties:」というのがありましたね。これがあるクラスの属性を示しているのですねっ。 |
|
先生
|
目敏いねぇ。例えばitemクラスを見てごらん。その属性、つまりpropertiesはどうなっているかな。 |
![]() |
|
|
」
|
うわっ、たくさん出てきました。boundsとかcommentとかいろいろありますけど。 |
|
先生
|
boundsはそのオブジェクトがデスクトップ上で占める四角い領域の座標、commentはファイルやフォルダに付けたコメント文だ。その下の方にnameがあるよね。「name of aFile」では、これを取ってきているんだよ。 |
|
」
|
でもitemって、Finderのファイルを表すクラスなんですか。 |
|
先生
|
今度は少し上に戻ってfileを開いて見なさい。 |
|
(デスクトップ上のアイテム)⊃(ファイル)
|
|
|
」
|
おやっ、ここにはnameがありませんね。 |
|
先生
|
そう、つまりnameという属性はfileのものではなくて,実はitemの属性だったんだ。 |
|
」
|
するとどういうことになるんですか? 何だかまた頭がクラクラし始めましたが。 |
|
先生
|
いや実は、基礎をやる前に高等数学を見せてしまったような気がして、私もちょっとミスったと思うんだがね。 itemクラスは、デスクトップ上にアイコンで示されるあらゆる項目なんだ。ファイルはその1つだよね。 |
|
」
|
だから? |
|
先生
|
実は、クラスはほかのクラスの性質をそっくりそのまま
継承(inheritance)
することができるんだ。 Finderの場合、fileクラスはitemクラスを継承している。 |
|
」
|
継承すると、どういうメリットがあるんですか。 |
|
先生
|
つまりだね、デスクトップ上のアイコンはすべて名前を持っているし、位置や座標も属性として持つべきだ、とまず考える。 そうしてitemというクラスを定義して、itemの特徴を引き継いだfileクラスを定義した方が、きれいにまとまるじゃないか。 |
|
」
|
きれい、って? |
|
先生
|
う〜ん、つまりfileクラスではlocked(ロックの有無)みたいにファイルだけに固有な属性を定義して、共通なものは共通化しようってわけなんだよ。diskクラスもitemを継承しているけど、こっちはcapacity(総容量)なんて属性をほかに持っている。 だけどfileもdiskもnameは共通だっ、こりゃ分かりやすいっ、て感じなんだが、分かるかな? |
|
」
|
要するに、クラスの超整理法みたいなものですか。 |
|
先生
|
分かった、もうこの辺にしよう、本題じゃないから。でも継承の概念はオブジェクト指向プログラミングの最大の特徴なんだよ、…この話はいつか、ブツブツ…。 |
|
《 流派「属性」は天然理心流,刀「要素」は3本
》
|
|
|
」
|
ところで先生、要素と属性はどう違うんですか。 |
|
先生
|
属性(property)という語の本来の意味「持って生まれた性格」みたいに考えればいい。要素は追加/削除ができるけれど、属性は値を変えることはできても削り取ることができない。「侍」クラスの「近藤勇」オブジェクトなら、属性「流派」の値が「天然理心流」で、要素として「刀」オブジェクトを何本か持つ、ってところだな。 |
|
」
|
なるほど、刀は寝る時には外しちゃいますけど、流派はそうはいかないですものね。同じように、データベースに含まれるレコードの数はそれぞれ違うから、これは要素。ファイルの名前はただ1つだから属性ってわけですね。 |
|
《 変数aFileに格納された「参照」とは何者?
》
|
|
|
先生
|
ここで本題に戻ろうか。これまで説明したように、AppleScriptではアプリケーションごとにそれぞれ自分が備える属性がクラスとして定義されているのは分かったね。Finderのfileクラスなら、name(名前)とかmodification date(修正日)とかの属性を持っている。だから「name of aFile」でaFileのファイル名を指定することができるんだ。 |
|
」
|
はい。 |
|
先生
|
ってな話を君は簡単に信じちゃうのかい? |
|
」
|
えぇっ? |
|
先生
|
今の話はもっともらしく聞こえるが、理屈はちょっと違うんだ。 aFileは変数であってfileクラスのオブジェクトではなかったでしょ。ここに気づいて欲しかったな。 |
|
」
|
そうそう、確かaFileには「参照(reference)」とかいうデータが格納されると、おっしゃってましたね。 |
|
先生
|
ここでFinderの用語説明を上の方にスクロールして、setという単語を選んでごらん。 |
![]() |
|
|
」
|
あっ、何やら説明が右側に出てきました。 |
|
先生
|
左のリストで斜体以外は、「命令」(command)の用語なんだね。右はその命令についての文法を説明している。 setの次にはその目的となるreferenceつまり「参照」が来る。そしてtoの後にそこに代入される対象を書くことになる。 このset命令は前回使ったから覚えているよね? |
|
」
|
えぇ、でも「参照」がどうとか、深く考えませんでした。 |
|
先生
|
参照もオブジェクトと同じように日常的に考えればいい。言葉に踊らされて恐がることはないよ。 |
AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp