Rust语言从入门到入坑——(4)Rust语法(中)

news2024/11/28 5:41:29

文章目录

  • 0 引入
  • 1、函数
    • 1.1、函数参数
    • 1.2、函数体
    • 1.3、函数返回值
  • 2、条件语句
  • 3、循环
    • 3.1 、while
    • 3.2 、for
    • 3.3 、loop循环
  • 4、总结


在这里插入图片描述

0 引入

在这里我们需要介绍Rust语法,一共分三部分,第二部分主要是一些如函数,编程中的循环等语法的介绍,着重介绍与C不一样的地方。


1、函数

函数基本形式为:

fn <函数名> ( <参数> ) <函数体>

//如下定义
fn main() {
    println!("Hello, world!");
    test_function();
}

fn test_function() {
    println!("I am tester!");
}

注意 :

  • 1、Rust不在乎您在何处定义函数,只需在某个地方定义它们即可。

  • 2、Rust函数名称命名风格:小写字母以下划线分割

1.1、函数参数

Rust 中定义函数如果需要具备参数必须声明参数名称和类型:


fn main() {
    println!("Hello, world!");
    test_function();
}

fn test_function(x:i32,y:i32) {
    println!("I am tester!");
    println!("x 的值为 : {}", x);
    println!("y 的值为 : {}", y);
}

1.2、函数体

Rust 函数体由一系列可以以表达式(Expression)结尾的语句(Statement)组成。

fn main() {
    let x = 0;

    let y = {
        let x = 1;
        x + 1
    };

    println!("x 的值为 : {}", x);
    println!("y 的值为 : {}", y);
}

上述的 let y ={}这种格式这种表达式块叫做函数体表达式
注意:x + 1 之后没有分号,否则它将变成一条语句!

1.3、函数返回值

Rust 函数声明返回值类型的方式:在参数声明之后用 -> 来声明函数返回值的类型(不是 : )

fn add(a: i32, b: i32) -> i32 {
    return a + b;
}

但是 Rust 不支持自动返回值类型判断!如果没有明确声明函数返回值的类型,函数将被认为是"纯过程",不允许产生返回值,return 后面不能有返回值表达式。

注意:1、函数体表达式并不能等同于函数体,它不能使用 return 关键字。
2、函数支持嵌套。


2、条件语句

fn main() {
    let number = 3;
    if number < 5 {                    //可以不需要(number<5)的括号
        println!("条件为 true");
    } else {
        println!("条件为 false");
    }
}

注:

  • Rust 中的 if 不存在单语句不用加 {} 的规则,不允许使用一个语句代替一个块;
  • Rust 中的条件表达式必须是 bool 类型
fn main() {
    let a = 3;
    let number = if a > 0 { 1 } else { -1 };   //作用类似于三元运算符
    println!("number 为 {}", number);
}

3、循环

3.1 、while

fn main() {
    let mut number = 1;
    while number != 4 {
        println!("{}", number);
        number += 1;
    }
    println!("ok");
}

3.2 、for

or 循环是最常用的循环结构,常用来遍历一个线性数据结构(比如数组)。再Rust中是没有类似
for(int i =0;i<100;++i)这种形式,只能用while代替该功能,主要用法如下

fn main() {
    let a = [100, 200, 300, 400, 500];
    for i in a.iter() {
        println!("值为 : {}", i);
    }
}

3.3 、loop循环

Rust 语言有原生的无限循环结构- loop,然后用break退出循环,常用来做查找;

fn main() {
    let s = ['R', 'U', 'N', 'O', 'O', 'B'];
    let mut i = 0;
    loop {
        let ch = s[i];
        if ch == 'O' {
            break;
        }
        println!("\'{}\'", ch);
        i += 1;
    }
}

4、总结

Rus语法还是比较简洁和简答的,吸收了其他语言优秀的部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小白到运维工程师自学之路 第三十九集 (HAproxy 负载均衡)

一、概述 HAProxy是一款高性能的负载均衡软件&#xff0c;可以将来自客户端的请求分发到多个服务器上&#xff0c;以提高系统的可用性和性能。HAProxy支持多种负载均衡算法&#xff0c;包括轮询、加权轮询、最少连接数等。同时&#xff0c;HAProxy还支持会话保持、健康检查、SS…

redis和mysql

文章目录 一、redis1.1 redis的数据结构都有哪些&#xff1f;1.2 持久化方式有哪些&#xff1f;1.3 怎么保证缓存和数据库数据的一致性?1.4 redis缓存是什么意思&#xff1f; 二、数据库2.1 基本数据类型2.2 MySQL 的内连接、左连接、右连接有什么区别?2.3 MySQL 问题排查都有…

第二章(第三节):导数的应用

1.洛必达法则 1.用途 能够使用洛必达法则解决常见的未定式问题。2.极限下的未定式 如果当 x→a 或 x→∞ 时,函数f(x)和g(x)均趋于零或者无穷,那么极限:可以存在,也可能不存在。通常这种极限为:0/0型或∞/∞型未定式。3.示例 1.lim x→0; (1-cosx) / x 2 ^2

机器人开发--Fast DDS

机器人开发--Fast DDS 1 介绍1.1 DDS概述1.2 Fast DDS 介绍域与域通信跨网络通信 2 内容要素与组件介绍IDL &#xff08;Interface Definition Language&#xff09;eProsima Fast DDS-Gen&#xff1f; 3 安装步骤3.1 安装选择&#xff08;linux源码cmakec&#xff09;3.2 模块…

shardingsphere第四课shardingsphere-proxy的使用

一、为什么要有服务端分库分表&#xff1f; 配合 ORM 框架使用更友好 当使用 ShardingSphere-JDBC 时,需要在代码中直接编写分库分表的逻辑,如果使用 ORM 框架,会产生冲突。ShardingSphere-Proxy 作为服务端中间件,可以无缝对接 ORM 框架。 对 DBA 更加友好 ShardingSphere-Pr…

第八章 time模块

1. time模块介绍 time 模块提供了各种时间相关的函数&#xff0c;该模块中对于时间表示的格式有如下三种&#xff1a; 时间戳&#xff08;timestamp&#xff09;&#xff1a;时间戳表示的是从1970 年1 月1 日00:00:00 开始按秒计算的偏移量。 时间元组&#xff08;struct_tim…

每日复盘|6月19日

7:00-7:20 起床洗漱到教室 7:30-8:15 乐词 8:15-9:05 听力con*1 lec*1 9:05-10:47 听力真题 11:00-11:50 考研英语阅读真题 12:00-12:30 午饭🥣+桃子🍑 12:30-13:30 不背单词 13:30-14:00 午睡 14:00-…

SpringMVC07:Ajax研究

目录 一、项目启动时报错点 二、简介 三、伪造Ajax 四、jQuery.ajax 五、Springmvc实现一个list集合显示前端 六、注册提示效果 一、项目启动时报错点 6月 16, 2023 10:34:37 上午 org.apache.catalina.core.StandardContext filterStart 严重: 启动过滤器异常 java.lan…

6-JMM

目录 1.主内存与工作内存 2.内存间交互操作 Java内存模型的三大特性&#xff1a; happens-before原则&#xff08;先行发生原则&#xff09;&#xff1a; 3.volatile型变量的特殊规则 ①保证此变量对所有线程的可见性 ②使用volatile变量的语义是禁止指令重排序 JVM定义…

node.js+vue+express企业客户关系管理系统mysql

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身…

21.模糊神经网络预测水质评价(附matlab程序)

1.简述 学习目标&#xff1a;模糊神经网络预测水质评价——重风水厂、 高升水厂、秦玺水厂 采用模糊神经网络预测这三个水厂的水质&#xff0c;并进行对比 模糊神经网络(Fuzzy Neural Network, FNN) 背景 系统复杂度的增加&#xff0c;人工智能深度化发展 模糊数学创始人L. A…

io.netty学习(四)ChannelHandler

目录 前言 正文 ChannelHandler ChannelInboundHandler ChannelOutboundHandler ChannelDuplexHandler 总结 前言 先简略了解一下ChannelPipeline和ChannelHandler的概念。 想象一个流水线车间。当组件从流水线头部进入&#xff0c;穿越流水线&#xff0c;流水线上的工…

第四章 组合逻辑电路--数电(期末复习笔记)

第四章 组合逻辑电路 本章重点&#xff1a; 1. 组合逻辑电路的分析与设计方法 2. 常用组合逻辑模块的使用 4.1 概述 4.11 组合逻辑电路 任一时刻的输出仅取决于该时刻的输入&#xff0c;与电路原来的状态无关。4.12 时序逻辑电路 任一时刻的输出不仅取决于现时的输入&am…

电容的基本工作原理

目录 电容器的发展历程现象发现第一个存储电荷的元器件&#xff1a;莱顿瓶真正出名的时刻 为什么电容器的容量单位称为法拉&#xff1f;电容器和电容的区别电容的组成电介质与电解质对电容的影响电容是如何工作的通交流阻直流阻直流通交流 电容器的单位电容的容抗电容常见的种类…

Idea Mybatis插件:提高CRUD效率

mybatis-sql-viewer插件主要提供能力&#xff1a;将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis SQL语句扫描。 1. 简介 虽然写了很久的CRUD&#xff0c;但是依旧觉得写好CRUD是一件非常难且麻烦的事情&#xff0c;以下的情…

chatgpt赋能Python-python找出不同部分

介绍 在SEO&#xff08;Search Engine Optimization&#xff09;领域&#xff0c;比较常见的问题之一是如何快速有效地查找出两段文本的不同部分。这对于优化网站内容或对比竞争对手的网站内容都非常有用。Python作为一种强大的编程语言&#xff0c;其特性和库使得这种任务变得…

神经网络入门①多层感知器如何解决异或问题?

文章目录 1. 多层感知器2. BP算法参考文献 1. 多层感知器 感知机&#xff08;perceptron&#xff09;早在20世纪50年代就提出来了1&#xff0c;但直到近几年深度学习的崛起&#xff0c;神经网络才再次走入大众的视野&#xff0c;并且成为了当下最热门的研究方向之一。 一个单层…

MybatisPlus的save方法

当我前端传递的是一个整合的数据模型Dto,需要同时插入俩张表,并且其中一张表的属性需要得到另一张表的id,如何实现呢?这个时候MP封装好的插入方法:save就起了很好的作用 public R<String> SaveNewDish(DishDto dishdto) { // 1. 保存菜品基本信息log.info("前…

MySQL优化--覆盖索引,超大分页查询

目录 覆盖索引 MYSQL超大分页处理 面试回答 大纲 回答 覆盖索引 覆盖索引是指查询使用了索引&#xff0c;并且需要返回的列&#xff0c;在该索引中已经全部能够找到 。 MYSQL超大分页处理 在数据量比较大时&#xff0c;如果进行limit分页查询&#xff0c;在查询时&#…

一步一步教你如何使用MMSelfSup框架【1】

介绍 任务介绍 自监督学习(Self-supervised learning, SSL)是一种极具潜力的学习范式&#xff0c;它旨在使用海量的无标注数据来进行表征学习。在SSL中&#xff0c;我们通过构造合理的预训练任务&#xff08;可自动生成标注&#xff0c;即自监督&#xff09;来进行模型的训练…