Tracks
/
Cairo
Cairo
/
Ejercicios
/
Robot del aeropuerto
Robot del aeropuerto

Robot del aeropuerto

Ejercicio de aprendizaje

Introducción

Los genéricos te permiten escribir código que funciona con varios tipos sin duplicarlo. Define tipos genéricos con paréntesis angulares <T>, donde T es un marcador de posición para cualquier tipo.

fn largest_list<T>(l1: Array<T>, l2: Array<T>) -> Array<T> {
    if l1.len() > l2.len() {
        l1
    } else {
        l2
    }
}

Cairo requiere límites de trait para especificar qué operaciones debe soportar el tipo genérico. Puedes agregar restricciones usando la sintaxis +:

fn process_data<T, +Drop<T>, +Copy<T>>(value: T) -> T {
    // Function body
}

Las estructuras también pueden ser genéricas:

#[derive(Drop)]
struct Container<T> {
    value: T,
}

Los traits también pueden ser genéricos, lo que les permite funcionar con distintos tipos:

trait Processor<T> {
    fn process(self: @T) -> ByteArray;
}

impl MyProcessor<T, +Drop<T>> of Processor<T> {
    fn process(self: @T) -> ByteArray {
        "processed"
    }
}

Las funciones pueden aceptar parámetros genéricos con límites de trait, lo que les permite funcionar con cualquier tipo que implemente el trait requerido:

fn use_processor<T, +Processor<T>, +Drop<T>>(item: T) -> ByteArray {
    item.process()
}

Instrucciones

El nuevo aeropuerto de Berlín te contrató como desarrollador para su laboratorio de robots. Tienen robots torpes, de aspecto un tanto humanoide, que están tratando de usar para mejorar la atención al cliente.

Tu primera tarea en el trabajo es programar el robot para que salude a las personas en su idioma nativo después de que escaneen sus pasaportes en el mostrador de auto check-in.

El robot está orgulloso de sus habilidades, así que siempre dirá primero qué idioma puede hablar y luego saludará a la persona. Por ejemplo, si alguien escanea un pasaporte alemán, el robot diría:

I can speak German: Hallo Dietrich!

1. Crea la funcionalidad abstracta de saludo

Necesitas estructurar tu código para que tú y otros desarrolladores puedan agregar idiomas fácilmente.

Como primer paso, define un trait Greeter con dos funciones.

  • language_name, que devuelve el idioma (un ByteArray) que el robot usará para saludar al visitante.
  • greet, que acepta el nombre de un visitante (un ByteArray) y devuelve el mensaje de saludo en un idioma específico (un ByteArray).

Luego, implementa una función say_hello que acepta el nombre del visitante y algo que implementa el trait Greeter, y que devuelve el saludo deseado (un ByteArray). Por ejemplo, imagina una implementación alemana de Greeter para la cual language_name devuelve "German" y greet devuelve "Hallo {name}!":

say_hello("Dietrich", germanGreeter)
// => "I can speak German: Hallo Dietrich!"

2. Implementa el italiano

Ahora haz que el robot funcione para las personas que escanean pasaportes italianos.

Crea una struct Italian e implementa las dos funciones para cumplir con el trait Greeter de la tarea 1. Puedes saludar a alguien en italiano con "Ciao {name}!".

3. Implementa el francés

Antes de dar por terminado el día, se supone que debes agregar la funcionalidad para saludar a las personas en francés.

Crea una struct French e implementa las dos funciones para cumplir con el trait Greeter. Puedes saludar a alguien en francés con "Bonjour {name}!".

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Cairo Exercism

¿Todo listo para empezar Robot del aeropuerto?

Regístrate en Exercism para aprender y dominar Cairo con 25 conceptos68 ejercicios y mentoría humana real, todo gratis.