A Go-ban nem létezik az üres, a null vagy az undefined fogalma a változók értékeinél. A kifejezett kezdőérték nélkül deklarált változók az adott típus nullaértékét kapják.
Az olyan primitív típusok, mint a Boolean értékek, a numerikus típusok és a stringek nullaértéke rendre false, 0, illetve "".
A nil azonosító, ami a nullát jelenti, az összetettebb típusok, például a mutatók, függvények, interfészek, szeletek, csatornák és mapek nullaértéke.
A következő táblázat részletezi a Go típusainak nullaértékét.
| Típus | Nullaérték |
|---|---|
| Boolean | false |
| numerikus | 0 |
| string | "" |
| mutató | nil |
| függvény | nil |
| interfész | nil |
| szelet | nil |
| csatorna | nil |
| map | nil |
Talán feltűnt, hogy a fenti táblázatból hiányoznak a struct típusok. Ennek az az oka, hogy egy struct típus nullaértéke a mezőitől függ. Egy struct akkor veszi fel a nullaértékét, amikor minden mezője felveszi a saját nullaértékét.
A te feladatod, hogy felkészítsd a város informatikai rendszerét a közelgő népszámlálásra. Egészen pontosan azért a programért felelsz, amely a számlálóbiztosok adatait fogja feldolgozni.
A programnak képesnek kell lennie arra, hogy új lakost hozzon létre a rendszerben, amikor megkapja egy lakos adatait. Ezen kívül olyan függvényeket írsz, amelyek biztosítják, hogy a lakos adatai között meglegyenek a kötelező adatok, illetve törlik egy lakos adatait. Végül megszámolod a lakosokat, hogy pontos népszámlálási eredményt kapj.
Amikor egy számlálóbiztos összegyűjti egy lakos adatait, regisztrálnia kell azt a lakost: be kell írnia a rendszerbe a nevét, a korát és a címét.
Valósítsd meg a NewResident függvényt, amely három argumentumot fogad:
A függvény adjon vissza egy mutatót egy Resident structra, amely ezeket az adatokat tárolja.
name := "Matthew Sanabria"
age := 29
address := map[string]string{"street": "Main St."}
NewResident(name, age, address)
// => &{Matthew Sanabria 29 map[street:Main St.]}
A lakosok vonakodhatnak attól, hogy személyes adataikat megadják a számlálóbiztosoknak. Ilyenkor meg kell állapítani, hogy a lakos megadta-e a népszámláláshoz szükséges kötelező adatokat.
Ahhoz, hogy valakit megszámoljanak, a lakosnak nem nulla értéket kell megadnia a nevéhez, és olyan címet, amelynek a street kulcsa nem nulla értéket tartalmaz.
Minden más adat, például a lakos kora, nem kötelező.
Valósítsd meg a HasRequiredInfo metódust, amely egy Boolean értékkel jelzi, hogy a lakos megadta-e a kötelező adatokat.
name := "Matthew Sanabria"
age := 0
address := make(map[string]string)
resident := NewResident(name, age, address)
resident.HasRequiredInfo()
// => false
Az élet gyorsan pereg, és hibák is előfordulnak. Egy lakos elköltözhet a városból. Egy számlálóbiztos is hibázhat az adatok gyűjtése közben. Ilyenkor lehetőséget kell adni arra, hogy egy lakos adatait törölni lehessen, hogy ne számolják meg.
Valósítsd meg a Delete metódust, amely a lakos minden mezőjét a nullaértékére állítja.
name := "Matthew Sanabria"
age := 29
address := map[string]string{"street": "Main St."}
resident := NewResident(name, age, address)
fmt.Println(resident)
// Output: &{Matthew Sanabria 29 map[street:Main St.]}
resident.Delete()
fmt.Println(resident)
// Output: &{ 0 map[]}
Most, hogy a rendszer támogatja a népszámlálási adatokat, itt az idő végrehajtani a népszámlálást, és megszámolni a lakosokat!
Valósítsd meg a Count függvényt, amely egy argumentumot fogad:
Resident structokra mutató pointerekkel.A függvény egy egész számot adjon vissza, amely megmutatja, hány lakost számoltak meg a népszámláláson. Egy lakost csak akkor lehet megszámolni, ha megadta a számlálóbiztosnak a kötelező adatokat.
name1 := "Matthew Sanabria"
age1 := 29
address1 := map[string]string{"street": "Main St."}
resident1 := NewResident(name1, age1, address1)
name2 := "Rob Pike"
age2 := 0
address2 := make(map[string]string)
resident2 := NewResident(name2, age2, address2)
residents := []*Resident{resident1, resident2}
Count(residents)
// => 1
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Go nyelvet 34 fogalom165 feladat segítségével, valódi emberi mentorálással, mindez ingyen.