Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
442 changes: 442 additions & 0 deletions book/01-муқаддима.md

Large diffs are not rendered by default.

488 changes: 488 additions & 0 deletions book/02-асосҳои-забон.md

Large diffs are not rendered by default.

307 changes: 307 additions & 0 deletions book/03-намудҳои-маълумот.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,307 @@
# Боби 3: Намудҳои маълумот дар SomonScript

## 3.1. Намудҳои ибтидоӣ (Primitive Types)

### 3.1.1. Сатр (String)

Сатр барои нигоҳдории матн истифода мешавад. Онро дар байни кавычкаҳои дукарата `"..."` ё `'...'` менависанд.

```somonscript
тағйирёбанда ном: сатр = "Аҳмад";
тағйирёбанда шаҳр: сатр = 'Душанбе';
тағйирёбанда паём: сатр = "Салом ҷаҳон!";

чоп.сабт(ном); // Аҳмад
чоп.сабт(шаҳр); // Душанбе
чоп.сабт(паём); // Салом ҷаҳон!
```

**Амалиёт бо сатрҳо:**

```somonscript
// Пайваст кардани сатрҳо
тағйирёбанда ном: сатр = "Аҳмад";
тағйирёбанда фамилия: сатр = "Раҳимов";
тағйирёбанда номи_пурра: сатр = ном + " " + фамилия;
чоп.сабт(номи_пурра); // Аҳмад Раҳимов

// Дарозии сатр
тағйирёбанда матн: сатр = "SomonScript";
чоп.сабт(матн.дарозӣ); // 12

// Ибораҳои литералӣ (Template Literals)
тағйирёбанда синну_сол: рақам = 25;
тағйирёбанда маълумот: сатр = `Ман ${ном} ҳастам ва ${синну_сол} сола дорам.`;
чоп.сабт(маълумот); // Ман Аҳмад ҳастам ва 25 сола дорам.
```

### 3.1.2. Рақам (Number)

Рақам барои нигоҳдории арзишҳои ададӣ (бутун ва касрӣ) истифода мешавад.

```somonscript
// Ададҳои бутун
тағйирёбанда синну_сол: рақам = 25;
тағйирёбанда шумораи_донишҷӯён: рақам = 1000;

// Ададҳои касрӣ
тағйирёбанда қимат: рақам = 99.99;
собит ПИ: рақам = 3.14159;

// Ададҳои манфӣ
тағйирёбанда харораҷот: рақам = -50;
тағйирёбанда маблағ: рақам = -1000.50;

чоп.сабт(синну_сол); // 25
чоп.сабт(қимат); // 99.99
чоп.сабт(ПИ); // 3.14159
```

**Амалиёти риёзӣ:**

```somonscript
тағйирёбанда а: рақам = 10;
тағйирёбанда б: рақам = 3;

чоп.сабт("Ҷамъ: " + (а + б)); // Ҷамъ: 13
чоп.сабт("Тарҳ: " + (а - б)); // Тарҳ: 7
чоп.сабт("Зарб: " + (а * б)); // Зарб: 30
чоп.сабт("Тақсим: " + (а / б)); // Тақсим: 3.333...
чоп.сабт("Боқимонда: " + (а % б)); // Боқимонда: 1
```

### 3.1.3. Мантиқӣ (Boolean)

Мантиқӣ танҳо ду қимат метавонад дошта бошад: `дуруст` (true) ё `нодуруст` (false).

```somonscript
тағйирёбанда донишҷӯ_аст: мантиқӣ = дуруст;
тағйирёбанда устод_аст: мантиқӣ = нодуруст;

чоп.сабт(донишҷӯ_аст); // true
чоп.сабт(устод_аст); // false

// Истифода дар шартҳо
тағйирёбанда синну_сол: рақам = 20;
тағйирёбанда калонсол_аст: мантиқӣ = синну_сол >= 18;
чоп.сабт(калонсол_аст); // true
```

### 3.1.4. Холӣ (Null)

`холӣ` маънои дорад, ки тағйирёбанда қимат надорад (холӣ аст).

```somonscript
тағйирёбанда маълумот: холӣ = холӣ;
чоп.сабт(маълумот); // null

// Истифода барои нишон додани набудани қимат
тағйирёбанда натиҷа: рақам | холӣ = холӣ;
чоп.сабт(натиҷа); // null
```

### 3.1.5. Беқимат (Undefined)

`беқимат` маънои дорад, ки тағйирёбанда ҳанӯз қимат нагирифтааст.

```somonscript
тағйирёбанда маълумот: беқимат;
чоп.сабт(маълумот); // undefined
```

### 3.1.6. Калонрақам (BigInt)

Барои кор бо ададҳои хеле калон.

```somonscript
тағйирёбанда калон_адад: калонрақам = 9007199254740991n;
чоп.сабт(калон_адад); // 9007199254740991n
```

### 3.1.7. Рамз (Symbol)

Барои эҷоди идентификаторҳои беназир.

```somonscript
тағйирёбанда калид1: рамз = Рамз("калид");
тағйирёбанда калид2: рамз = Рамз("калид");
// калид1 ва калид2 мухталифанд
```

## 3.2. Намудҳои махсус (Special Types)

### 3.2.1. Ҳар (Any)

`ҳар` маънои дорад, ки тағйирёбанда метавонад ҳар намуди қиматро дошта бошад.

```somonscript
тағйирёбанда қимат: ҳар = "сатр";
чоп.сабт(қимат); // сатр

қимат = 123;
чоп.сабт(қимат); // 123

қимат = дуруст;
чоп.сабт(қимат); // true
```

### 3.2.2. Ношинос (Unknown)

Монанди `ҳар`, вале бехатартар. Пеш аз истифода бояд намудашро санҷид.

```somonscript
тағйирёбанда қимат: ношинос = "сатр";

// Пеш аз истифода бояд намудро санҷид
агар (навъи қимат === "сатр") {
чоп.сабт(қимат);
}
```

### 3.2.3. Беджавоб (Void)

Истифода мешавад барои нишон додани он ки функсия ҳеҷ чиз бармегардонад.

```somonscript
функсия салом(): беджавоб {
чоп.сабт("Салом!");
// ҳеҷ чиз бармегардонад
}
```

### 3.2.4. Абадан (Never)

Барои функсияҳое ки ҳеҷ гоҳ тамом намешаванд ё ҳамеша хато мепартоянд.

```somonscript
функсия хатои_фоҷиавӣ(паём: сатр): абадан {
партофтан нав Хато(паём);
}
```

## 3.3. Намудҳои мураккаб (Complex Types)

### 3.3.1. Массив (Array)

Массив барои нигоҳдории рӯйхати қиматҳо истифода мешавад.

```somonscript
// Массиви ададҳо
тағйирёбанда ададҳо: рақам[] = [1, 2, 3, 4, 5];
чоп.сабт(ададҳо[0]); // 1
чоп.сабт(ададҳо[2]); // 3

// Массиви сатрҳо
тағйирёбанда номҳо: сатр[] = ["Аҳмад", "Фотима", "Ҳасан"];
чоп.сабт(номҳо[1]); // Фотима

// Дарозии массив
чоп.сабт(ададҳо.дарозӣ); // 5

// Илова кардан ба массив
ададҳо.илова(6);
чоп.сабт(ададҳо); // [1, 2, 3, 4, 5, 6]
```

### 3.3.2. Объект (Object)

Объект барои нигоҳдории маълумоти мураккаб бо калидҳо истифода мешавад.

```somonscript
// Эҷоди объект
тағйирёбанда шахс: объект = {
ном: "Аҳмад",
фамилия: "Раҳимов",
синну_сол: 25,
донишҷӯ_аст: дуруст
};

// Дастрасӣ ба хосиятҳо
чоп.сабт(шахс.ном); // Аҳмад
чоп.сабт(шахс.синну_сол); // 25

// Тағйир додани хосиятҳо
шахс.синну_сол = 26;
чоп.сабт(шахс.синну_сол); // 26

// Илова кардани хосияти нав
шахс.шаҳр = "Душанбе";
чоп.сабт(шахс.шаҳр); // Душанбе
```

### 3.3.3. Tuple (Кортеж)

Массиви бо шумораи муайян ва намудҳои муайяни элементҳо.

```somonscript
// Эҷоди tuple
тағйирёбанда маълумот: [сатр, рақам, мантиқӣ] = ["Аҳмад", 25, дуруст];

чоп.сабт(маълумот[0]); // Аҳмад
чоп.сабт(маълумот[1]); // 25
чоп.сабт(маълумот[2]); // true
```

## 3.4. Муайян кардани намуди тағйирёбанда

Барои муайян кардани намуди тағйирёбанда оператори `навъи` истифода мешавад:

```somonscript
тағйирёбанда ном: сатр = "Аҳмад";
тағйирёбанда синну_сол: рақам = 25;
тағйирёбанда дуруст_аст: мантиқӣ = дуруст;

чоп.сабт(навъи ном); // сатр
чоп.сабт(навъи синну_сол); // рақам
чоп.сабт(навъи дуруст_аст); // мантиқӣ
```

## 3.5. Мисоли комплексӣ

```somonscript
// Системаи маълумоти донишҷӯ
собит НОМИ_ДОНИШГОҲ: сатр = "Донишгоҳи миллии Тоҷикистон";

// Маълумоти донишҷӯ
тағйирёбанда донишҷӯ: объект = {
ном: "Аҳмад",
фамилия: "Раҳимов",
синну_сол: 20,
донишкада: "Математика ва механика",
курс: 3,
бахоҳо: [5, 4, 5, 5, 4],
фаъол_аст: дуруст
};

// Намоиши маълумот
чоп.сабт("=== " + НОМИ_ДОНИШГОҲ + " ===");
чоп.сабт(`Донишҷӯ: ${донишҷӯ.ном} ${донишҷӯ.фамилия}`);
чоп.сабт(`Синну сол: ${донишҷӯ.синну_сол}`);
чоп.сабт(`Донишкада: ${донишҷӯ.донишкада}`);
чоп.сабт(`Курс: ${донишҷӯ.курс}`);

// Ҳисоби миёнаи бахо
тағйирёбанда ҷамъи_бахоҳо: рақам = 0;
барои (тағйирёбанда и: рақам = 0; и < донишҷӯ.бахоҳо.дарозӣ; и++) {
ҷамъи_бахоҳо = ҷамъи_бахоҳо + донишҷӯ.бахоҳо[и];
}
тағйирёбанда миёнаи_бахо: рақам = ҷамъи_бахоҳо / донишҷӯ.бахоҳо.дарозӣ;
чоп.сабт(`Миёнаи бахо: ${миёнаи_бахо}`);
```

## 3.6. Хулоса

Дар ин боб шумо омӯхтед:
- Намудҳои ибтидоӣ: сатр, рақам, мантиқӣ, холӣ, беқимат
- Намудҳои махсус: ҳар, ношинос, беджавоб, абадан
- Намудҳои мураккаб: массив, объект, tuple
- Чӣ тавр бо намудҳои гуногун кор кардан

---

**Машқҳо:**

1. Массиве эҷод кунед, ки 5 адади дӯстдоштаи шумо дорад ва онҳоро як ба як чоп кунед
2. Объекте созед барои китоб бо хосиятҳои: ном, муаллиф, соли нашр, саҳифаҳо
3. Ду массиви ададҳо эҷод кунед ва ҷамъи ҳамаи элементҳои онҳоро ҳисоб кунед
4. Объекте барои автомобил созед бо маълумоти тафсилӣ ва онро чоп кунед
Loading
Loading