Rutas
/
C#
C#
/
Ejercicios
/
Construcción de telemetría
Construcción de telemetría

Construcción de 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 transmiten información desde un método que llama hasta un método llamado.

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

  • Un parámetro con el modificador out transmite un valor de vuelta desde el método llamado al método que llama. El parámetro se puede pasar al método llamado sin que se haya inicializado y, en cualquier caso, dentro del método llamado se trata como si, al entrar, no se hubiera inicializado. La forma más sencilla de comprender el comportamiento y las reglas relativas a los modificadores de parámetros es mediante ejemplos (ver más abajo) y los 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
  • Los parámetros out deben asignarse dentro de un método llamado.

  • Un parámetro con el modificador ref pasa un valor a un método llamado. Cuando el método finaliza, el método que llama 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 el método que llama.
  • Los modificadores out y ref son obligatorios tanto en la firma del método llamado como en el lugar de la llamada.

Instrucciones

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

Parte del presupuesto se destina a ofrecer telemetría.

Para mantener contentos a los patrocinadores, se ha instalado un panel en el coche que muestra los nombres de los patrocinadores mientras da vueltas a la pista.

Notarás que la introducción de estas flamantes tecnologías ha reducido drásticamente la duración de la batería del coche.

1. Haz que el coche teledirigido muestre los nombres de los patrocinadores

Implementa SetSponsors() para que reciba uno o varios nombres de patrocinadores y los guarde en el coche.

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 coche

Implementa el método RemoteControlCar.GetTelemetryData().

GetTelemetryData() debe poner a disposición el porcentaje de batería y la distancia recorrida en metros mediante parámetros out.

GetTelemetryData() debe devolver false si el argumento serialNum es menor que el valor recibido anteriormente. (Hay algún problema con que intervienen varios nodos de telemetría). En este caso, serialNum se establecerá en el serialNum anterior más alto y el porcentaje de batería y los metros recorridos se establecerán ambos en -1. Cuando la llamada tenga é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. Añade funcionalidad para que el sistema de telemetría pueda obtener el consumo de batería por metro

Implementa el método TelemetryClient.GetBatteryUsagePerMeter().

Este llamará a RemoteControlCar.GetTelemetryData(). Si GetTelemetryData() devuelve false o el coche 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". Donde el cálculo es (100 - porcentaje de batería actual) dividido por 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 pestaña nueva
C# Exercism

¿Listo para empezar Construcción de telemetría?

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