コマンドの引数を利用する
先ほど紹介した様々なコマンドの中には、引数を利用するものが数多くあった。そこで前ページのhelloコマンドについても、引数を取るかたちに変更し、「こんにちは、<入力された引数>」と出力するようにしてみよう。
|
「Ubiquity」と入力した結果 |
以下に示すのが、コマンドラインから引数を取るよう改良したプログラムだ。
CmdUtils.CreateCommand({
name: "hello", // コマンドの名前
// (1) 引数の情報をtakesで指定
takes: {"あなたのお名前": noun_arb_text},
execute: function(name) {
// (2) 入力値が関数の引数として与えられる
displayMessage("こんにちは!" + name.text);
}
});
(1) CreateCommand()の引数オブジェクトにtakes属性を追加し、コマンド引数の情報を指定する。"あなたのお名前"の部分が引数のラベルとなる。noun_arb_textは、「引数が任意の文字列である」ということを表しており、「Noun type」(名詞の型)と呼ばれる情報を指定する。「Noun type」は、引数として指定できる文字列に制約を課したり、入力候補を表示したりするのに使用される。他にもnoun_type_date(日付のみ)やnoun_type_language(言語名のみ)などがあり、容易に自作することもできる。
(2) コマンドに入力された引数は、関数execute()に対する引数として渡される。文字列が直接渡されるわけではなく、以下のような属性を持つオブジェクトが渡される。
inputObject.text // フォーマットなしの、入力されたプレーンテキスト
inputObject.html // タグを含む、フォーマットされたHTMLテキスト
inputObject.data // 文字列ではない、任意のデータオブジェクト
inputObject.summary // 非常に長い入力値に対する、簡略化された文字列
とはいえ、text以外を使用しなければならない状況はまれだろう。筆者もいろいろ試したのだが、長い文字列を渡すとsummaryの値が変化したこと以外、textとhtmlは違いがよくわからず、dataは常にundefinedであった。さらに詳細が判明したら、改めて報告する。