---
title: 'Mulai Cepat'
description: "Pelajari cara cepat menggunakan JSONEval-Rs di bahasa pemrograman dan lingkungan pilihanmu."
navigation:
  icon: 'i-ph-lightning'
seo:
  title: 'Mulai Cepat'
  description: "Pelajari cara cepat menggunakan JSONEval-Rs di bahasa pemrograman dan lingkungan pilihanmu."
---

Mari buat pengecekan sederhana bersama. Kita akan menulis *rule* (skema aturan) untuk mengecek apakah umur seseorang ada di atas 18, dan kita test fungsinya menggunakan data umur 25.

### Rust

```rust
use json_eval_rs::JSONEval;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 1. Deklarasikan format blok aturan ala-JSON Schema
    let schema = r#"{
        "type": "object",
        "properties": {
            "age": {
                "rules": {
                    "minValue": { "value": 18, "message": "Harus berumur 18 atau lebih" }
                }
            }
        }
    }"#;

    // 2. Load module (untuk menge-parse skema ke compiler internal)
    let mut eval = JSONEval::new(schema, None, None)?;
    
    // 3. Tetapkan obyek input 
    let data = r#"{"age": 25}"#;

    // 4. Kalkulasi kondisi datanya
    eval.evaluate(data, None, None)?;

    // 5. Validasi status dan catch status error bila ada
    let validation = eval.validate(data, None, None)?;
    if !validation.has_error {
        println!("✅ Data valid!");
    } else {
        println!("❌ Ada error validasi: {:?}", validation.errors);
    }

    Ok(())
}
```

### C#

```csharp
using JsonEvalRs;
using System;

class Program {
    static void Main() {
        var schema = @"{
            ""type"": ""object"",
            ""properties"": {
                ""age"": {
                    ""rules"": {
                        ""minValue"": { ""value"": 18, ""message"": ""Harus berumur 18 atau lebih"" }
                    }
                }
            }
        }";

        // Terapkan pattern block 'using' agar engine C# mendealokasikan memori native di akhir baris otomatis.
        using (var eval = new JSONEval(schema)) {
            var data = @"{""age"": 25}";
            
            // Jalankan engine komputasi
            eval.Evaluate(data);
            
            // Tarik laporan error validasi
            var validation = eval.Validate(data);

            if (!validation.HasError) {
                Console.WriteLine("✅ Data valid!");
            }
        }
    }
}
```

### React Native

```typescript
import React, { useState } from 'react';
import { View, Text, TextInput } from 'react-native';
import { useJSONEval } from '@json-eval-rs/react-native';

const schema = {
  type: 'object',
  properties: {
    age: {
      rules: {
        minValue: { value: 18, message: 'Kamu harus berumur 18 atau lebih' }
      }
    }
  }
};

export default function AgeValidator() {
  const [age, setAge] = useState('');
  const [errorMsg, setErrorMsg] = useState('');
  
  // Instance class via framework hooks
  const evalInstance = useJSONEval({ schema });

  const handleChange = async (text: string) => {
    setAge(text);

    if (evalInstance) {
      const data = { age: parseInt(text, 10) || 0 };
      const validation = await evalInstance.validate({ 
        data: JSON.stringify(data) 
      });
      
      setErrorMsg(validation.has_error ? validation.errors.age?.message : '');
    }
  };

  return (
    <View>
      <TextInput 
        value={age}
        onChangeText={handleChange}
        keyboardType="numeric"
        placeholder="Masukkan umurmu"
      />
      {errorMsg ? <Text style={{color: 'red'}}>{errorMsg}</Text> : null}
    </View>
  );
}
```

### Web (Node.js)

Untuk server-backend environment semacam Node.js, gunakan target ekspor `@json-eval-rs/node`. Paket ini sudah mengurus tautan binding bawaan mesin C++ nya secara internal.

```typescript
import { JSONEval } from '@json-eval-rs/webcore';
import '@json-eval-rs/node';

async function run() {
    const schema = {
      type: "object",
      properties: {
        age: {
          rules: {
            minValue: { value: 18, message: "Harus berumur 18 atau lebih" }
          }
        }
      }
    };

    // 1. Eksekusi pengaktifan parser
    const evalInstance = new JSONEval({
      schema: JSON.stringify(schema)
    });

    const data = { age: 25 };

    try {
      // 2. Lempar nilai dan cek pengujian blok aturan
      const validation = await evalInstance.validate({ 
        data: JSON.stringify(data) 
      });

      if (!validation.has_error) {
          console.log("✅ Data valid!");
      }
    } finally {
      // 3. Karena JS garbage-collector tidak otomatis mengurusi memori lintas WASM/Rust, perintah free wajib direlease manual
      evalInstance.free();
    }
}

run();
```

### Web (Bundler)

Bila merangkai script dengan transpiler (Vite, Webpack, maupun framework Next.js/NuxtJS), berikan instansiasi parameter pembungkus module dari WASM:

```typescript
import { JSONEval } from '@json-eval-rs/webcore';
import * as wasmModule from '@json-eval-rs/bundler';

async function run() {
    // ... (Format JSON schema seperti contoh diatas) ...
    const schema = { /* ... */ };
    const data = { age: 25 };

    const evalInstance = new JSONEval({
      schema: JSON.stringify(schema),
      wasmModule
    });

    try {
      const validation = await evalInstance.validate({ data: JSON.stringify(data) });
      if (!validation.has_error) console.log("✅ Data tembus tanpa error!");
    } finally {
      evalInstance.free();
    }
}

run();
```

### Web (Vanilla JS)

Bagi kode skrip JS sederhana yang dimuat `index.html` dan tanpa loader NPM, sertakan pemanggilan fetch HTTP library `@json-eval-rs/vanilla`:

```typescript
import { JSONEval } from '@json-eval-rs/webcore';
import * as wasmModule from '@json-eval-rs/vanilla';

async function run() {
    // Pola ini sama persis seperti cara setup package bundler
    const evalInstance = new JSONEval({ schema: JSON.stringify(schema), wasmModule });
    // ...
}
```

---

## Modifikasi struktur UI 

Kalau stack tim Anda sudah bertumbu ke sistem library framework terpusat, baca tutorial khusus spesifik UI ini:

- **[Next.js](/how-to/use-nextjs)**
- **[NuxtJS](/how-to/use-nuxtjs)**
- **[React](/how-to/use-react)**
- **[Static HTML](/how-to/use-static-html)**

---

## Panduan lain

Selesai. Skrip di atas memberikan pemahaman tentang merangkai satu siklus logic evaluator. Berikut rekomendasi apa yang perlu dibedah lagi:

- Pelajari tutorial optimasi caching tingkat lanjut lewat rujukan **[Evaluasi Selektif](/advance-guide/optimize-selective-evaluation)**.
- Cek deretan referensi properti argumen di seksi dokumentasi **[Daftar Operator JSON](/operators/summary)** untuk mengenal fungsi bawaan (library Math, komparator, filter array list form table).
- Gali rahasia desain arsiktektur Rust library ini dari bahasan **[Toko Logic Caching Terkompilasi](/advance-guide/compiled-logic-store)**.
