Rust 学习笔记(一):从 Hello World 开始

一、开个头——认识 Rust

每一门语言的入门几乎都从那句熟悉的“Hello World”开始。Rust 也不例外。
Rust 是一门强调 性能安全性并发 的系统编程语言。它不像 C/C++ 那样容易踩内存的坑,也不像 Java 那样依赖垃圾回收机制。Rust 在设计上兼顾了底层控制力和高级语言的安全性。

如果你第一次接触它,不用担心。我们就从最简单的打印语句开始,一步步了解这门语言的基本语法。


二、第一个程序:Hello World

Rust 源码文件的扩展名是 .rs,默认的程序入口是一个叫 main 的函数。
我们先写一段最经典的代码:

// main.rs
fn main() {
    println!("Hello, world!");
}

保存后执行以下命令编译运行:

$ rustc main.rs
$ ./main
Hello, world!

是不是很眼熟?
Rust 的 println! 是一个宏(注意结尾的感叹号),它会在控制台输出文字并自动换行。

如果你熟悉 C、Java 这些语言,Rust 的语法看起来应该不陌生。
不过它和 C 不一样的地方在于:Rust 所有函数必须显式声明,并且强类型检查更严格。


扩展版

fn main() {
    println!("Hello World!");
    println!("I'm learning Rust!");
}

运行后输出:

Hello World!
I'm learning Rust!

Rust 的每一条语句结尾都要带分号 ;
如果你漏掉分号,编译器不会糊弄你——它会很认真地指出错误。


三、写代码也得写点注释

程序不是给机器看的,更多时候是给人看的。Rust 的注释有三种写法:

注释类型示例用途
行注释// 这是行注释最常用
块注释/* ... */注释多行代码
文档注释/// 这是文档注释用于生成文档

例子:

fn main() {
    // 这是行注释
    println!("Hello, Rust!");

    /*
     * 块注释可以跨多行
     * 一般调试时用来临时屏蔽代码
     */

    /// 文档注释(可以生成 HTML 文档)
    //! 模块级别的文档注释
}

Rust 推荐用 //,简洁明了。
块注释一般只在调试或暂时屏蔽代码时使用。


四、输出一点有意思的内容

Rust 的输出系统非常强大。
println! 宏不仅能打印字符串,还能格式化各种变量。

fn main() {
    let name = "Alice";
    let age = 25;

    println!("我的名字是 {},今年 {} 岁。", name, age);
    println!("{1} 今年 {0} 岁。", age, name);

    println!("{subject} {verb} {object}",
             subject="那只狐狸", verb="跳过", object="那只懒狗");

    println!("十进制:{}", 42);
    println!("二进制:{:b}", 42);
    println!("十六进制:{:x}", 42);
}

输出结果:

我的名字是 Alice,今年 25 岁。
Alice 今年 25 岁。
那只狐狸 跳过 那只懒狗
十进制:42
二进制:101010
十六进制:2a

Rust 的格式化字符串支持很多控制符:

格式符含义示例
{}默认格式化println!("{}", 10)
{:b}二进制println!("{:b}", 10)
{:x}十六进制println!("{:x}", 255)
{:.2}保留两位小数println!("{:.2}", 3.1415)

Rust 在编译时就会检查参数数量是否匹配,不用担心漏写变量。


五、调试输出和自定义打印

有时候我们需要查看结构体里的数据,直接打印是行不通的。Rust 不允许随意打印用户定义的类型。
想打印结构体,需要实现 DebugDisplay

#[derive(Debug)]
struct Person {
    name: &'static str,
    age: u8,
}

fn main() {
    let p = Person { name: "Peter", age: 28 };
    println!("{:?}", p);
    println!("{:#?}", p); // 美化打印
}

输出:

Person { name: "Peter", age: 28 }
Person {
    name: "Peter",
    age: 28,
}

如果想更漂亮一点,用 Display

use std::fmt;

struct Point { x: f64, y: f64 }

impl fmt::Display for Point {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "x={}, y={}", self.x, self.y)
    }
}

fn main() {
    let p = Point { x: 3.3, y: 7.2 };
    println!("{}", p);
}

输出:

x=3.3, y=7.2

小提示:

  • #[derive(Debug)] 会自动生成调试格式输出

  • Display 需要自己写打印格式

  • {} 调用的是 Display{:?} 调用的是 Debug


六、认识一下 Rust 的数据类型

Rust 的类型系统很严格。常见的基础类型分为两类:

分类类型名示例说明
整数(有符号)i8, i16, i32, i64, i128, isizelet x: i32 = -5;能表示负数
整数(无符号)u8, u16, u32, u64, u128, usizelet y: u32 = 42;只能是正数
浮点数f32, f64let z = 3.14;默认是 f64
字符char'A', '你'4 字节 Unicode
布尔booltrue, false逻辑判断
单元类型()无值返回一般用于函数无返回值时

例子:

fn main() {
    let a: bool = true;
    let b: i32 = -12;
    let c: u32 = 42;
    let d: f64 = 3.14159;
    let e: char = 'R';

    println!("布尔:{}", a);
    println!("有符号整数:{}", b);
    println!("无符号整数:{}", c);
    println!("浮点数:{}", d);
    println!("字符:{}", e);
}

输出:

布尔:true
有符号整数:-12
无符号整数:42
浮点数:3.14159
字符:R

Rust 会自动推断类型,比如:

let x = 5; // 默认是 i32
let y = 3.0; // 默认是 f64

七、综合练习:输出一个用户信息表

use std::fmt;

#[derive(Debug)]
struct User {
    name: String,
    age: u8,
    score: f32,
}

impl fmt::Display for User {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "姓名:{} | 年龄:{} | 分数:{:.1}", self.name, self.age, self.score)
    }
}

fn main() {
    let user = User {
        name: "Alice".to_string(),
        age: 23,
        score: 92.5,
    };

    println!("用户信息(Display):{}", user);
    println!("用户信息(Debug):{:?}", user);
}

输出结果:

用户信息(Display):姓名:Alice | 年龄:23 | 分数:92.5
用户信息(Debug):User { name: "Alice", age: 23, score: 92.5 }

八、阶段小结

阶段内容要点
第一阶段Hello World学会运行 Rust 程序
第二阶段注释与结构熟悉注释风格
第三阶段格式化输出掌握 println!
第四阶段Debug / Display区别调试输出与友好输出
第五阶段基础类型理解 Rust 的数据系统
第六阶段综合案例学会组合使用结构体与输出

九、收个尾

到这里,我们算是正式踏入了 Rust 的大门。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值