StringBuilder | C#
Tags: dotnet, csharp, uzbek, stringbuilder
Published: 2024-06-26 10:37:21

**Salom barchaga! Bugun biz C# dastulash tilida StringBuilder sinfini ko'rib chiqamiz! **

**Reja:** 
- Sal kam hech qanday reja yo'q, Sababi biz bugungi darsda StringBuilderni chunchaki dialog sifatida 0 dan Prof darajagacha o'rganamiz! O'ylaymanki bu sizga va boshqalarga yoqadi. Eslatib o'tamiz ushbu maqolada men `sb` o'zgaruvchi nomini e'lon qilmasdan ishlatishim mumkin, lekin chalgimaslik uchun uni shunday tasavvur qiling 

```StringBuilder sb = new StringBuilder(); // oddiy o'zgaruvchi nomi```

**1 Savol:** StringBuilder nima va Nimaga kerak o'zi ?
_C# dasturlash tilida StringBuilder bu - Stringlarni manipulation qilish, ya'ni boshqarish. StringBuilderni ishlatishdan maqsad, bir necha o'zgarishlar kiritilishi mumkin bo'lgan stringlarni ishlashini samaraliroq qilishdir, Ya'ni biz "Hello" so'zini yoki boshqa bir so'zni, gaplarni teskari tartibda chiqaruvchi dastur tuzmoqchi bo'lsak. Ko'pincha tajribasizlik qilib stringni o'zini ishlatamiz, Lekin bu juda katta xato.
Misol: Agar string ishlatsak, String bu immutable hisoblanadi, O'zgarmas._

Buni Amaliy qilib ko'rsatsak!
```
string say = "Hello";
string natija = "";
for (int i = say.Length - 1; i >= 0; i--)
     natija += say[i]; 
Console.WriteLine(natija);  // olleH
```

_Ushbu holatda "Hello" Length 5 ga teng bo'lganligi sabab, Processor tomonida 5 marta yangi str ochiladi. yani bu 5 ta operatsiya bajaradi degani. Har for aylanganda bittadan yangi o'zgaruvchi yaratilib oxiri shu teskari chiqaradi. Bu endi biz kutgan natijani chiqargani bilan, optimal usul emas. Optimal usul qanday bo'ladi desangiz pastga qarang 👇_


```
using System.Text;

string say = "hello";
StringBuilder natija = new StringBuilder();
for (int i = say.Length - 1; i >= 0; i--)
    natija.Append(say[i]);
Console.WriteLine(natija); // olleh 
```
Bunisi ancha yaxshi variantde 😄
Chunki StringBuilder bitta stringni o'zgartiradi. Stringni o'zi esa qayta qayta yangi string yarataveradi. 

**2 savol: ** - StringBuilder Classini qanday yaratishimiz mumkin ? 
Xuddi pastdagidey 👇
```
using System.Text;

StringBuilder salom = new StringBuilder();
```
_Aytgancha ushbu classni yaratishda doim `new` kalit so'zi ishlatiladi!
Tushunganetion ?
_

**3 - savol:** StringBuilder ga matn, string qo'shish uchun qanday usullar yoki functionlar bor ?
_Quyidagicha 👇_
```
StringBuilder salom = new StringBuilder(); 

salom.Append("alik");
salom.Append("yaxshi");
```
Append(); methodi orqali qo'sha olamiz!
Tushundilami ?

**4 - savol: ** StringBuilderdagi mavjud stringni qanday qilib o'zgartirishimiz mumkin ?
```
salom.Replace("salom", "alik");
```
 
Replace(); methodi eng qulay methodlardan biri. Yani bu yerda birinchi parametr bo'lmish "salom" ni "alik" ga almashtirdik

**5 - savol: ** StringBuilderdagi ma'lum bir indexdagi methodni olish yoki o'zgaritish qilish uchun qaysi usullar bor ?

Buning javobi oddiy insert() va remove(), To'gri shu yerda aqliy savol kelishi mumkin. Ularni farqi nimada ?

`Insert()` - bu StringBuilderni ma'lum bir matniga yana matn yoki belgilar qo'shish uchun. Ya'ni 3 qatordan boshlab "ozod" matnini qo'sh degandek :)

`Remove()` - ushbu method, StringBuilderdagi matnning ma'lum bir joyidan boshlab, ma'lum bir ta belgi o'chiradi. Yani 4 chi belgidan boshlab 2 ta belgini o'chir degandek!

Insert(); ga misol:
```
StringBuilder nnnn = new StringBuilder("Salom");
nnnn.Insert(6, "O'zbeklar"); // Salom O'zbeklar
```

Remove(); ga misol: 
```
StringBuilder sb = new StringBuilder("Hello Uzbeks");
sb.Remove(5, 3); // Hellobeks
```

Tushundilarmi endi ?

**6 savol: ** StringBuilderning uzunligini qanday aniqlashimiz mumkin ?

Javobi oddiy: Length methodi orqali, lekin shu o'rinda Lengthni olish uchun bitta int o'zgaruvchisi kerak bo'lishi mumkin. Pastdagiga qarangda👇
```
StringBuilder sb = new StringBuilder("Hello");
int sbUzunligi = sb.Length; // 5
```

**7 savol: ** StringBuilder obyektini stringga o'girish uchun nima qilamiz?

Ushbu amalni bajarishimiz uchun bizga ToString() methodi yordamga keladi. Uni ishlashi oddiy >> Amaliy ko'rishingiz mumkin 👇

```
string natija sb = ToString(); 
```

**8 Savol: **StringBuilderning si'gimi va uni qanday o'zgartiramiz ?

`Sig'im is Capasity` degan
**Javob: **StringniBuilderning sig'imi degani, u uning ichki xotiradagi maksimal uzunligi. Sigimi oshib ketganda xotiradan yangi joy ajratiladi. Sigimni Capacity methodi orqali ko'rishimiz va o'zgartirishimiz mumkin 👇 

```
int sigim = sb.Capacity; 
sb.Capacity = 100; // sigimi 100 ta belgi uchun bo'ladi endi😄
```

**9 savol: **StringBuilderdan nega foydalanish kerak ? Afzalliklar nima uni ? 

- Tezroq ishlayd, anu stringga o'xshab yangi obyektlar yaratib o'tirmaydi. 
- Xotira samaradorligini oshiradi | chunki 👆
- Bir necha o'zgarishlar kerak bo'lganda, qulaylikni dodasini yaratadi.

**10 savol: ** StringBuilderni qachon ishlatmaslik kerak?

_StringBuilderni kichik stringlar qo'shish, yoki kichik o'zgartirishlar uchun ishlatmaslik kerak. Yani kichik narsa, amaliyotlarda stringni o'zi ham yetadi. Lekin kattaroq narsaga esa StringBuilderni ishlatishimiz kerak . Agar katta narsalarda ham StringBuilder ishlatishni xohlamasangiz unda tabriklayman siz yaxshi dasturchi emassiz (Hazil albatta)._


**Oxirida bir Yetim Savolcha bo'lishi mumkin 😄: StringBuilder so'zini ma'nosi nima ? **

> String = matn, Builder = quruvchi    =>>   MatnQuruvchi