> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ユーザー定義プロパティ

> FlexiLayout language の要素に属する型付き変数を作成して使用する方法を学びます。

ユーザー定義プロパティは、要素に属する型付き変数です。これらのプロパティは External fields セクションで定義します。以下の形式に従ってください。

```
Type1 Name1;
...
TypeN NameN;
```

ここで Name は変数名、Type はその型です。

fields が作成されると、次のように初期化されます。数値の fields は 0 で初期化され、Rectangle や領域は空値で初期化されます。

fields は、それが属する要素内およびその要素より下位にある任意の要素内で使用できます。fields の値を変更できるのは、それが属する要素内のみで、その他の要素では読み取り専用になります。

要素に対する仮説を表す複合式の値を計算し、このプロパティに書き込むことができます。この値は、必要な都度再計算することなく、下位の任意の要素から参照できます。これにより、FlexiLayout の照合時間が短縮され、各要素に大きな式をコピーする必要がなくなり、コードの可読性が向上します。

要素の fields にアクセスするには、次の形式の完全名を使用します: `ElementName.FieldName` (例: `SearchElements.StaticText1.x`) 。要素内では、その fields には `x` という名前でアクセスできます。複合要素の場合は、そのサブ要素 (任意のネストレベル) も短い名前でその要素の fields にアクセスできます。

要素内では、fields の名前は一意でなければなりません。複合要素の要素名は、そのサブ要素 (任意のネストレベル) にあるいずれかの fields 名と一致してはなりません。さらに、複合要素の fields 名は、そのサブ要素のいずれかの名前と一致してはなりません。

<div id="example">
  ## 例
</div>

この例では、住所の構成要素を 2 つ検索します。都市 (文字列 City) と地下鉄駅 (文字列 Station) です。地下鉄駅を指定するのは、都市が Sydney の場合のみです。FlexiLayout のマッチングを高速化するため、City 要素に `fromSydney` プロパティを指定します。このプロパティは、City 要素が検出され、かつその値が `Sydney` の場合は `true`、それ以外は `false` になります。

City 要素のコード:

**External fields**

```
logic fromSydney;
```

**仮説の評価**

```
if( not IsNull and Value.Find( "Sydney" ) >= 0 ) then fromSydney = true;
else fromSydney = false;
```

続いて、このプロパティを使って地下鉄駅を検索します。マッチング処理を高速化するため、Sydney が City 要素として検出された場合にのみ駅を検索します。

Station 要素のコード:

**検索条件**

```
if not City.fromSydney then dontfind;
```

<Warning>
  fields があるため、同じ型の要素であっても同一とは見なされません。したがって、次のような構成は禁止されています。

  ```
  Let e = SearchElements.StaticText1;
  e = SearchElements.StaticText2; // 同じ型の要素
  ```
</Warning>
