Pratybos — parašyk funkcijas
Skaityti apie eilutes neužtenka — reikia rašyti. Penkios užduotys, nuo lengvos iki sunkesnės. Kiekvienai parašyk funkciją, paleisk su pavyzdžiais, tada palygink su sprendimu. Bandyk pats prieš žiūrėdamas.
1 (lengva) — charCount. Grąžink tikrą simbolių skaičių (ne baitų).
charCount("ąžuolas") → 7 charCount("obuolys") → 7
func charCount(s string) int {
return utf8.RuneCountInString(s)
}
2 (lengva) — initials. Iš „Jonas Jonaitis" padaryk „JJ": pirma kiekvieno žodžio raidė, didžioji.
initials("Jonas Jonaitis") → "JJ" initials("ąžuolas uosis") → "ĄU"
func initials(fullName string) string {
var b strings.Builder
for _, word := range strings.Fields(fullName) { // Fields skaido pagal tarpus
r := []rune(word)
b.WriteString(strings.ToUpper(string(r[0]))) // r[0] = pirmas SIMBOLIS
}
return b.String()
}
3 (vidutinė) — truncateRunes. Sutrumpink iki max simbolių ir pridėk „…", jei ilgesnė. Svarbu: neperkirsk „ą" per pusę.
truncateRunes("ąžuolynas prie ežero", 9) → "ąžuolynas…"
truncateRunes("Go", 9) → "Go"
func truncateRunes(s string, max int) string {
r := []rune(s)
if len(r) <= max {
return s
}
return string(r[:max]) + "…"
}
4 (vidutinė) — slug. Padaryk „nuorodos" formą: mažosios raidės, tarpai → brūkšniai, be kraštinių tarpų.
slug(" The Go Language ") → "the-go-language"
func slug(title string) string {
return strings.ReplaceAll(strings.ToLower(strings.TrimSpace(title)), " ", "-")
}
5 (sunkesnė) — banner su strings.Builder. Grąžink s, pakartotą n kartų, naudodamas Builder (ne += cikle).
banner("=", 5) → "=====" banner("ab", 3) → "ababab"
func banner(s string, n int) string {
var b strings.Builder
for i := 0; i < n; i++ {
b.WriteString(s)
}
return b.String()
}
Patarimas. Kiekvieną funkciją laikinai iškviesk
mainiš karto (fmt.Println(charCount("ąžuolas"))) ir patikrink prieš pavyzdžius. Šios mažos, „grynos" funkcijos (be įvesties, be būsenos) — būtent tokias 13 pamokoje testuosim automatiškai sugo test.