Kurzusok
/
C#
C#
/
Feladatok
/
Telemetria építése
Telemetria építése

Telemetria építése

Tanulófeladat

Bevezetés

Paraméterek

Ez a feladat a metódusparaméterek néhány részletével és azok C#-beli használatával foglalkozik.

A paraméterek információt közvetítenek a hívó metódustól a hívott metódushoz.

  • A paraméterek viselkedése módosítható olyan módosítók használatával, mint a ref és az out.

  • Az out módosítóval ellátott paraméter egy értéket közvetít vissza a hívott metódustól a hívóhoz. A paraméter inicializálás nélkül átadható a hívott metódusnak, és a hívott metódusban mindenképpen úgy kezelik, mintha belépéskor nem inicializálták volna. A paramétermódosítók viselkedését és szabályait a legkönnyebben példákon keresztül (lásd alább) és a fordító üzenetein keresztül értheted meg.

void Foo(out int val)
{
    val = 42;
}
void Bar(int val)
{
    val = 42;
}

int importantValue = 1729;
Foo(out importantValue);
var result = importantValue == 42;
// => true

importantValue = 1729;
Bar(importantValue);
result = importantValue == 1729;
// => true
  • Az out paramétereknek a hívott metóduson belül értéket kell kapniuk.

  • A ref módosítóval ellátott paraméter értéket ad át a hívott metódusnak. Amikor a metódus visszatér, a hívó a paraméterben megtalálja a hívott metódus által végrehajtott összes módosítást.

void Foo(ref int val)
{
    val *= 7;
}

int importantValue = 6;
Foo(ref importantValue);
return importantValue;
// => 42
  • A ref paramétereknek változóknak kell lenniük, mert a hívott metódus közvetlenül azon a paraméteren fog működni, ahogyan a hívó látja.
  • Az out és a ref módosítóra egyaránt szükség van a hívott metódus szignatúrájában és a hívás helyén is.

Utasítások

A távirányítós autó projekt, amelyet a classes feladatban indítottál el, jól sikerült (gratulálunk!), és néhány nemrégiben kötött szponzorációs megállapodásnak köszönhetően van pénz a költségvetésben fejlesztésekre.

A költségvetés egy részét telemetria biztosítására fordítják.

Hogy a szponzorok kedvében járjanak, egy panelt szereltek fel az autóra, amely a szponzorok nevét jeleníti meg, miközben az autó körbehalad a pályán.

Észre fogod venni, hogy ezeknek a divatos új technológiáknak a bevezetése drasztikusan csökkentette az autó akkumulátorának élettartamát.

1. Tedd lehetővé, hogy a távirányítós autó megjelenítse a szponzorok nevét

Valósítsd meg a SetSponsors() metódust, amely egy vagy több szponzornevet fogad, és eltárolja azokat az autón.

Ne feledd, hogy a SetSponsors() metódus argumentuma garantáltan nem null.

Valósítsd meg a DisplaySponsor() metódust, amely megjeleníti a kiválasztott szponzort. Az elsőként átadott szponzor sponsorNum értéke 0, a másodiké 1, és így tovább.

var car = RemoteControlCar.Buy();
car.SetSponsors("Exercism", "Walker Industries", "Acme Co.");
var sp2 = car.DisplaySponsor(sponsorNum: 1);
// => "Walker Industries"

2. Kérd le az autó telemetriai adatait

Valósítsd meg a RemoteControlCar.GetTelemetryData() metódust.

A GetTelemetryData() metódus tegye elérhetővé az akkumulátorszázalékot és a méterben megtett távolságot out paramétereken keresztül.

A GetTelemetryData() metódus false értéket adjon vissza, ha a serialNum argumentum kisebb a korábban kapott értéknél. (Valami probléma merült fel a több telemetriai csomóponttal kapcsolatban.) Ebben az esetben a serialNum a legmagasabb korábbi serialNum értékre áll be, az akkumulátorszázalék és a megtett méterek pedig -1-re állnak. Sikeres hívás esetén a serialNum változatlan marad.

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
int serialNum = 4;
car.GetTelemetryData(ref serialNum, out int batteryPercentage, out int distanceDrivenInMeters);
// => true, 4L, 80, 4

serialNum = 1;
car.GetTelemetryData(ref serialNum, out batteryPercentage, out distanceDrivenInMeters);
// => false, 4L, -1, -1

3. Adj hozzá funkciót, hogy a telemetriai rendszer le tudja kérni a méterenkénti akkumulátorhasználatot

Valósítsd meg a TelemetryClient.GetBatteryUsagePerMeter() metódust.

Ez meghívja a RemoteControlCar.GetTelemetryData() metódust. Ha a GetTelemetryData() false értéket ad vissza, vagy az autót nem vezették, akkor ennek a rutinnak „no data” értéket kell visszaadnia. Ha a GetTelemetryData() true értéket ad vissza, akkor a következő formájú üzenetet kell visszaadni: „usage-per-meter=BATTERY-USAGE-PER-METER”. A számítás: (100 - az aktuális akkumulátorszázalék) osztva az eddig megtett távolsággal méterben.

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
var tc = new TelemetryClient(car);
int serialNum = 4;
tc.GetBatteryUsagePerMeter(serialNum);
// => "usage-per-meter=5"

serialNum = 1;
tc.GetBatteryUsagePerMeter(serialNum);
// => "no data"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
C# Exercism

Készen állsz elkezdeni a(z) Telemetria építése feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.