写在前面

我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差。

自学了Java、Kotlin、Python、Rust,学艺不精但还是总结出一套快速入手新语言的规律。学习一个新语言的套路我总结为:数据类型(包括命名方式),控制语句(循环,逻辑判断),方法命名方式,类相关的面向对象(继承,接口,多态如果是面向对象语言),特有语法糖。

Rust安装

官网已经写得很详细啦,附赠安装方法

个人使用的是Linux,如果使用的是MacOS都是可以一条命令行搞定,推荐使用Windows的用户开启WSL来安装Rust,然后用VScode的remote-ssh插件编写代码。

为什么需要分辨数据类型?

写过js,Python的同学都知道,命名变量的时候我们不需要指定数据类型,事实上大部分动态语言都不需要指定类型,然而静态语言,类似Java、C这样需要编译的语言,在程序编译时都要分配好我们变量的内存空间,也就是在编译时,需要明确知道我们变量的数据类型,所以需要指定好数据类型。

Rust数据类型

变量的命名以及可变与不可变

命名

使用关键字let来命名变量

fn main() {
let a=5;//let翻译是让,所以可以叫做 使变量a的值为5
}

可变与不可变

fn main() {
let a=5;
//变量默认情况下,不可变
a=6;
//这样写会报错,因为我们命名了一个不可变的变量a
//之后又修改了a的值为6
//变量的值发生了变化,所以编译时不会通过
}

rust默认情况下,所有变量都是不可变的,如果需要变量可变,则需要用let mut来命名变量

mut是单词mutable(可变)的缩写。

let mut a=5;
a=6;
//这样写是不会报错的。

整型

接下来我们来看一下Rust的数据类型中的整型。

整型的命名方式:有符号-- i(bit) 无符号--u(bit)

百度:一个字节(byte)为8个比特(bit)

如8bit的有符号整型:i8

32bit的无符号整型:u32

bit可以使用的数值为:8、16、32、64、128、size

size:如果计算机是32位,则 isize为i32,64位则为i64

let a:i32=5;
let b:isize=133;
let c:u128=111;

但是刚刚我们在可变性中,并没有指定a变量的类型啊?

这是因为如果给出具体数值,在Rust中是可以不指定具体类型的,编译器会去推倒他的类型。

那么let a=3这样写,他的类型会是多少呢?

在Rust中,这样的写法默认类型是i32,并且也建议大家使用i32这个类型,这是因为编译器对于i32这个类型做过特殊优化。

在运算上i32会比其他数据类型更快。

当然啦!Rust作为一种底层语言,运行速度已经很快了。

整型的一些写法

let a=1234567;
let b=1_234_567;
let c=0xff;//十六进制

这两种写法数值是一样的,第二种写法更加直观。_并没有什么特殊的作用

浮点

也就是我们常说的小数。相对于整数,小数多了一个小数点.,而小数点所在的位置又不确定,看起来就好像是在一串数中浮动一样,所以我们称小数为浮点数(floating-point numbers)。

类比整型来学习,浮点数有两种,单精度浮点f32和双精度浮点f64

fn main(){
let a=3.14;//a的类型为f64
let b:f32=3.14;//b的类型为f32
}

Rust中默认浮点类型为f64这是因为他们的计算速度几乎一样快,但是f64的精度更高。

布尔

bool是布尔类型,只有true和false。

let t=true;
let f=false;
let t1:bool=true;

字符

let a='a';
let b:char='A';

char类型为单引号字符,内存分配四个字节

字符串

前面的都属于基本数据类型,字符串是一种更为复杂的类型,它事实上是一个结构体(类),每次使用都需要新建一个对象。这里我们先简单了解一下。

let s=String::new();
let s=String::from("Hello");

::和我们常用的类.方法类似,但是::用在实例化的方法上面。这里只说字符串的实例化,后面再说其他的用法。

元组

Rust中很多方法返回值都会用到元组,元组可以返回一组特定类型的返回值,在使用的时候更加灵活。我们先来看一下元组的定义。

let a:(i32,f64)=(1,1.12);
let b=(1,23);

()里面表明每一项的数据类型。如果指明值,也可以不标明元组的数据类型,编译器会帮我们推倒。

元组的解构匹配

fn main() {
let a:(i32,f32)=(1,1.732);
let (b,c)=a;
println!("{},{}",b,c);
}

println!()是一个宏,和我们在其他语言用到的print语句类似,都是在控制台输出,{}是一个占位符,控制我们的输出结构。

这样操作可以分解我们的元组到变量上。很好理解就不拆开细说。

数组

let a = [1, 2, 3, 4, 5]; //第一种
let b: [i32; 5] = [1, 2, 3, 4, 5];//第二种
let c = [3; 5];//第三种

命名数组目前有三种方法,我们分别来看他们的区别。首先需要注意的是数组内部的所有元素类型必须是一样的。

  • 第一种和第二种相同,之前提到过的如果已知类型,则可以不写明类型,有编译器推导。
  • 第三种着重说明一下,3表示三个,5表示数值,也就是说创建一个拥有3个5的数组。适合数组内部元素一模一样的情况。

获取数组元素

fn main() {
let a = [1, 2, 3, 4, 5];
println!("{}",a[1])
}

和其他编程语言相同,数组下标也是从零开始。用[index]来获取数组元素。如果超出了数组范围,在编译时不会报错,但是运行时会报错,因为访问了一个无效的内存。

Rust学习笔记一 数据类型的更多相关文章

  1. es6学习笔记--新数据类型Symbol

    学习了es6语法的symbol类型,整理笔记,闲时复习. Symbol 是es6新增的第七种原始数据类型(null,string,number,undefined,boolean,object),是为 ...

  2. javascript深入浅出——学习笔记(六种数据类型和隐式转换)

    在慕课之前学过JS深入浅出,最近发现很多东西都记不太清楚了,再复习一遍好了,感觉这个课程真的超级棒的,做做笔记,再添加一些学习内容

  3. Rust学习笔记1

    这是一份不错的rust教程,目前包括4个block和4个project.全部完成后可以用rust实现一个简单的key-value存储引擎. 注意:Windows下rust貌似会遇到一些bug,强烈建议 ...

  4. MySQL学习笔记之数据类型

    数据类型在所有的数据库使用当中,都是避免不了的部分.以前每次写SQL语句,对于定义成哪种数据类型总是迷迷糊糊,今天就来彻底弄清.以下介绍仅针对MySQL 5.5以上版本. 一.字符串类型 1.char ...

  5. Java学习笔记三——数据类型

    前言 Java是强类型(strongly typed)语言,强类型包含两方面的含义: 所有的变量必须先声明后使用: 指定类型的变量只能接受预支匹配的值. 这意味着每一个变量和表达式都有一个在编译时就确 ...

  6. Redis学习笔记1-Redis数据类型

    Redis数据类型 Redis支持5种数据类型,它们描述如下: Strings - 字符串 字符串是 Redis 最基本的数据类型.Redis 字符串是二进制安全的,也就是说,一个 Redis 字符串 ...

  7. python学习笔记二 数据类型(基础篇)

    Python基础 对于Python,一切事物都是对象,对象基于类创建         不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上 ...

  8. CUBRID学习笔记 26 数据类型3cubrid教程

    接上面的集合 集合之 set 每个集合元素是不同的值, 但是类型只能是一种.也可以有其他表的记录 如下 CREATE TABLE set_tbl ( col_1 set(CHAR(1))); INSE ...

  9. C++学习笔记之数据类型

    一.变量名 几条简单的C++命名规则: 在名称中只能使用字母,数字和下划线 名称的第一个字符不能是数字 区分大小写 不能将C++关键字用作名称 以两个下划线和大写字母打头的名称被保留给实现(编译器及其 ...

随机推荐

  1. 1073 多选题常见计分法 (20分)C语言

    批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生选择了任何一个错误的选项,则不能得分.本 ...

  2. vue 2.0以上怎么在手机中运行自己的项目

    第一步 打开vue项目 第二步 打开项目config/index.js文件,然后找到 module.exports 配置里面的 dev 配置,修改字段host:0.0.0.0 第三步 打开cmd输入i ...

  3. Excel获取当前日期和时间

    在Excel中获取当前时间 1.第一种在空的单元格内输入函数“NOW()”回车即可获取当前时间如图 2.第二种选中空单元格“按住CTRL+:”回车即可获取当前时间 3.第一种在空的单元格内输入函数“t ...

  4. [转]C#中的abstract 类和方法

    转:https://www.cnblogs.com/zzy2740/archive/2005/09/20/240808.html C#中的abstract类不能被实例化,他只提供其他类的继承的接口 u ...

  5. 【记】VM VirtualBox 网络地址转换(NAT)使用详解

    1. 查看虚拟机Centos6的ip 但是这个IP地址并不能直接连接,因为本地VBox网络连接方式采用的是“网络地址转换(NAT)”(如上上图所示),也就是说 10.0.2.15 这地址是转换的. 2 ...

  6. Java工程师 基础+实战 完整路线图(详解版)

    Java工程师 基础+实战 完整路线图(详解版)   Java 基础 Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的 oop 特性:封装.继承.多态.此外还有泛型.反射 ...

  7. Spark集群-Standalone 模式

    Spark 集群相关 table td{ width: 15% } 来源于官方, 可以理解为是官方译文, 外加一点自己的理解. 版本是2.4.4 本篇文章涉及到: 集群概述 master, worke ...

  8. PBFT && RBFT算法流程

    PBFT && RBFT算法流程以及其实现(上) 这篇文章主要是讲一下RBFT中共识算法流程以及节点的加入的流程.在下一篇博客中,将使用Java实现该算法. 传统的PBFT算法无法动态 ...

  9. mysql的查询优化

    参考网站:http://www.liyblog.top/p/6 这里总结了52条对sql的查询优化,下面详细来看看,希望能帮助到你     1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 wh ...

  10. Gym - 101982F 扫描线+线段树

    题目链接:https://codeforces.com/gym/101982/attachments 要你求覆盖奇数次的矩形面积并,每次更新时减去原先的值即可实现奇数次有效,下推时为保证线段长度不变左 ...