---
title: 'Cheatsheet'
description: "Pencarian cepat untuk menemukan operator yang tepat berdasarkan apa yang ingin Anda capai."
navigation:
  icon: 'i-ph-code-block'
seo:
  title: 'Cheatsheet'
  description: "Pencarian cepat untuk menemukan operator yang tepat berdasarkan apa yang ingin Anda capai."
---

## "Saya ingin..."

### Bekerja dengan Variabel

| Tugas | Operator | Contoh |
|------|----------|---------|
| Mengakses variabel | `var` | `{"var": "user.name"}` |
| Memberikan nilai default untuk variabel yang hilang | `var` dengan default | `{"var": ["age", 0]}` |
| Mengecek jika kolom (field) tidak ada | `missing` | `{"missing": ["email", "phone"]}` |
| Mengembalikan nilai mentah tanpa evaluasi | `return` | `{"return": "nilai literal"}` |
| Mereferensikan definisi JSON Schema | `$ref` | `{"$ref": "#/definitions/User"}` |

**Lihat:** [Operator Inti (Core)](core)

---

### Membandingkan Nilai

| Tugas | Operator | Contoh |
|------|----------|---------|
| Cek kesamaan (longgar) | `==` | `{"==": [a, b]}` |
| Cek kesamaan (ketat, type-safe) | `===` | `{"===": [a, b]}` |
| Cek ketidaksamaan | `!=` atau `!==` | `{"!=": [a, b]}` |
| Kurang dari | `<` | `{"<": [age, 18]}` |
| Lebih dari | `>` | `{">": [score, 100]}` |
| Cek rentang nilai (range) | `and` + perbandingan | `{"and": [{">=": [val, min]}, {"<=": [val, max]}]}` |
| Cek apakah nilai ada | `!==` dengan null | `{"!==": [value, null]}` |

**Lihat:** [Operator Perbandingan (Comparison)](comparison)

---

### Logika dan Kondisional

| Tugas | Operator | Contoh |
|------|----------|---------|
| Kondisional (if-then-else) | `if` | `{"if": [kondisi, maka, jika_tidak]}` |
| Beberapa kondisi (AND) | `and` | `{"and": [kond1, kond2]}` |
| Kondisi alternatif (OR) | `or` | `{"or": [nilai1, nilai2]}` |
| Menyangkal kondisi | `not` atau `!` | `{"!": kondisi}` |
| Exclusive or (XOR) | `xor` | `{"xor": [a, b]}` |
| Penanganan nilai null / nilai default | `ifnull` | `{"ifnull": [nilai, "default"]}` |
| Cek apakah kosong | `isempty` | `{"isempty": nilai}` |
| Rantai Else-if | `if` dengan multi kondisi | `{"if": [k1, n1, k2, n2, default]}` |

**Lihat:** [Operator Logika (Logical)](logical)

---

### Operasi Matematika

| Tugas | Operator | Contoh |
|------|----------|---------|
| Menambahkan angka | `+` | `{"+": [1, 2, 3]}` |
| Pengurangan | `-` | `{"-": [10, 3]}` |
| Perkalian | `*` | `{"*": [harga, jumlah]}` |
| Pembagian | `/` | `{"/": [total, jumlah]}` |
| Sisa bagi (modulo) | `%` | `{"%": [7, 3]}` |
| Pangkat | `^` atau `pow` | `{"pow": [2, 3]}` |
| Nilai mutlak (absolut) | `abs` | `{"abs": -5}` |
| Nilai maksimum | `max` | `{"max": [1, 5, 3]}` |
| Nilai minimum | `min` | `{"min": [1, 5, 3]}` |
| Pembulatan desimal | `round` | `{"round": [3.14159, 2]}` |
| Pembulatan ke atas | `roundup` atau `ceiling` | `{"roundup": [3.1]}` |
| Pembulatan ke bawah | `rounddown` atau `floor` | `{"rounddown": [3.9]}` |
| Pemotongan desimal (truncate) | `trunc` | `{"trunc": [3.7]}` |
| Pembulatan ke kelipatan terdekat | `mround` | `{"mround": [10, 3]}` |
| Akar kuadrat | `pow` dengan 0.5 | `{"pow": [16, 0.5]}` |

**Lihat:** [Operator Aritmatika](arithmetic), [Fungsi Matematika](math)

---

### Operasi String

| Tugas | Operator | Contoh |
|------|----------|---------|
| Menggabungkan string | `cat` | `{"cat": ["Halo", " ", "Dunia"]}` |
| Mengambil substring | `substr` | `{"substr": [teks, 0, 5]}` |
| Mencari teks di dalam string | `search` | `{"search": ["cari", "di teks ini"]}` |
| Mengambil N karakter pertama | `left` | `{"left": [teks, 5]}` |
| Mengambil N karakter terakhir | `right` | `{"right": [teks, 5]}` |
| Mengambil karakter di tengah | `mid` | `{"mid": [teks, mulai, panjang]}` |
| Panjang string | `len` atau `length` | `{"len": teks}` |
| Memisahkan (split) dan ambil elemen | `splittext` | `{"splittext": ["a,b,c", ",", 0]}` |
| Memecah menjadi array | `splitvalue` | `{"splitvalue": ["a,b,c", ","]}` |
| Format angka menjadi string | `stringformat` | `{"stringformat": [1234.5, 2, "$"]}` |
| Mengecek apakah string mengandung teks | `search` lalu cek != null | `{"!==": [{"search": ["cari", teks]}, null]}` |

**Lihat:** [Operator String](string)

---

### Tanggal dan Waktu

| Tugas | Operator | Contoh |
|------|----------|---------|
| Mengambil tanggal saat ini | `today` | `{"today": null}` |
| Mengambil datetime saat ini | `now` | `{"now": null}` |
| Ekstrak tahun dari tanggal | `year` | `{"year": tanggal}` |
| Ekstrak bulan dari tanggal | `month` | `{"month": tanggal}` |
| Ekstrak hari dari tanggal | `day` | `{"day": tanggal}` |
| Membuat tanggal dari komponen | `date` | `{"date": [2024, 1, 15]}` |
| Format tanggal untuk tampilan | `dateformat` | `{"dateformat": [tanggal, "short"]}` |
| Selisih hari antara 2 tanggal | `days` | `{"days": [akhir, mulai]}` |
| Menghitung umur | `DATEDIF` dengan "Y" | `{"DATEDIF": [tglLahir, today, "Y"]}` |
| Selisih tanggal (berbagai unit) | `datedif` | `{"datedif": [mulai, akhir, "M"]}` |
| Pecahan tahun | `yearfrac` | `{"yearfrac": [mulai, akhir]}` |
| Cek apakah tanggal dalam rentang | Perbandingan | `{"and": [{">=": [tgl, mulai]}, {"<=": [tgl, akhir]}]}` |

**Lihat:** [Fungsi Tanggal](date)

---

### Operasi Array

| Tugas | Operator | Contoh |
|------|----------|---------|
| Mengubah (transform/map) tiap elemen | `map` | `{"map": [array, logika]}` |
| Memfilter elemen array | `filter` | `{"filter": [array, kondisi]}` |
| Memadatkan array jadi satu nilai | `reduce` | `{"reduce": [array, logika, awal]}` |
| Cek apakah semua memenuhi kondisi | `all` | `{"all": [array, kondisi]}` |
| Cek apakah ada yang memenuhi | `some` | `{"some": [array, kondisi]}` |
| Cek jika tidak ada yang memenuhi | `none` | `{"none": [array, kondisi]}` |
| Menggabungkan array | `merge` | `{"merge": [arr1, arr2]}` |
| Cek keberadaan nilai di array | `in` | `{"in": [nilai, array]}` |
| Menjumlahkan nilai array | `sum` | `{"sum": [array]}` |
| Menghasilkan rentetan urutan | `for` atau `FOR` | `{"FOR": [1, 10, logika]}` |
| Panjang (length) array | `length` | `{"length": array}` |
| Ambil elemen indeks tertentu | Array dengan `var` | `{"var": "items.0"}` |
| Temukan elemen pertama | `filter` lalu `.0` | `{"var": [{"filter": [...]}, 0]}` |

**Lihat:** [Operator Array](array)

---

### Pencarian Tabel

| Tugas | Operator | Contoh |
|------|----------|---------|
| Ambil nilai dari tabel berdasar indeks | `VALUEAT` | `{"VALUEAT": [tabel, idx, "field"]}` |
| Mengambil nilai dari baris terakhir | `MAXAT` | `{"MAXAT": [tabel, "field"]}` |
| Cari indeks baris berdasarkan nilai | `INDEXAT` | `{"INDEXAT": [nilai, tabel, "field"]}` |
| Pencarian dan pengembalian indeks | `MATCH` | `{"MATCH": [tabel, nilai, "field"]}` |
| Pencocokan dalam sebuah rentang | `MATCHRANGE` | `{"MATCHRANGE": [tabel, min, max, nilai]}` |
| Pilih kecocokan pertama | `CHOOSE` | `{"CHOOSE": [tabel, nilai, "field"]}` |
| Cari indeks dengan kondisi kompleks | `FINDINDEX` | `{"FINDINDEX": [tabel, kondisi]}` |
| Mencari baris lalu kembalikan nilai | `VALUEAT` + `INDEXAT` | Lihat pola pencarian tabel |

**Lihat:** [Operator Tabel](table)

---

### Utilitas (Utilities)

| Tugas | Operator | Contoh |
|------|----------|---------|
| Cek field yang kosong/hilang | `missing` | `{"missing": ["email", "name"]}` |
| Cek minimum kecukupan field | `missing_some` | `{"missing_some": [2, ["a","b","c"]]}` |
| Mengembalikan nilai mentah | `return` | `{"return": nilaiMentah}` |
| Generate rentang opsi | `RANGEOPTIONS` | `{"RANGEOPTIONS": [1, 100]}` |
| Mempetakan tabel jadi opsi (options) | `MAPOPTIONS` | `{"MAPOPTIONS": [tabel, "label", "value"]}` |
| Percabangan tabel jadi opsi | `MAPOPTIONSIF` | `{"MAPOPTIONSIF": [tabel, "l", "v", kond]}` |

**Lihat:** [Operator Utilitas](utility)

---

## Pola Umum Berdasarkan Kasus (Use Case)

### Validasi

```json
// Cek semua field wajib sudah diisi
{"==": [{"length": {"missing": ["email", "name", "age"]}}, 0]}

// Validasi format email (dasar)
{"and": [
  {">": [{"search": ["@", {"var": "email"}]}, 0]},
  {">": [{"search": [".", {"var": "email"}]}, {"search": ["@", {"var": "email"}]}]}
]}

// Validasi rentang angka
{"and": [
  {">=": [{"var": "age"}, 18]},
  {"<=": [{"var": "age"}, 120]}
]}
```

---

### Kalkulasi Keuangan

```json
// Hitung total nilai setelah pajak
{"round": [
  {"*": [
    {"var": "price"},
    {"+": [1, {"/": [{"var": "taxRate"}, 100]}]}
  ]},
  2
]}

// Terapkan diskon
{"round": [
  {"*": [
    {"var": "price"},
    {"-": [1, {"/": [{"var": "discountPercent"}, 100]}]}
  ]},
  2
]}

// Hitung persentase
{"round": [
  {"*": [
    {"/": [{"var": "part"}, {"var": "total"}]},
    100
  ]},
  1
]}
```

---

### Transformasi Data

```json
// Ekstrak nama user yang berstatus aktif
{"map": [
  {"filter": [{"var": "users"}, {"var": "active"}]},
  {"var": "name"}
]}

// Susun nama lengkap
{"map": [
  {"var": "users"},
  {"cat": [{"var": "firstName"}, " ", {"var": "lastName"}]}
]}

// Hitung nilai rata-rata (average)
{"/": [
  {"sum": [{"var": "scores"}]},
  {"length": {"var": "scores"}}
]}
```

---

### Logika Kondisional

```json
// Harga bersaing/bertingkat (tier pricing)
{"if": [
  {">=": [{"var": "qty"}, 100]}, 8.00,
  {">=": [{"var": "qty"}, 50]}, 9.00,
  {">=": [{"var": "qty"}, 10]}, 10.00,
  12.00
]}

// Akses level berdasarkan umur
{"if": [
  {"<": [{"var": "age"}, 13]}, "CHILD",
  {"<": [{"var": "age"}, 18]}, "TEEN",
  "ADULT"
]}
```

---

### Pencarian Tabel

```json
// Pola dasar pencarian nilai
{"VALUEAT": [
  {"var": "rateTable"},
  {"INDEXAT": [{"var": "age"}, {"var": "rateTable"}, "minAge"]},
  "rate"
]}

// Pencarian rentang (range lookup)
{"VALUEAT": [
  {"var": "table"},
  {"MATCHRANGE": [
    {"var": "table"},
    "minValue",
    "maxValue",
    {"var": "lookupValue"}
  ]},
  "result"
]}
```

---

## Panduan Pemilihan Operator

### Kapan Menggunakan Operator Apa

| Skenario | Gunakan Ini | Jangan Ini | Alasan |
|----------|----------|----------|-----|
| Konkatenasi (penggabungan) string | `cat` | `+` | `+` memaksa ubah ke tipe nomor |
| Komparasi tipe terjamin (type-safe) | `===` | `==` | Cegah kejutan dari pemaksaan tipe (coercion) |
| Nilai bawaan jika Null | `ifnull` | nested `if` | Lebih bersih dan mudah dibaca |
| Cek keanggotaan dalam Array | `in` | `some` dengan `==` | Jauh lebih efisien |
| Menghitung umur manusia | `DATEDIF` | Pengurangan tahun | Mengambil akun ulang tahun |
| Membulatkan uang / mata uang | `round` dengan 2 digit | `floor` atau `ceiling` | Standar pembulatan nilai uang |
| Cek agar semua kondisi terpenuhi | `all` | `reduce` pakai kondisi | Lebih cepat berhenti (short cuts), lebih jernih |
| Looping berulang pada suatu angka | `FOR` | trick via `reduce` | Memang diciptakan untuk melakukan ini |

---

## Referensi Singkat Sintaks (Syntax Reference)

### Struktur Skema Utama (Common Structures)

**If-Then-Else:**
```json
{"if": [kondisi, thenValue, elseValue]}
```

**If-ElseIf-Else:**
```json
{"if": [
  kondisi1, nilai1,
  kondisi2, nilai2,
  kondisi3, nilai3,
  nilaiDefault
]}
```

**Map (transformasi per elemen):**
```json
{"map": [array, {"operasi": {"var": ""}}]}
```

**Filter (penyaringan elemen):**
```json
{"filter": [array, kondisi]}
```

**Reduce (kalkulasi pemadat):**
```json
{"reduce": [
  array,
  {"operasi": [{"var": "accumulator"}, {"var": "current"}]},
  nilaiAwal
]}
```

---

## Dokumen Terkait

- **[Ringkasan Operator](summary)** - Penjelasan singkat namun padat tentang semua operator
- **[Kesalahan Umum](../advance-guide/troubleshoot-common-mistakes)** - Jebakan-jebakan (pitfalls) yang patut dihindari.
- Cek masing-masing laman operator demi detail dan informasi mendalam.

---

**Tip:** Saat kebingungan atau butuh solusi cepat, cek halaman spesifik tiap operator yang terdapat contoh-contoh relevan sebagai panduan pemecahan masalah (troubleshooting)!
