Kurzusok
/
Go
Go
/
Feladatok
/
Népszámlálás
Népszámlálás

Népszámlálás

Tanulófeladat

Bevezetés

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.

Utasítások

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.

1. Új lakos létrehozása

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 lakos nevét.
  • A lakos korát.
  • A lakos címét.

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.]}

2. A kötelező adatok ellenőrzése

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

3. A lakos adatainak törlése

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[]}

4. A lakosok megszámolása

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:

  • Egy slice-ot, benne 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
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Go Exercism

Készen állsz elkezdeni a(z) Népszámlálás feladatot?

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.