#Rust πŸ¦€ – Working with Generics and Types πŸ‘

Hi !

I first used Generics back in the old C# days. It’s a super cool feature. Let’s ask ChatGPT for a definition:

Generics in programming are a way to create classes and methods that work with multiple data types. They allow the programmer to define type parameters, which can be passed as arguments to methods, classes, and interfaces. This allows for the creation of reusable and efficient code, as a single implementation can work with different types. Generics help to eliminate the need for separate implementations for each data type.

ChatGPT: Describe generics in programming language in 4 lines.

Rust support generics, so we can define placeholders for structs, enums, methods and more.

A cool way to understand the use of Generics, is to work with a HashMap collection. A Hashmap has 2 generic types, one for the key and the 2nd one for the values.

We can create a HashMap collection to store names and ages, using a string datatype and an integer datatype.

let mut names_and_ages: HashMap<&str, i32> = HashMap::new();

 names_and_ages.insert("Jeff the Squirrel", 2);
 names_and_ages.insert("Ace the Puppy", 1);
 names_and_ages.insert("Net the Cat", 4);

We can access the collection later and use it to print the values, with this output.

output of the complete solution printing the full collection of name and ages

And this is the complete source code for this sample.

/*
Copyright (c) 2023
Author : Bruno Capuano
Create Time : 2023 January
Change Log :
– Demos working with generics in Rust
The MIT License (MIT)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
use std::collections::HashMap;
fn main() {
let mut names_and_ages: HashMap<&str, i32> = HashMap::new();
names_and_ages.insert("Jeff the Squirrel", 2);
names_and_ages.insert("Ace the Puppy", 1);
names_and_ages.insert("Net the Cat", 4);
// print the names and ages
for (name, age) in &names_and_ages {
println!("{} is {} years old", name, age);
}
}

Super cool !

Happy coding!

Greetings

El Bruno

More posts in my blog ElBruno.com.


Leave a comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: