Skip to content

Latest commit

 

History

History
141 lines (84 loc) · 5.7 KB

数据类型与变量.md

File metadata and controls

141 lines (84 loc) · 5.7 KB

数据类型与变量

之前提到过编程是「模拟世界」,不过我们先简单点,从「做数学题」开始。

数据类型

就像我们认识世界的时候,喜欢各种分类一样,分成动物和植物,编程里也会给各种分类。比如给所有的「数据」做分类,不同的数据大概可以分为几个「类型」,这就是「数据类型」。

比如我们可以简单地把数据分成「字符类型」的,和「数字类型」的。

做数学题的第一步是什么?——写「解」,或者「证明」。

我们如何去模拟这个「解」、「证明」,或者其他这种文字性的描述?编程里有个概念叫「字符串」,用来表示所谓的「字符」。不同右语言表示字符串的方式都不一样,在 Go 里是用双引号,像这样:"解""∴"。字符串类型在 Go 中用 string 表示,其他语言差不多但有区别。

然后就是编程语言如何表示「数字」了。大部分编程语言会把数值类型的值统分为两种:整数和小数。小数也叫「浮点数」。然后每个编程语言又和把整数和小数再细分成很多类型。

变量

有了类型,那么变量是什么?很简单,变量就像方程组里的 x, y 那样。如果我们做数学题,或者说写代码,写出来的程序全是已经确定的数字,没有任何可变性,那有啥用?代码不就成了一行行的算式了?

变量简而言之就是类似于方程组里 x 的一个标识,我们可以往里面塞东西。然后把它用于计算和运行程序。

值得注意的是,变量是有类型的,且每个变量的类型不能改变。比如你定义了一个用来存整型数字的变量 num,那你就不能用它来存 "解 " 或者小数一类的东西了。

下面看看实际的例子:

var prove string
prove = "证明"

上面的 var 就是 variables 的缩写,prove 就是变量的名字,比如你想取个叫 dog 的变量也行(注意变量名字尽可能表述清晰)。变量名一般尽量用英文,以及开头一般是字母或下划线(不能是数字),后面可以是字母数字下划线。不同语言有对变量命名的规范。

后面的 string 就是表示变量是个 string 类型。

所以 var prove string 就是声明/定义了一个 string 类型的变量 prove。在 Go 里,变量需要先定义再使用。

prove = "证明" 就是让 prove 的值变成 "证明" ,这在编程里叫「赋值」。

再来个例子:

var a int
a = 1
var b int
b = a + 2

其中 int 是整型变量的一种,Go 还有很多其他的整型变量的类型,如 int32;小数类型的话有 float32, float64 等。

所以这个例子很好理解:定义一个 int 类型的变量 a,赋值为 1,再定义个同类型的 b,赋值为 a+2。其中 a 的值是 1,所以 b 的值其实是3。

注意不同类型的变量是不能做运算的,比如:

var a int
var b float32
var sum float32
sum = a + b // a和b的类型不同,会报错

上面的 // 代表注释,注释后面的内容不会被编译器执行,主要是写给人看的,应当养成多写注释的好习惯。

Go 还有很多声明变量与赋值的语法,这里简单举一些,相信大家看了这篇文章就有看懂其他变量语法教程的能力了。

a := 1

这个相当于定义了一个整数型的变量 a,并赋值(初始化)为 1。这里没有声明类型,但是编译器会根据右边的赋值去猜。

还有很多玩法,就不一一解释:

var num1, num2 int
var num3, num4 int = 3, 4
var num5, str1 = 5.0, "嘿嘿"

还有一点要注意,Go 定义了的变量一定要使用,不然会报错。非常优雅。

零值

前面的变量我们都赋值了,你有没有想过不赋值会发生什么呢?

在有些语言里面,不初始化变量(即不赋值),变量里的内容是随机的。

但在 Go 里,所有的类型都有「零值」。所有数值类型的零值是 0,字符串是 ""

例如:var a int,这时候 a 的值就是0。

常量

与变量相对,不变的量就是常量。比如,13.0"嘿嘿"

还有一种常量大家可能不知道,可以简单理解为:不变的变量。

例如:const Pi int = 3.1415

它和变量的声明几乎一模一样,主要有两个不同,一个是 var 关键字变成了 const,另一个是值不能修改。

那么为什么不直接用 3.1415 这种值,还要再定义一个常量呢?

因为可读性。

总结

  1. 为了表征这个世界,我们需要先定义一些基本的类型。比如:整数、小数、字符串等。
  2. 表示这些数据的方法,可以分为两种:变量和常量。
  3. 每种编程语言的数据类型不尽相同,但大体差不多;声明、定义变量的方式,也同样。

其他语言的数据类型与变量

大家宏观感受一下就好,主要抓住其中的共通之处,或者说整体感觉。

数据类型

在表示整数的数据类型方面:

  • Go 有 intint32int64
  • C 有 intlongshort
  • Java 有 intlongshort
  • JavaScript 有 Number,既可以表示整数,也可以表示小数

在表示小数的数据类型方面:

  • Go 有 float32float64
  • C 有 floatdouble
  • Java 有 floatdouble
  • JavaScript 有 Number,既可以表示整数,也可以表示小数

在声明、定义变量的方法是:

  • Go 是 var a inta := 1
  • C 是 int achar b = 'b'

可以看到,Go 语言是变量并在前,类型在后;C语言则相反。

但无论如何,这些细节,都逃不出整体的框架。