AppleScript改良〜「だんだん」そして「おおきに」

2016年1月27日AppleScript,Mac,パソコン・インターネット,マナカナ

以前、次の記事でAppleScriptを書いて、AppleScriptの勉強をしました。

その時に書いた書いたのが、次の物です。

(* 究極の選択
 * Copyright (c) 2009 webmaster@oichinote.com
 * Created on 2009-01-30 by webmaster@oichinote.com
 *)

set aList to {"キャンセル", "三倉茉奈", "三倉佳奈"}
set bList to {"", "だんだん", "おおきに"}
display dialog "どちらが好き?" buttons aList default button 1
set answer to button returned of result
set n to 1
repeat with x in aList
	if answer contains x then
		display dialog item n of bList
	end if
	set n to n + 1
end repeat

実行すると、三倉茉奈三倉佳奈を選ぶボタンが出て来て、押したボタンに応じて返事が返ってくると言う物です。

究極の選択

この当時は、連想配列的な物が無い物と思って、配列(リスト)のインデックスを使っていました。その後、recordと言う連想配列に相当する変数型がある事がわかり、書き直しました。

(* 究極の選択 Record版
 * Copyright (c) 2014 webmaster@oichinote.com
 * Created on 2014-06-21 by webmaster@oichinote.com
 *)

set xList to {¬
	{person:"キャンセル", greeting:""}, ¬
	{person:"三倉茉奈", greeting:"だんだん"}, ¬
	{person:"三倉佳奈", greeting:"おおきに"}}

set cList to {}
repeat with c in xList
	set end of cList to (person of c)
end repeat

set answer to button returned of (display dialog ¬
	"どちらが好き?" buttons cList cancel button "キャンセル" default button 1)

repeat with x in xList
	if answer is (person of x) then
		display dialog (greeting of x)
	end if
end repeat

行数としては長くなりますが、スクリプトとしては、意図がわかりやすくなっていると思います。

最初に、castとラベル付けされたキーワードを拾ってきます。Perlだとkeysに相当する部分です。repeat with文でキーワードを拾っています。次の様に書けると、この処理が簡略化できるのですが、エラーになって動きません。

set cList to every cast of every item of xList

Perlでも、keysをリストの順番通りに拾ってこようとすると、ループをまわす必要があるので、同じか。

それと、xListを定義する部分で、最後の","を追加できない様です。

set xList to {¬
	{cast:"キャンセル", greeting:""}, ¬
	{cast:"三倉茉奈", greeting:"だんだん"}, ¬
	{cast:"三倉佳奈", greeting:"おおきに"}, ¬
	}

“, ¬"を追加するとエラーになります。スクリプトの拡張性(書きやすさ)を考えたら、ここの","を無視する様な言語仕様になってくれていると良いのですが。

ちなみにですけど、三倉茉奈を選ぶと「だんだん」が、三倉佳奈を選ぶと「おおきに」が戻ってくる理由ですが、当時放映されていた朝ドラ「だんだん」の配役三倉茉奈さんの「田島めぐみ」と、三倉佳奈さんの「一条のぞみ」がそれぞれ、松江(島根県)と京都(京都府)で育っている所から、「ありがとう」のそれぞれの方言で返事をする様にしています。

三倉茉奈 だんだん

三倉佳奈 おおきに

朝ドラ「だんだん」については、次のページに、恐ろしいほどにまとめてあるのでご覧ください。

Posted by お市のかた