GoDasturchi
Slug Generator 3: Transform

Slug Generator 3: Transform

Slug generatori 3: O'zgartirish

Slug generatorining uchinchi qadami. O'tgan safar cleanText ni qo'lda, bitta-bitta belgi bilan yozdingiz. Endi URL slug uchun bo'shliqlarni tire (hyphen) ga aylantiring.

hello world dan hello-world ga o'tish oson holat. Qiyin joyi — chetlar: ketma-ket bo'shliqlar, atrofdagi bo'sh joy, va matnda allaqachon bo'lgan istalgan tire — bularning barchasi bitta tirega aylanishi kerak, boshida yoki oxirida esa hech qanday tire qolmasligi kerak.

Avval normallashtiring, keyin bo'lib chiqing

Biror funksionallik kerak bo'lganda, uni o'zingiz yaratishdan oldin standart kutubxonada allaqachon bor-yo'qligini tekshiring. Ko'pincha bor bo'ladi. Siz allaqachon chop etish uchun fmt dan foydalangansiz. strings paketi — keyingi ishchi ot, va uning bir nechta funksiyasi shu ishning barchasini qamrab oladi:

ReplaceAll bitta qism-satrning har bir uchrashuvini boshqasiga almashtiradi. Har bir tireni bo'shliqqa tushiring, shunda tire va bo'shliq bir xil turdagi ajratuvchiga aylanadi.

example.go
strings.ReplaceAll("a.b.c", ".", "/")  // "a/b/c"

Fields ketma-ket bo'sh joylar bo'yicha bo'lib chiqadi va bo'sh bo'laklarni tashlab yuboradi, shuning uchun ketma-ketliklar o'zi qisqaradi va chetdagi bo'sh joy o'zi yo'qoladi.

example.go
strings.Fields("  the   quick fox ")  // ["the", "quick", "fox"]

Join satrlar bo'lagini siz tanlagan ajratuvchi bilan qayta birlashtiradi.

example.go
strings.Join([]string{"x", "y", "z"}, ".")  // "x.y.z"

Ularni to'g'ri tartibda chaqirsangiz, ketma-ketliklar, chetdagi bo'sh joy va tasodifiy tirelarning barchasi bir vaqtda hal bo'ladi.

Standart kutubxona juda chuqur. LevelUpGo'da unga bag'ishlangan butun kurslar bor — fayl kirish-chiqishi, HTTP, JSON, matn, vaqt va boshqalar.

Nega stdlib'ga murojaat qilish kerak

Standart kutubxona Go jamoasi tomonidan qo'llab-quvvatlanadi va har bir o'rnatish bilan birga keladi. O'zingiznikini yozishdan yoki uchinchi tomon paketini qo'shishdan oldin, avval shuni tekshiring.

Buni bir marta qo'lda yozib ko'rish esa stdlib qanday ishlashini tushunish uchun hali ham foydali. Mashqda ixtiyoriy qo'shimcha topshiriq bor.

>_ Exercise

Quyidagilarni bajaradigan joinWithHyphens(s string) string funksiyasini yozing:

  • 1. Har bir bo'shliqni tire bilan almashtiradi
  • 2. Ketma-ket kelgan bir nechta bo'shliqni bitta tirega qisqartiradi
  • 3. Boshida yoki oxirida hech qanday tire qoldirmaydi (ular chetdagi bo'shliqdan yoki matndagi tiredan kelgan bo'lishidan qat'i nazar)

Misollar:

  • joinWithHyphens("hello world")"hello-world"
  • joinWithHyphens(" too many spaces ")"too-many-spaces"
  • joinWithHyphens("already-good")"already-good"
  • joinWithHyphens(" edge ")"edge"
  • joinWithHyphens("-hello world")"hello-world" (boshidagi tire ham olib tashlanadi)

Qo'shimcha topshiriq (ixtiyoriy)

Testlar o'tgach, joinWithHyphens ni strings ni import qilmasdan qayta yozib ko'ring. G'oya — satr bo'ylab bir marta yurish va oxirgi yozgan belgingizni kuzatib borish, shunda hech qachon ketma-ket ikkita tire yozmaysiz va tire bilan boshlamaysiz:

  • 1. ' ' va '-' ni bir xil narsa — *ajratuvchi* deb hisoblang. Qolgan hammasi *so'z belgisi*.
  • 2. Runelarni birma-bir yurib, oxirida satrga aylantiradigan []bytega qo'shib boring.
  • 3. Oxirgi nima yozganingizni kuzating. So'z belgisidan keyingi ajratuvchi — bitta tire yozish degani. Boshidagi ajratuvchi, yoki ketma-ket ikkita ajratuvchi — hech narsa yozmaslik degani.
  • 4. Sikldan keyin, agar oxirgi bayt - bo'lsa, uni olib tashlang.

Runelarni qo'lda yurib, []byte yig'ish ReplaceAll, Fields va Join siz uchun qancha ish qilayotganini ko'rsatadi.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Mantiqni o'zingiz yozishdan oldin standart kutubxonaga murojaat qiling. strings paketi matn bilan ishlashning aksariyatini allaqachon qamrab oladi.

NEXT UP

Slug Generator 4: Ship It

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Slug Generator 3: Transform

Slug generatori 3: O'zgartirish

Slug generatorining uchinchi qadami. O'tgan safar cleanText ni qo'lda, bitta-bitta belgi bilan yozdingiz. Endi URL slug uchun bo'shliqlarni tire (hyphen) ga aylantiring.

hello world dan hello-world ga o'tish oson holat. Qiyin joyi — chetlar: ketma-ket bo'shliqlar, atrofdagi bo'sh joy, va matnda allaqachon bo'lgan istalgan tire — bularning barchasi bitta tirega aylanishi kerak, boshida yoki oxirida esa hech qanday tire qolmasligi kerak.

Avval normallashtiring, keyin bo'lib chiqing

Biror funksionallik kerak bo'lganda, uni o'zingiz yaratishdan oldin standart kutubxonada allaqachon bor-yo'qligini tekshiring. Ko'pincha bor bo'ladi. Siz allaqachon chop etish uchun fmt dan foydalangansiz. strings paketi — keyingi ishchi ot, va uning bir nechta funksiyasi shu ishning barchasini qamrab oladi:

ReplaceAll bitta qism-satrning har bir uchrashuvini boshqasiga almashtiradi. Har bir tireni bo'shliqqa tushiring, shunda tire va bo'shliq bir xil turdagi ajratuvchiga aylanadi.

example.go
strings.ReplaceAll("a.b.c", ".", "/")  // "a/b/c"

Fields ketma-ket bo'sh joylar bo'yicha bo'lib chiqadi va bo'sh bo'laklarni tashlab yuboradi, shuning uchun ketma-ketliklar o'zi qisqaradi va chetdagi bo'sh joy o'zi yo'qoladi.

example.go
strings.Fields("  the   quick fox ")  // ["the", "quick", "fox"]

Join satrlar bo'lagini siz tanlagan ajratuvchi bilan qayta birlashtiradi.

example.go
strings.Join([]string{"x", "y", "z"}, ".")  // "x.y.z"

Ularni to'g'ri tartibda chaqirsangiz, ketma-ketliklar, chetdagi bo'sh joy va tasodifiy tirelarning barchasi bir vaqtda hal bo'ladi.

Standart kutubxona juda chuqur. LevelUpGo'da unga bag'ishlangan butun kurslar bor — fayl kirish-chiqishi, HTTP, JSON, matn, vaqt va boshqalar.

Nega stdlib'ga murojaat qilish kerak

Standart kutubxona Go jamoasi tomonidan qo'llab-quvvatlanadi va har bir o'rnatish bilan birga keladi. O'zingiznikini yozishdan yoki uchinchi tomon paketini qo'shishdan oldin, avval shuni tekshiring.

Buni bir marta qo'lda yozib ko'rish esa stdlib qanday ishlashini tushunish uchun hali ham foydali. Mashqda ixtiyoriy qo'shimcha topshiriq bor.

>_ Exercise

Quyidagilarni bajaradigan joinWithHyphens(s string) string funksiyasini yozing:

  • 1. Har bir bo'shliqni tire bilan almashtiradi
  • 2. Ketma-ket kelgan bir nechta bo'shliqni bitta tirega qisqartiradi
  • 3. Boshida yoki oxirida hech qanday tire qoldirmaydi (ular chetdagi bo'shliqdan yoki matndagi tiredan kelgan bo'lishidan qat'i nazar)

Misollar:

  • joinWithHyphens("hello world")"hello-world"
  • joinWithHyphens(" too many spaces ")"too-many-spaces"
  • joinWithHyphens("already-good")"already-good"
  • joinWithHyphens(" edge ")"edge"
  • joinWithHyphens("-hello world")"hello-world" (boshidagi tire ham olib tashlanadi)

Qo'shimcha topshiriq (ixtiyoriy)

Testlar o'tgach, joinWithHyphens ni strings ni import qilmasdan qayta yozib ko'ring. G'oya — satr bo'ylab bir marta yurish va oxirgi yozgan belgingizni kuzatib borish, shunda hech qachon ketma-ket ikkita tire yozmaysiz va tire bilan boshlamaysiz:

  • 1. ' ' va '-' ni bir xil narsa — *ajratuvchi* deb hisoblang. Qolgan hammasi *so'z belgisi*.
  • 2. Runelarni birma-bir yurib, oxirida satrga aylantiradigan []bytega qo'shib boring.
  • 3. Oxirgi nima yozganingizni kuzating. So'z belgisidan keyingi ajratuvchi — bitta tire yozish degani. Boshidagi ajratuvchi, yoki ketma-ket ikkita ajratuvchi — hech narsa yozmaslik degani.
  • 4. Sikldan keyin, agar oxirgi bayt - bo'lsa, uni olib tashlang.

Runelarni qo'lda yurib, []byte yig'ish ReplaceAll, Fields va Join siz uchun qancha ish qilayotganini ko'rsatadi.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Mantiqni o'zingiz yozishdan oldin standart kutubxonaga murojaat qiling. strings paketi matn bilan ishlashning aksariyatini allaqachon qamrab oladi.

NEXT UP

Slug Generator 4: Ship It