Tracks
/
Go
Go
/
Übungen
/
Volkszählung
Volkszählung

Volkszählung

Lernübung

Einführung

Go kennt kein Konzept von leer, null oder undefiniert für Variablenwerte. Variablen, die ohne einen expliziten Anfangswert deklariert werden, haben standardmäßig den Nullwert ihres jeweiligen Typs.

Der Nullwert für primitive Typen wie boolesche Werte, numerische Typen und Strings ist false, 0 bzw. "".

Der Bezeichner nil, der für Null steht, ist der Nullwert für komplexere Typen wie Zeiger, Funktionen, Interfaces, Slices, Channels und Maps.

Die folgende Tabelle zeigt den Nullwert für die Typen von Go.

Typ Nullwert
boolescher Wert false
numerisch 0
String ""
Zeiger nil
Funktion nil
Interface nil
Slice nil
Channel nil
Map nil

Vielleicht ist dir aufgefallen, dass Struct-Typen in der obigen Tabelle fehlen. Das liegt daran, dass der Nullwert eines Struct-Typs von seinen Feldern abhängt. Ein Struct hat dann seinen Nullwert, wenn alle seine Felder auf ihren jeweiligen Nullwert gesetzt sind.

Anleitung

Es ist deine Aufgabe, das IT-System der Stadt auf eine bevorstehende Volkszählung vorzubereiten. Genauer gesagt bist du für das Programm verantwortlich, das die Daten der Mitarbeiter der Volkszählung verarbeitet.

Das Programm muss in der Lage sein, einen neuen Einwohner im System anzulegen, wenn ihm die Informationen eines Einwohners übergeben werden. Außerdem erstellst du Funktionen, die sicherstellen, dass die erforderlichen Informationen in den Daten eines Einwohners vorhanden sind, und die die Daten eines Einwohners löschen. Zuletzt zählst du die Einwohner, um eine genaue Zählung für die Volkszählung zu liefern.

1. Einen neuen Einwohner anlegen

Wenn ein Mitarbeiter der Volkszählung die Informationen eines Einwohners erfasst, muss er diesen Einwohner registrieren, indem er seinen Namen, sein Alter und seine Adresse in das System eingibt.

Implementiere die Funktion NewResident, die drei Argumente entgegennimmt:

  • Der Name des Einwohners.
  • Das Alter des Einwohners.
  • Die Adresse des Einwohners.

Die Funktion sollte einen Pointer auf ein Resident-Struct zurückgeben, das diese Informationen enthält.

name := "Matthew Sanabria"
age := 29
address := map[string]string{"street": "Main St."}

NewResident(name, age, address)
// => &{Matthew Sanabria 29 map[street:Main St.]}

2. Erforderliche Informationen validieren

Einwohner zögern vielleicht, den Mitarbeitern der Volkszählung persönliche Daten preiszugeben. In diesen Fällen muss festgestellt werden, ob der Einwohner die erforderlichen Informationen angegeben hat, um bei der Volkszählung gezählt zu werden.

Um gezählt zu werden, muss ein Einwohner einen Wert ungleich null für seinen Namen angeben sowie eine Adresse, die einen Wert ungleich null für den Schlüssel street enthält. Alle anderen Informationen, wie das Alter des Einwohners, sind optional. Implementiere die Methode HasRequiredInfo, die einen booleschen Wert zurückgibt, der angibt, ob der Einwohner die erforderlichen Informationen angegeben hat.

name := "Matthew Sanabria"
age := 0
address := make(map[string]string)

resident := NewResident(name, age, address)

resident.HasRequiredInfo()
// => false

3. Einwohnerdaten löschen

Das Leben geht schnell und Fehler passieren. Ein Einwohner kann aus der Stadt wegziehen. Ein Mitarbeiter der Volkszählung kann beim Erfassen der Daten Fehler machen. In diesen Fällen muss es möglich sein, die Daten eines Einwohners zu löschen, damit er nicht gezählt wird.

Implementiere die Methode Delete, die alle Felder des Einwohners auf ihren Nullwert setzt.

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. Die Einwohner zählen

Jetzt, da das System Volkszählungsdaten unterstützt, ist es an der Zeit, die Volkszählung durchzuführen und die Einwohner zu zählen!

Implementiere die Funktion Count, die ein Argument entgegennimmt:

  • Einen Slice von Pointern auf Resident-Structs.

Die Funktion sollte eine Ganzzahl zurückgeben, die angibt, wie viele Einwohner bei der Volkszählung gezählt wurden. Ein Einwohner kann nur gezählt werden, wenn er dem Mitarbeiter der Volkszählung die erforderlichen Informationen angegeben hat.

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
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Go Exercism

Bereit, mit Volkszählung zu starten?

Melde dich bei Exercism an, um Go mit 34 Konzepte166 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.