数式を使うと、他の[[プロパティ]]のデータを使用して[[Basesの紹介|ベース]]で計算プロパティを作成できます。計算の実行、テキストの操作、日付の処理などが可能です。 ## 数式でできること 数式は以下のことに役立ちます: - **値を計算する** — 価格の加算、合計の計算、数学演算の実行。 - **テキストを操作する** — 文字列の結合、大文字小文字の変更、部分文字列の抽出。 - **日付を扱う** — 日付の差の計算、日付のフォーマット、期限の算出。 - **ロジックを適用する** — 条件文を使って異なる値を表示。 - **リストを処理する** — リストデータのフィルタリング、並べ替え、マッピング、集計。 ## 数式プロパティの作成 数式プロパティを作成するには: 1. ベースで、ツールバーの**プロパティ**をクリックします。 2. メニューの下部にある**数式を追加**をクリックします。 3. 数式プロパティの名前を入力します。 4. **数式**フィールドに数式を入力します。 5. ダイアログを閉じます。 数式エディタは、入力中に[[関数]]やプロパティ名を自動補完し、数式の構文を検証します。数式が有効な場合、緑色のチェックマークが表示されます。 作成後、数式プロパティはベース内の他のプロパティと同様に使用できます。[[ビュー]]に追加したり、フィルターで使用したり、並べ替えに使ったりすることができます。 ## 数式を書く 数式エディタで、プロパティ、演算子、関数を使った式を入力します。 ### プロパティの参照 数式ではさまざまな種類のプロパティを参照できます: - **ノートプロパティ** — ノートの[[プロパティ|フロントマター]]からのプロパティ。 - **ファイルプロパティ** — `file.name`、`file.size`、`file.mtime`などのビルトインプロパティ。 - **数式プロパティ** — `formula.formula_name`を使った他の数式。 **例:** - `price * quantity` — 2つのノートプロパティを掛ける - `file.name + " - " + description` — ファイル名とノートプロパティを結合する - `formula.price_per_unit * 1.1` — 別の数式プロパティを使う ### 演算子を使う **算術演算子**は数値に対して計算を行います: - `price + tax` — 加算 - `price - discount` — 減算 - `price * quantity` — 乗算 - `price / quantity` — 除算 - `(part / whole) * 100` — 括弧を使って演算の順序を指定 **比較演算子**は値を比較します: - `price > 100` — より大きい - `age < 18` — より小さい - `status == "Done"` — 等しい - `status != "Done"` — 等しくない - `file.mtime > now() - '7d'` — 日付を比較 **ブール演算子**は論理条件を組み合わせます: - `!completed` — 否定 - `price > 0 && quantity > 0` — かつ - `urgent || important` — または 詳細は[[Bases構文#演算子|Bases構文]]をご覧ください。 ### 関数を使う 関数は値に対して操作を行います。使用できる関数は、扱う値の型によって異なります。完全なリストは[[関数]]をご覧ください。 **主な関数カテゴリ:** - **グローバル関数** — `if()`、`now()`、`date()`、`link()`、`max()`、`min()` - **文字列関数** — `contains()`、`replace()`、`split()`、`lower()`、`title()` - **数値関数** — `round()`、`ceil()`、`floor()`、`abs()`、`toFixed()` - **日付関数** — `format()`、`relative()`、`date()`、`time()` - **リスト関数** — `filter()`、`map()`、`sort()`、`join()`、`unique()` **例:** - `if(price, "quot; + price.toFixed(2), "")` 条件分岐と数値フォーマットを定義。 - `file.name.lower()` 小文字に変換。 - `tags.contains("urgent")` タグリストに値が含まれるかチェック。 - `due_date.format("YYYY-MM-DD")` 日付をフォーマット。 ## 数式の例 ### 期限を計算する プロジェクトの期限を開始日の2週間後に設定: ```js start_date + "2w" ``` ### 期限超過ステータスを表示する 期限が過ぎていてステータスが「Done」でない場合に「Overdue」と表示: ```js if(due_date < now() && status != "Done", "Overdue", "") ``` ### 通貨をフォーマットする 小数点以下2桁と通貨記号で価格を表示: ```js if(price, "quot; + price.toFixed(2), "") ``` ### リスト項目を数える リストプロパティのアイテム数を数える: ```js tasks.length ``` ### 優先度スコアを計算する 複数の要素を組み合わせて優先度スコアを算出: ```js (impact * urgency) / effort ``` ### テキストフィールドを結合する 姓と名からフルネームを作成: ```js first_name + " " + last_name ``` ### 総コストを計算する 月額コストに所有月数を掛ける: ```js monthlyUses * formula.Owned.round() ``` ## データ型 数式はさまざまな型のデータを扱います: - **文字列** — 引用符で囲まれたテキスト:`"hello"` または `'world'` - **数値** — 数値:`42`、`3.14`、`(2 + 2)` - **ブール値** — 真または偽:`true`、`false` - **日付** — `date()`、`today()`、`now()`で作成 - **リスト** — 値のコレクション:`[1, 2, 3]` - **オブジェクト** — キーと値のペア:`{"name": "value"}` 数式の出力型は、使用するデータと関数によって決まります。 ## 他の数式を参照する 数式は他の数式を参照でき、派生的な計算を作成できます。例えば、`price_per_unit`という数式がある場合: ```js price / quantity ``` 別の数式からそれを参照できます: ```js formula.price_per_unit * 1.1 ``` > [!warning] 循環参照を避ける > 数式は、直接的にも他の数式を介して間接的にも、自分自身を参照することはできません。