外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
外部変形の座標データを考えます。
◎座標データ
%lg %lg ( x y )
x : X 方向の座標
y : Y 方向の座標
・座標データを指示・選択するときは指示番号や指標が利用できます
①指示番号の座標データを取り出す
hp 1
hp 1, 2
hp 1..2
hp 1, 2, 3..4
②指標(文字列)で座標データを代表する
1.hp
[1, 2].hp :index
(1..2).hp
[1, 2, 3..4].index.hp :index
③指標(シンボル)で座標データを代表する
:hp1
・座標データは配列、文字列が利用できます
④配列
[1.0, 2.0]
["hp", 1, 2]
⑤文字列
"1 2"
"1, 2"
"hp 1 2"
・配列、文字列の要素にキーワードが利用できます
⑥ハッシュ
(x y)
{x:1, y:2}
{:x=>1, :y=>2}
(P あるいは hp)
{P:[1, 2]}
{:P=>[1, 2]}
⑦キーワード引数
(x y)
hp x:1, y:2
hp :x=>1, :y=>2
(P あるいは hp)
hp P:[1, 2]
hp :P=>[1, 2]
⑧キーワード配列
(x y)
[x:1, y:2]
[:x=>1, :y=>2]
(P あるいは hp)
[P:[1, 2]]
[:P=>[1, 2]]
⑨キーワード文字列
(x y)
"x:1, y:2"
":x=>1, :y=>2"
"x=1, y=2"
(P あるいは hp)
"P:[1, 2]"
":P=>[1, 2]"
"P=[1, 2]"
配列 [1, 2] なら
hp [1, 2]
は 指示点 1, 2 があれば
[[x1, y1], [x2, y2]]
となり なければ
[1.0, 2.0]
を返します。指示点 1, 2 があるときに
hp [1.0, 2.0]
あるいは
hp [1, 2].to_f
なら
[1.0, 2.0]
となります。
hp 1, 2 は 指示点 1, 2 があれば
[[x1, y1], [x2, y2]]
で なければ
[1.0, 2.0]
となります。外部変形には、指示・選択データがあるので その分仕様がめんどくさいものになってしまいます。それでも仕様が納得できてわかりやすければ問題はないと考えます。
キーワードは ruby でも使えるようになっています。
p hp x:1, y:2 #=> [1.0, 2.0]
あるいは
p hp P1:1, P2:2 #=> [[1.0,2.0], [3.0, 4.0]]
なら hp 1, 2 の問題はありません。
hp 1, 2 は "as" と "at" をデータの前に置いて
p hp as 1, 2 #=> [[1.0, 2.0], [3.0, 4.0]]
と
p hp at 1, 2 #=> [1.0, 2.0]
のように as と at を使い分けることでも解決できます。as は そのまま、at は いちど前に立ち止まって くらいの意味(まちがっているかもしれない)です。