Track
/
C#
C#
/
Esercizi
/
Costruire la telemetria
Costruire la telemetria

Costruire la telemetria

Esercizio di apprendimento

Introduzione

Parametri

Questo esercizio tratterà alcuni dettagli dei parametri dei metodi e del loro utilizzo in C#.

I parametri trasmettono informazioni da un metodo chiamante a un metodo chiamato.

  • Il comportamento dei parametri può essere modificato dall'uso di modificatori come ref e out.

  • Un parametro con il modificatore out trasmette un valore dal metodo chiamato al chiamante. Il parametro può essere passato al metodo chiamato senza essere inizializzato e in ogni caso, all'interno del metodo chiamato, viene trattato come se all'ingresso non fosse stato inizializzato. Il modo più semplice per comprendere il comportamento e le regole dei modificatori dei parametri è attraverso esempi (vedi sotto) e messaggi del compilatore.

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
  • I parametri out devono ricevere un'assegnazione all'interno del metodo chiamato.

  • Un parametro con il modificatore ref passa un valore a un metodo chiamato. Quando il metodo restituisce, il chiamante troverà in quel parametro tutte le modifiche apportate dal metodo chiamato.

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

int importantValue = 6;
Foo(ref importantValue);
return importantValue;
// => 42
  • I parametri ref devono essere variabili, poiché il metodo chiamato opererà direttamente sul parametro così come è visto dal chiamante.
  • I modificatori out e ref sono richiesti sia nella firma del metodo chiamato sia nel punto di chiamata.

Istruzioni

Il progetto dell'auto radiocomandata che hai avviato nell'esercizio classes è andato bene (congratulazioni!) e, grazie a una serie di recenti accordi di sponsorizzazione, ci sono soldi nel budget per dei miglioramenti.

Parte del budget viene utilizzata per fornire un po' di telemetria.

Per tenere buoni gli sponsor, è stato installato un pannello sull'auto per mostrare i nomi degli sponsor mentre percorre la pista.

Noterai che l'introduzione di queste nuove tecnologie sofisticate ha ridotto drasticamente la durata della batteria dell'auto.

1. Abilita l'auto radiocomandata a mostrare i nomi degli sponsor

Implementa SetSponsors() in modo che accetti uno o più nomi di sponsor e li memorizzi sull'auto.

Nota che l'argomento del metodo SetSponsors() è garantito non nullo.

Implementa DisplaySponsor() per mostrare lo sponsor selezionato. Il primo sponsor passato ha un sponsorNum di 0, il secondo di 1 e così via.

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

2. Ottieni i dati di telemetria dell'auto

Implementa il metodo RemoteControlCar.GetTelemetryData().

GetTelemetryData() deve rendere disponibili, tramite parametri out, la percentuale della batteria e la distanza percorsa in metri.

GetTelemetryData() deve restituire false se l'argomento serialNum è minore del valore ricevuto in precedenza. (C'è qualche problema con il coinvolgimento di più nodi di telemetria). In questo caso serialNum verrà impostato al valore più alto tra i serialNum precedenti e sia la percentuale della batteria sia i metri percorsi verranno impostati a -1. Se la chiamata ha successo, serialNum rimane invariato.

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. Aggiungi funzionalità in modo che il sistema di telemetria possa ottenere il consumo della batteria per metro

Implementa il metodo TelemetryClient.GetBatteryUsagePerMeter().

Questo chiamerà RemoteControlCar.GetTelemetryData(). Se GetTelemetryData() restituisce false o l'auto non è stata guidata, allora questa routine dovrebbe restituire "no data". Se GetTelemetryData() restituisce true, allora dovrebbe essere restituito un messaggio nella forma seguente: "usage-per-meter=BATTERY-USAGE-PER-METER". Dove il calcolo è (100 - percentuale attuale della batteria) diviso per la distanza percorsa finora in metri.

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"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C# Exercism

Vuoi iniziare Costruire la telemetria?

Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.