Rust – Función genérica

En Rust, las funciones genéricas son muy útiles. Genérico hace que el código sea más flexible y proporciona más funcionalidad a las personas que llaman a la función. Previene la duplicación de código ya que no es necesario definir diferentes funciones de diferentes tipos. Los genéricos se especifican en la firma de la función donde realmente especificamos el tipo de datos de los parámetros y el tipo de retorno.

Veamos un ejemplo de funciones normales:

fn función de muestra1(varX:i32)->i32{

// esta función acepta enteros y devuelve un entero

……………….

………………..

}

fn función de muestra2(varX:f64)->f64{

……

……

// acepta float y devuelve float

// misma funcionalidad de la función anterior

}

Arriba están las dos funciones que tienen la misma funcionalidad pero debido a la diferencia en el tipo de parámetros y el tipo de retorno, se definen dos funciones. Pero la función genérica nos ayudará a definir la función una vez y usarla con múltiples tipos.

Sintaxis:

fn functionName<T>(variable_name1 : T, variable_name2 : T ,...) -> T {
......
......
}
where T represents the generic type. variable_name1, 
variable_name2 are parameters of type generic.
The function will return a value of the same type T.
Let's look at the coding part of using a generic function.

Veamos otro ejemplo para escribir un programa para sumar dos números del mismo tipo en Rust.

Ejemplo 1:

Rust

// Rust code for addition
fn main() {
    println!("Addition between 10 & 20 is {}", sumGeneric(10,20));//30
    println!("Addition between 10.1 & 20.3 is {}", sumGeneric(10.1,20.3));//30.4
}
  
// generic function that add two numbers
use std::ops::Add;
fn sumGeneric<T:Add<Output = T> + Copy> (a: T, b: T) -> T {
    return a + b;
}

Producción:

 

Si no usamos la función genérica, entonces necesitamos escribir dos funciones diferentes donde una función acepta números enteros y devuelve un número entero y otra función que acepta números de punto flotante y devuelve un resultado de punto flotante. Así que aquí la función genérica nos ayuda a evitar la redundancia de código.

Veamos otro ejemplo de función genérica para una mejor comprensión.

Ejemplo 2:

Rust

// Rust program to find the largest number among 3 numbers.
fn main() {
    println!("Greatest among 1, 2, 3 is {}",greater(1,2,3));
    println!("Greatest among 1.2, 7.2, 3.0 is {}",greater(1.2,7.2,3.0));
    println!("Greatest among 10, 20, 30 is {}",greater(10,20,30));
}
fn greater<T:PartialOrd>(a:T,b:T,c:T)->T{
  if a>b && a>c{
    return a;
  }
  else if b>a && b>c{
    return b;
  }
  else{
    return c;
  }
}

Producción:

 

En el código anterior, dentro de la función genérica que usamos PartialOrd representa el rasgo ordenado que permite comparar los parámetros en la función. La ventaja de usar la función Genérica es que ayuda a evitar la duplicación de código y hace que el código se vea más organizado y conciso. 

Publicación traducida automáticamente

Artículo escrito por akhilvasabhaktula03 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *