Skip to content
Merged
161 changes: 100 additions & 61 deletions docs/reference/quick-start.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@ A comprehensive cheat sheet for SomonScript syntax and common patterns.

```som
// Variables (mutable)
тағйирёбанда ном = "Аҳмад";
тағйирёбанда синну_сол = 25;
тағйирёбанда фаъол = рост;
тағ ном = "Аҳмад";
тағ синну_сол = 25;
тағ фаъол = рост;

// Constants (immutable)
собит ПИ = 3.14159;
собит МАКС_СИННУ_СОЛ = 120;

// With explicit types
тағйирёбанда маълумот: сатр = "Салом";
тағйирёбанда рақам: рақам = 42;
тағйирёбанда мантиқӣ: мантиқӣ = нодуруст;
тағ маълумот: сатр = "Салом";
тағ рақам: рақам = 42;
тағ мантиқӣ: мантиқӣ = нодуруст;
```

### Data Types
Expand Down Expand Up @@ -61,7 +61,7 @@ A comprehensive cheat sheet for SomonScript syntax and common patterns.
}

// Arrow functions (anonymous)
тағйирёбанда ҳисоб = (а: рақам, б: рақам): рақам => а * б;
тағ ҳисоб = (а: рақам, б: рақам): рақам => а * б;
```

### Advanced Functions
Expand All @@ -74,8 +74,8 @@ A comprehensive cheat sheet for SomonScript syntax and common patterns.

// Rest parameters
функсия ҷамъи_ҳама(...рақамҳо: рақам[]): рақам {
тағйирёбанда натиҷа = 0;
барои тағйирёбанда рақам аз рақамҳо {
тағ натиҷа = 0;
барои тағ рақам аз рақамҳо {
натиҷа += рақам;
}
бозгашт натиҷа;
Expand All @@ -97,7 +97,7 @@ A comprehensive cheat sheet for SomonScript syntax and common patterns.
}

// Ternary operator
тағйирёбанда натиҷа = шарт ? "рост" : "нодуруст";
тағ натиҷа = шарт ? "рост" : "нодуруст";

// Switch equivalent
мувофиқи (қимат) {
Expand All @@ -116,17 +116,17 @@ A comprehensive cheat sheet for SomonScript syntax and common patterns.

```som
// For loop
барои тағйирёбанда и = 0; и < 10; и++ {
барои тағ и = 0; и < 10; и++ {
чоп.сабт(и);
}

// For-in loop (arrays)
барои тағйирёбанда элемент аз массив {
барои тағ элемент аз массив {
чоп.сабт(элемент);
}

// For-in loop (objects)
барои тағйирёбанда калид дар объект {
барои тағ калид дар объект {
чоп.сабт(калид + ": " + объект[калид]);
}

Expand All @@ -147,33 +147,36 @@ A comprehensive cheat sheet for SomonScript syntax and common patterns.

```som
// Array creation
тағйирёбанда мева = ["себ", "мӯз", "анор"];
тағйирёбанда рақамҳо = [1, 2, 3, 4, 5];
тағйирёбанда холӣ: сатр[] = [];

// Array methods
мева.push("шафтолу"); // Add to end
мева.pop(); // Remove from end
мева.unshift("анголур"); // Add to beginning
мева.shift(); // Remove from beginning
мева.length; // Array length
мева.indexOf("себ"); // Find index
мева.includes("мӯз"); // Check if exists
тағ мева = ["себ", "мӯз", "анор"];
тағ рақамҳо = [1, 2, 3, 4, 5];
тағ холӣ: сатр[] = [];

// Array methods with Tajik names
мева.илова("шафтолу"); // push - Илова ба охир
мева.пуш("ангур"); // push (alternative)
мева.баровардан(); // pop - Баровардан аз охир
мева.дарозӣ; // length - Дарозии массив

// Array iteration methods
мева.харита(м => м.калон()); // map - Табдил додан
мева.филтр(м => м !== "себ"); // filter - Филтр кардан
мева.кофтан(м => м === "мӯз"); // find - Ёфтан
мева.буридан(0, 2); // slice - Буридан

// Array iteration
мева.forEach((элемент, индекс) => {
чоп.сабт(`${индекс}: ${элемент}`);
});

тағйирёбанда калонҳо = мева.map(м => м.toUpperCase());
тағйирёбанда сони_кӯтоҳ = мева.filter(м => м.length < 4);
тағ калонҳо = мева.map(м => м.toUpperCase());
тағ сони_кӯтоҳ = мева.filter(м => м.length < 4);
```

### Objects

```som
// Object creation
тағйирёбанда корбар = {
тағ корбар = {
ном: "Анвар",
синну_сол: 30,
шаҳр: "Душанбе",
Expand Down Expand Up @@ -287,8 +290,8 @@ Object.entries(корбар); // Get key-value pairs
### Union Types

```som
тағйирёбанда идентификатор: сатр | рақам = "user123";
тағйирёбанда статус: "барқарор" | "хомӯш" | "дар_интизор" = "барқарор";
тағ идентификатор: сатр | рақам = "user123";
тағ статус: "барқарор" | "хомӯш" | "дар_интизор" = "барқарор";

функсия коркард_кардан(маълумот: сатр | рақам): сатр {
агар typeof маълумот === "сатр" {
Expand All @@ -311,7 +314,7 @@ Object.entries(корбар); // Get key-value pairs
сатҳи_дастрасӣ: рақам;
}

тағйирёбанда супер_корбар: Корбар & Админ = {
тағ супер_корбар: Корбар & Админ = {
ном: "Алӣ",
синну_сол: 30,
сатҳи_дастрасӣ: 9
Expand All @@ -321,19 +324,19 @@ Object.entries(корбар); // Get key-value pairs
### Tuple Types

```som
тағйирёбанда координата: [рақам, рақам] = [41.2, 69.1];
тағйирёбанда корбар_маълумот: [сатр, рақам, мантиқӣ] = ["Анвар", 25, рост];
тағ координата: [рақам, рақам] = [41.2, 69.1];
тағ корбар_маълумот: [сатр, рақам, мантиқӣ] = ["Анвар", 25, рост];

// Named tuple
тағйирёбанда нуқта: [х: рақам, у: рақам, номи_шаҳр: сатр] = [41.2, 69.1, "Душанбе"];
тағ нуқта: [х: рақам, у: рақам, номи_шаҳр: сатр] = [41.2, 69.1, "Душанбе"];
```

## Error Handling

```som
// Try-catch-finally
кӯшиш {
тағйирёбанда натиҷа = хатарнок_амал();
тағ натиҷа = хатарнок_амал();
чоп.сабт(натиҷа);
} гирифтан (хато) {
чоп.хато("Хато рух дод:", хато.паём);
Expand Down Expand Up @@ -408,7 +411,7 @@ Object.entries(корбар); // Get key-value pairs

```som
// Promise creation
тағйирёбанда ваъда = нав Promise<сатр>((ҳал_кардан, рад_кардан) => {
тағ ваъда = нав Promise<сатр>((ҳал_кардан, рад_кардан) => {
setTimeout(() => {
ҳал_кардан("Муваффақият");
}, 1000);
Expand All @@ -427,8 +430,8 @@ Object.entries(корбар); // Get key-value pairs
```som
ҳамзамон функсия маълумот_гирифтан(url: сатр): Promise<сатр> {
кӯшиш {
тағйирёбанда ҷавоб = интизор fetch(url);
тағйирёбанда маълумот = интизор ҷавоб.text();
тағ ҷавоб = интизор fetch(url);
тағ маълумот = интизор ҷавоб.text();
бозгашт маълумот;
} гирифтан (хато) {
чоп.хато("Хато дар гирифтани маълумот:", хато);
Expand All @@ -438,7 +441,7 @@ Object.entries(корбар); // Get key-value pairs

// Usage
ҳамзамон функсия асосӣ() {
тағйирёбанда маълумот = интизор маълумот_гирифтан("https://api.example.com");
тағ маълумот = интизор маълумот_гирифтан("https://api.example.com");
чоп.сабт(маълумот);
}
```
Expand All @@ -448,14 +451,14 @@ Object.entries(корбар); // Get key-value pairs
### Basic Template Literals

```som
тағйирёбанда ном = "Аҳмад";
тағйирёбанда синну = 25;
тағ ном = "Аҳмад";
тағ синну = 25;

// String interpolation
тағйирёбанда паём = `Салом, ${ном}! Шумо ${синну} сола доред.`;
тағ паём = `Салом, ${ном}! Шумо ${синну} сола доред.`;

// Multiline strings
тағйирёбанда матни_чандсатра = `
тағ матни_чандсатра = `
Ин сатри якум
Ин сатри дуюм
Ин сатри сеюм
Expand All @@ -466,14 +469,14 @@ Object.entries(корбар); // Get key-value pairs

```som
// Expression evaluation
тағйирёбанда ҳисоб = `Натиҷа: ${2 + 3}`;
тағ ҳисоб = `Натиҷа: ${2 + 3}`;

// Function calls in templates
функсия форматкунии_сана(сана: Date): сатр {
бозгашт сана.toLocaleDateString();
}

тағйирёбанда паёми_сана = `Имрӯз: ${форматкунии_сана(нав Date())}`;
тағ паёми_сана = `Имрӯз: ${форматкунии_сана(нав Date())}`;
```

## Common Operators
Expand Down Expand Up @@ -530,32 +533,68 @@ Object.entries(корбар); // Get key-value pairs
### Console

```som
// Basic console methods
чоп.сабт("Паём"); // console.log
чоп.хато("Хато"); // console.error
чоп.огоҳӣ("Огоҳӣ"); // console.warn
чоп.маълумот("Маълумот"); // console.info
чоп.исфти("Debug"); // console.debug

// Console table and grouping
чоп.ҷадвал(маълумот); // console.table
чоп.гуруҳ("Гуруҳ"); // console.group
чоп.гуруҳ_охир(); // console.groupEnd
чоп.гуруҳ_пӯшида("Пӯшида"); // console.groupCollapsed

// Console timing
чоп.вақт("timer"); // console.time
чоп.вақт_сабт("timer"); // console.timeLog
чоп.вақт_охир("timer"); // console.timeEnd

// Console counting and misc
чоп.қайд("counter"); // console.count
чоп.қайд_асл("counter"); // console.countReset
чоп.тасдиқ(шарт, "паём"); // console.assert
чоп.полиз(); // console.clear
чоп.феҳрист(объект); // console.dir
чоп.пайҷо(); // console.trace
```

### Math
### Math (Риёзӣ)

```som
Риёзӣ.дуръшака(9); // Math.sqrt(9) = 3
Риёзӣ.қувват(2, 3); // Math.pow(2, 3) = 8
Риёзӣ.тасодуфӣ(); // Math.random()
Риёзӣ.дузкунӣ(4.7); // Math.round(4.7) = 5
Риёзӣ.боло(4.2); // Math.ceil(4.2) = 5
Риёзӣ.поён(4.7); // Math.floor(4.7) = 4
// Math methods - Методҳои математикӣ
Риёзӣ.дуръшака(9); // Math.sqrt(9) = 3 - Решаи квадратӣ
Риёзӣ.қувват(2, 3); // Math.pow(2, 3) = 8 - Қувват/дараҷа
Риёзӣ.тасодуфӣ(); // Math.random() - Рақами тасодуфӣ (0-1)
Риёзӣ.дузкунӣ(4.7); // Math.round(4.7) = 5 - Гирдкунӣ
Риёзӣ.боло(4.2); // Math.ceil(4.2) = 5 - Гирдкунӣ ба боло
Риёзӣ.поён(4.7); // Math.floor(4.7) = 4 - Гирдкунӣ ба поён

// Complex calculations example
тағ радиус = 5;
тағ майдон = 3.14159 * Риёзӣ.қувват(радиус, 2);
тағ аз_1_то_10 = Риёзӣ.поён(Риёзӣ.тасодуфӣ() * 10) + 1;
```

### String Methods

```som
сатр.дарозӣ; // string.length
сатр.калон(); // string.toUpperCase()
сатр.хурд(); // string.toLowerCase()
сатр.қисмат(0, 5); // string.substring(0, 5)
сатр.ҷойгузин("a", "b"); // string.replace("a", "b")
сатр.ҷудокунӣ(","); // string.split(",")
// String properties and methods
сатр.дарозӣ; // string.length - Дарозии сатр
сатр.калон(); // string.toUpperCase() - Ба ҳарфҳои калон
сатр.хурд(); // string.toLowerCase() - Ба ҳарфҳои хурд
сатр.қисмат(0, 5); // string.substring(0, 5) - Зерсатр
сатр.ҷойгузин("a", "b"); // string.replace("a", "b") - Иваз кардан
сатр.ҷудокунӣ(","); // string.split(",") - Ҷудо кардан
сатр.пайвастан(" Ҷаҳон"); // string.concat(" World") - Пайваст кардан

// Example usage
тағ матн = "Салом, Ҷаҳон!";
чоп.сабт(матн.дарозӣ); // 13
чоп.сабт(матн.калон()); // САЛОМ, ҶАҲОН!
чоп.сабт(матн.хурд()); // салом, ҷаҳон!
чоп.сабт(матн.қисмат(0, 5)); // Салом
```

## Best Practices
Expand All @@ -564,8 +603,8 @@ Object.entries(корбар); // Get key-value pairs

```som
// Variables: camelCase in Tajik
тағйирёбанда номиКорбар = "Анвар";
тағйирёбанда синнуСолиКорбар = 25;
тағ номиКорбар = "Анвар";
тағ синнуСолиКорбар = 25;

// Constants: UPPER_CASE
собит МАКС_АНДОЗА = 100;
Expand Down Expand Up @@ -606,7 +645,7 @@ Object.entries(корбар); // Get key-value pairs
```som
// Always handle potential errors
кӯшиш {
тағйирёбанда натиҷа = амали_хатарнок();
тағ натиҷа = амали_хатарнок();
// Handle success
} гирифтан (хато) {
// Handle specific error types
Expand Down
39 changes: 39 additions & 0 deletions example-fibonacci.som
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// 🔢 Ҳисобкунандаи силсилаи Фибоначчӣ

функсия фибоначчӣ(н) {
агар (н <= 1) {
баргардон н;
}
баргардон фибоначчӣ(н - 1) + фибоначчӣ(н - 2);
}

// Чопи силсилаи Фибоначчӣ
чоп.сабт("🇹🇯 Силсилаи Фибоначчӣ:");
чоп.сабт("─────────────────────");

барои (тағйирёбанда и = 0; и <= 10; и++) {
тағйирёбанда натиҷа = фибоначчӣ(и);
чоп.сабт("F(" + и + ") = " + натиҷа);
}

чоп.сабт("");
чоп.сабт("✨ Ҳисоб анҷом ёфт!");

// Версияи оптимизатсияшуда бо кэш
функсия фибоначчӣБоКэш(н, кэш = {}) {
агар (н дар кэш) {
баргардон кэш[н];
}

агар (н <= 1) {
баргардон н;
}

кэш[н] = фибоначчӣБоКэш(н - 1, кэш) + фибоначчӣБоКэш(н - 2, кэш);
баргардон кэш[н];
}

чоп.сабт("");
чоп.сабт("⚡ Версияи тез (бо кэш):");
тағйирёбанда натиҷаи_калон = фибоначчӣБоКэш(30);
чоп.сабт("F(30) = " + натиҷаи_калон);
3 changes: 3 additions & 0 deletions example-greeting.som
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
агар (рост) {
чоп.сабт("Точикистон ба пеш!!!");
}
Loading
Loading