Tracks
/
C#
C#
/
Ejercicios
/
Construyendo telemetría
Construyendo telemetría

Construyendo telemetría

Ejercicio de aprendizaje

Introducción

Parámetros

Este ejercicio analiza algunos detalles de los parámetros de los métodos y su uso en C#.

Los parámetros llevan información desde un método que llama hasta un método llamado.

  • El comportamiento de los parámetros se puede modificar con el uso de modificadores como ref y out.

  • Un parámetro con el modificador out devuelve un valor desde el método llamado hacia quien lo llama. El parámetro se puede pasar al método llamado sin estar inicializado y, en cualquier caso, dentro del método llamado se trata como si, al entrar, no se hubiera inicializado. La manera más fácil de entender el comportamiento y las reglas de los modificadores de parámetros es mediante ejemplos (ver abajo) y mensajes del compilador.

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
  • A los parámetros out se les debe asignar un valor dentro del método llamado.

  • Un parámetro con el modificador ref pasa un valor hacia el método llamado. Cuando el método termina, quien lo llamó encontrará en ese parámetro cualquier actualización que haya hecho el método llamado.

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

int importantValue = 6;
Foo(ref importantValue);
return importantValue;
// => 42
  • Los parámetros ref deben ser variables, ya que el método llamado operará directamente sobre el parámetro tal como lo ve quien llama.
  • Los modificadores out y ref son obligatorios tanto en la firma del método llamado como en el lugar donde se hace la llamada.

Instrucciones

El proyecto del carro de control remoto que pusiste en marcha en el ejercicio classes ha salido bien (¡felicidades!) y, gracias a varios acuerdos de patrocinio recientes, hay dinero en el presupuesto para mejoras.

Parte del presupuesto se destina a ofrecer un poco de telemetría.

Para mantener contentos a los patrocinadores, se ha instalado un panel en el carro para mostrar los nombres de los patrocinadores mientras da vueltas a la pista.

Notarás que la incorporación de estas nuevas tecnologías tan sofisticadas ha reducido drásticamente la duración de la batería del carro.

1. Haz que el carro de control remoto muestre los nombres de los patrocinadores

Implementa SetSponsors() para que reciba uno o más nombres de patrocinadores y los guarde en el carro.

Ten en cuenta que se garantiza que el argumento del método SetSponsors() no es nulo.

Implementa DisplaySponsor() para mostrar el patrocinador seleccionado. El primer patrocinador que se pasa tiene un sponsorNum de 0, el segundo, 1, etc.

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

2. Obtén los datos de telemetría del carro

Implementa el método RemoteControlCar.GetTelemetryData().

GetTelemetryData() debe dejar disponibles el porcentaje de batería y la distancia recorrida en metros a través de parámetros out.

GetTelemetryData() debe devolver false si el argumento serialNum es menor que el valor recibido anteriormente. (Hay algún problema relacionado con que intervienen varios nodos de telemetría). En este caso, serialNum se establecerá en el serialNum anterior más alto, y tanto el porcentaje de batería como los metros recorridos se establecerán en -1. Cuando la llamada tiene éxito, serialNum permanece sin cambios.

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. Agrega funcionalidad para que el sistema de telemetría pueda obtener el uso de batería por metro

Implementa el método TelemetryClient.GetBatteryUsagePerMeter().

Este llamará a RemoteControlCar.GetTelemetryData(). Si GetTelemetryData() devuelve false o el carro no se ha conducido, esta rutina debe devolver «no data». Si GetTelemetryData() devuelve true, debe devolver un mensaje con la siguiente forma: «usage-per-meter=BATTERY-USAGE-PER-METER». El cálculo es (100 - el porcentaje de batería actual) dividido entre la distancia recorrida en metros hasta el momento.

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"
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
C# Exercism

¿Todo listo para empezar Construyendo telemetría?

Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.