DEV Community

Rijul Rajesh
Rijul Rajesh

Posted on

4 3 4 3 4

The Building Blocks of Rust: Variables, Functions, and Control Flow

If you're diving into Rust, one of the most empowering things you'll discover is how well the language is designed to help you structure your program clearly and safely. At the heart of this design are constructs—the fundamental elements used to build and organize Rust programs.

Variables: Immutable by Default

In Rust, you declare variables using the let keyword:

let x = 10;
Enter fullscreen mode Exit fullscreen mode

By default, variables are immutable, which means once you assign a value to them, it can’t be changed. If you want to change a variable’s value, you must explicitly make it mutable:

let mut y = 20;
y = 30;
Enter fullscreen mode Exit fullscreen mode

This explicitness helps reduce bugs by making you think carefully before allowing changes to your data.


Functions: Reusable Units of Logic

Functions in Rust are defined using the fn keyword. Here's a simple example:

fn greet(name: &str) {
    println!("Hello, {}!", name);
}
Enter fullscreen mode Exit fullscreen mode

Functions allow you to encapsulate and reuse logic. They can take arguments, return values, and help you write cleaner and more modular code.


Data Types: Explicit and Static

Rust is a statically typed language, which means types are known at compile time. While the compiler can often infer types, you can (and sometimes must) declare them explicitly:

let age: u32 = 25;
let price: f64 = 9.99;
let is_active: bool = true;
Enter fullscreen mode Exit fullscreen mode

Rust provides both primitive types like integers, booleans, and floats, and compound types like:

  • Tuples: Fixed-size collections of values of different types
  let person: (&str, u32) = ("Alice", 30);
Enter fullscreen mode Exit fullscreen mode
  • Arrays: Fixed-size collections of values of the same type
  let scores: [i32; 4] = [90, 80, 70, 60];
Enter fullscreen mode Exit fullscreen mode

You can also define your own custom types using struct and enum.


Control Flow: Directing Program Execution

Rust gives you several tools to control how your program flows:

if and else

let number = 7;

if number < 10 {
    println!("Less than 10");
} else {
    println!("10 or more");
}
Enter fullscreen mode Exit fullscreen mode

loop, while, and for

for i in 1..=5 {
    println!("Count: {}", i);
}
Enter fullscreen mode Exit fullscreen mode

Pattern Matching with match

Rust’s match is a powerful way to perform control flow based on patterns:

let number = 3;

match number {
    1 => println!("One"),
    2 => println!("Two"),
    3 => println!("Three"),
    _ => println!("Something else"),
}
Enter fullscreen mode Exit fullscreen mode

Option and Result: Safe Handling of Edge Cases

Rust doesn’t have exceptions. Instead, it uses the Option<T> and Result<T, E> enums for safe error handling and expressing the absence of values.

fn divide(a: i32, b: i32) -> Option<i32> {
    if b == 0 {
        None
    } else {
        Some(a / b)
    }
}
Enter fullscreen mode Exit fullscreen mode

When calling this function, you use match or similar constructs to handle the result gracefully.


Putting It All Together

As a Rust programmer, you’ll constantly be using these constructs to structure your applications. They work together harmoniously:

  • Variables let you store and manage data.
  • Functions help you organize logic.
  • Data types bring safety and clarity.
  • Control flow structures guide how your program executes.
  • Option and Result ensure you handle uncertainty and errors safely.

The more you write Rust, the more natural these pieces will feel—and the more you'll appreciate the careful design that makes Rust both powerful and safe.

If you're a software developer who enjoys exploring different technologies and techniques like this one, check out LiveAPI. It’s a super-convenient tool that lets you generate interactive API docs instantly.

LiveAPI helps you discover, understand and use APIs in large tech infrastructures with ease!

So, if you’re working with a codebase that lacks documentation, just use LiveAPI to generate it and save time!

You can instantly try it out here! 🚀

Heroku

Save time with this productivity hack.

See how Heroku MCP Server connects tools like Cursor to Heroku, so you can build, deploy, and manage apps—right from your editor.

Learn More

Top comments (0)

👋 Kindness is contagious

Did you find this useful? Leave a ❤️ or a comment below!

Join the community