RUST 学习日记 第4课 ——Rust规范
0x00 回顾
上一节咱们了解了Rust的常见IDE,选择一款好的IDE可以让你写代码时事半功倍哦~。这节咱们了解下Rust的常见的一些规范和约定。学习一门编程语言就好比学习一门外语,要“入乡随俗”,尊重这门语言的习惯。
0x01 程序入口点
咱们已经来到第四节了,大家应该也发现了,每次创建项目都会生成一个默认的函数——main
,当然在Java
中叫方法。这个main
函数就是这个程序的入口点,对于所有的二进制可执行文件来说,main
函数是必要的,没有它程序则没有执行入口,也就无法执行了。
fn main(){
}
简单了解下它的构造。声明函数以fn
开头,fn
是function
的简写,然后再紧跟着函数名称main
,再加上参数,由于main
函数没有参数,所以不需要声明参数,然后再跟上花括号,花括号里就可以写代码了。
PS:关于函数将会在后续章节中详细介绍,这里了解即可。
0x02 main函数的参数和返回值
看到这里,如果你了解过其它语言肯定会想,Rust中的main方法竟然没有参数,也没有返回值。是不是有点儿颠覆了你的“三观”。
fn main() {
for arg in std::env::args()
{
println!("{}", arg);
}
// 返回值,默认返回是0
std::process::exit(0);
}
其实,在Rust中有专门的函数对入参做处理——std::env::args()
,他可以接收所有参数。大家可以点进源码看下注释,注释写的很详细。关于函数的返回值,可以使用std::process::exit(0);
返回,其中的入参就是返回值了。
0x03 命名规范
1、蛇形命名法(Snake Case)
文件名
: 例如:hello_world.rs、main_xxx.rs
变量名
:例如:zhangsan_name
函数名
:例如:func_name()
2、大驼峰命名法(Camel Case)
结构体
:例如:struct ExampleStruct { name: String}
enum类型
:例如:enum IpAddress {IPV4(u8,u8,u8,u8)}
3、其它
关联常量
:全部大写,例如:NAME、AGE
连接符
:Cargo
默认把连接符
“-
”转换成下划线
“_
”
语句
:跟C,Java语言等一样,每行语句结束都要添加;
PS:Rust也不建议以“-rs
”或“_rs
”为后缀来命名包名,如果以此来命名,会强制性的将此后缀去掉。
0x04 标准输出
在前面的文章中,咱们都了解了使用println!
去打印内容,现在具体介绍下它。
在Rust中常见的输出指令有如下红框圈出的四种。下图来自Rust官方文档。
print
和 println
的区别就是多了一个ln
。print
是输出内容(不换行),println
是输出内容并且换行。同理,eprint
和eprintln
是一样的。
Q:print
和eprint
有什么区别呢?
如果你在代码中运行发现不了区别。那还是看文档吧。
文档中写道,输出由stderr
来代替了stdout
,那就很清晰了。有其它语言基础的同学应该清楚这个问题。简单介绍下这俩的区别:
stdout
: 标准输出设备。默认是行缓冲的,它的输出数据会保存在一个buffer
中,当换行的时候会输出到屏幕。如果程序转向输出到文件,它则会输出到文件里面。
stderr
: 标准错误输出设备 。默认是无缓冲的,会直接输出数据。如果程序转向输出到文件,它则依然会输出到屏幕。
咱们就用文件做个测试,上代码:
fn main() {
println!("我是 println!");
eprintln!("我是 eprintln!");
}
右侧蓝框:两行数据都打印了,看不出区别。
左侧红框:输出到test.txt
文件,在终端输出了eprintln
打印的内容,在文件中输出println
的内容。
PS:想更深入的了解它们的区别,大家可以百度下~关于println
在后续章节还会再次介绍。
0x05 dbg!
如果你想要调试输出,建议使用dbg!
,这个命令是对eprintln
的封装。通过它打印内容,输出内容会带文件名,行号等信息,可以很方便的程序调试。建议需要打印日志时使用dbg!
来代替println!
。下节正式进入Rust的学习。
PS:使用dbg!
需要在Rust的1.32.0
版本(包含)之后。
示例代码如下:
dbg!("我是一条 debug 日志");
0x06 资料
print文档 - Rust (rust-lang.org)
std::dbg文档 - Rust (rust-lang.org)
0x07 本节源码
004 · StudyRust - 码云 - 开源中国 (gitee.com)
下节预告——变量和常量。