> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ja/burokku/blocks/advanced-blocks/first-non-empty-or-default.md).

# 最初の非空値またはデフォルト

複数のデータ入力から最初の空でない値を選択することで代替実行ブランチをマージし、すべての入力が空の場合はデフォルト値を返します。これにより、条件付き実行のマージ、空の値の処理、構造化出力の構築ワークフローで、異なるブランチのデータを結合したり、不足データにフォールバック値を提供したりできます。

## このブロックの仕組み

このブロックは、複数のソース（通常は異なる条件付き実行ブランチ）からのデータを、利用可能な最初の空でない値を選択することでマージし、下流処理向けの出力が常に存在するようにします。このブロックは、

1. データ参照のリストと、任意のデフォルト値を受け取ります：
   * 少なくとも1つ必要な、セレクタのリストとして複数のデータ入力を受け取ります
   * 各セレクタは、異なるワークフローステップまたはブランチの出力を参照できます
   * すべての入力が空の場合に使用するデフォルト値を受け取ります
2. 入力を順番に処理します：
   * 提供された順序でデータ入力を反復処理します
   * 各入力値をチェックして、空でないか（None ではないか）を判定します
   * 最初に見つかった空でない値で停止します
3. 最初の空でない値を選択します：
   * 見つかった場合は、リスト内の最初の空でない値を返します
   * これにより、特定のデータソースを他より優先できます
   * 順序が重要です。前の入力ほど後の入力より優先されます
4. すべて空の場合はデフォルトにフォールバックします：
   * リスト内のすべての入力が空（None）の場合、設定されたデフォルト値を返します
   * 出力が None になることはないため、下流ブロックで安全に使用できます
   * デフォルト値には任意の型（文字列、数値、オブジェクト、null など）を指定できます
5. 空の値を処理します：
   * このブロックは、条件付き実行からの空の値（None）を受け入れます
   * 入力が None の場合に処理をスキップするほとんどのブロックとは異なり、このブロックはそれらを処理します
   * 空である可能性のある入力を、必ず空でない出力に変換します
6. マージされた出力を返します：
   * 選択された値（最初の空でない値またはデフォルト）を出力します
   * 出力は常に None ではないため、空の値を受け付けないブロックとの互換性が確保されます
   * 一部の実行ブランチがデータを生成しない場合でも、構造化出力の構築を可能にします

このブロックは、条件ロジックを含むワークフローで代替実行ブランチをマージするために不可欠です。ワークフローの異なるブランチがデータを生成できる場合（たとえば、条件 A が真ならあるブランチがデータを処理し、条件 B が真なら別のブランチが処理するなど）、このブロックを使うと、利用可能な最初の結果を選択してそれらのブランチを結合できるため、ワークフローは常に有効な出力を生成できます。

## 一般的な使用例

* **条件分岐のマージ**: 代替条件付き実行ブランチの出力を1つの値にマージします（例：if-else ブランチの結果をマージする、代替処理パスを結合する、条件分岐の出力を統一する）。これにより、条件付き実行のマージワークフローを実現します
* **空の値の処理**: フィルタリングや条件付き実行から生じる、空である可能性のある値をフォールバックのデフォルト値で処理します（例：フィルタ済みデータにデフォルトを適用する、条件分岐のフォールバックを提供する、オプションのステップから空でない出力を保証する）。これにより、堅牢な空値処理ワークフローを実現します
* **構造化出力の構築**: 一部の実行パスがデータを生成しなくても、ワークフロー出力に必ず値が含まれるようにします（例：一貫した出力構造を構築する、出力フィールドの存在を保証する、デフォルト付きの構造化レスポンスを作成する）。これにより、構造化出力の構築ワークフローを実現します
* **優先度ベースの選択**: 優先順位に基づいて複数のソースからデータを選択します（例：フォールバックよりも主要ソースを優先する、利用可能な最適データソースを選択する、特定の処理結果を優先する）。これにより、優先度ベースのデータ選択ワークフローを実現します
* **フォールバック値**: 主要なデータソースが利用できない場合にフォールバック値を提供します（例：データがないときにデフォルト値を使う、空の結果にフォールバックを提供する、下流との互換性を確保する）。これにより、フォールバック値のワークフローを実現します
* **出力の正規化**: 出力が常に存在し、空でないことを保証するように正規化します（例：オプションの出力を正規化する、一貫した出力形式を保証する、出力の可用性を保証する）。これにより、出力正規化ワークフローを実現します

## 他のブロックへの接続

このブロックは複数のデータ入力を受け取り、単一のマージ済み出力を生成します：

* **条件付き実行ブロックの後に** (ContinueIf、DetectionsFilter など) を使用して代替ブランチの出力をマージします（例：if-else ブランチの結果をマージする、条件パスを結合する、ブランチ出力を統一する）。これにより、条件からマージへのワークフローを実現します
* **空の値を受け付けないブロックの前に** 入力が常に存在するようにします（例：空でない入力を保証する、空データにフォールバックを提供する、入力の可用性を保証する）。これにより、マージから処理へのワークフローを実現します
* **ワークフロー出力において** フィールドの存在が保証された構造化出力を構築します（例：一貫した出力を作成する、出力の完全性を保証する、デフォルト付きの構造化レスポンスを作成する）。これにより、マージから出力へのワークフローを実現します
* **フィルタリングブロックの後に** フィルタがすべてのデータを除去してしまう場合を処理します（例：フィルタ済みデータにデフォルトを提供する、空のフィルタ結果を処理する、出力の可用性を保証する）。これにより、フィルタからマージへのワークフローを実現します
* **データ保存ブロックの前** 保存されたデータが常に存在するようにします（例：デフォルト付きで保存する、データの完全性を保証する、保存用のフォールバック値を提供する）。これにより、マージから保存へのワークフローを実現します
* **代替処理パスの間に** 異なる処理戦略の結果を結合します（例：代替処理結果をマージする、異なるモデル出力を結合する、処理戦略を統一する）。これにより、代替からマージへのワークフローを実現します

## 要件

このブロックは、少なくとも1つのデータ入力参照を必要とします（複数を受け付けることができます）。このブロックは空の値（None）を受け付けるため、条件付き実行ブランチからのデータを処理できます。その `デフォルト` default パラメータは任意で、すべての入力が空の場合のフォールバック値を指定します（既定値は None です）。データ入力は順番に処理され、最初の空でない値が選択されます。すべての入力が空の場合は、デフォルト値が返されます。出力は常に None ではないため、空の値を受け付けないブロックとの互換性が確保されます。このブロックは、代替実行ブランチのマージや、構造化出力が常に完全であることを保証するために不可欠です。

### 型識別子

ステップで次の識別子を使用してください `"type"` フィールド： `roboflow_core/first_non_empty_or_default@v1` ワークフローにこのブロックをステップとして追加するには。

### プロパティ

| **名前**  | **型** | **説明**                                                                                                                                                                                                                                                                             | 参照 |
| ------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name`  | `str` | このステップの一意の識別子を入力してください。                                                                                                                                                                                                                                                            | ❌  |
| `デフォルト` | `任意`  | すべてのデータ入力が空（None）の場合に返すデフォルト値です。これにより出力は常に None ではなくなり、空の値を受け付けない下流ブロックでも安全に使用できます。デフォルトには、文字列（例: 'empty'、'N/A'）、数値（例: 0、-1）、オブジェクト（例: {}、\[]）、null、またはその他の任意の値を指定できます。指定しない場合、既定値は None です。条件付き実行ブランチやフィルタリングによってすべてのデータが除去された場合のフォールバック値を提供するため、または構造化出力に必ず値を持たせるためにこれを使用してください。 | ❌  |

この **参照** 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します `ワークフロー` 実行時。参照 *バインディング* 詳細は。

### 入力と出力のバインディング

利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が `最初の非空値またはデフォルト` のバージョン `v1` あるか確認してください。

<details>

<summary>入力と出力のバインディング</summary>

* 入力
  * `データ` ([*`*`*](/workflows/ja/gaido/developer-guide/kinds/wildcard.md)空でない値を確認するためのデータ参照（セレクタ）のリストです。優先順位順に並びます。各セレクタは、異なるワークフローステップまたは実行ブランチの出力を参照できます。このブロックはこのリストを反復処理し、最初に見つかった空でない（None ではない）値を返します。リスト内のすべての値が空／None の場合は、デフォルト値が返されます。最低1項目が必要です。順序が重要で、リストの前の項目ほど優先度が高くなります。一般的な使用例：条件付き実行ブランチの出力をマージする、フォールバック用のデータソースを提供する、代替処理パスの結果を結合する。
* 出力
  * `出力` ([`*`](/workflows/ja/gaido/developer-guide/kinds/wildcard.md))：任意の要素に相当します。

</details>

<details>

<summary>JSON 定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/first_non_empty_or_default@v1",
	    "data": [
	        "$steps.my_step.predictions"
	    ],
	    "default": "空"
	}
```

</details>
