之前提到过编程是「模拟世界」,不过我们先简单点,从「做数学题」开始。
就像我们认识世界的时候,喜欢各种分类一样,分成动物和植物,编程里也会给各种分类。比如给所有的「数据」做分类,不同的数据大概可以分为几个「类型」,这就是「数据类型」。
比如我们可以简单地把数据分成「字符类型」的,和「数字类型」的。
做数学题的第一步是什么?——写「解」,或者「证明」。
我们如何去模拟这个「解」、「证明」,或者其他这种文字性的描述?编程里有个概念叫「字符串」,用来表示所谓的「字符」。不同右语言表示字符串的方式都不一样,在 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。
与变量相对,不变的量就是常量。比如,1
,3.0
,"嘿嘿"
。
还有一种常量大家可能不知道,可以简单理解为:不变的变量。
例如:const Pi int = 3.1415
它和变量的声明几乎一模一样,主要有两个不同,一个是 var
关键字变成了 const
,另一个是值不能修改。
那么为什么不直接用 3.1415
这种值,还要再定义一个常量呢?
因为可读性。
- 为了表征这个世界,我们需要先定义一些基本的类型。比如:整数、小数、字符串等。
- 表示这些数据的方法,可以分为两种:变量和常量。
- 每种编程语言的数据类型不尽相同,但大体差不多;声明、定义变量的方式,也同样。
大家宏观感受一下就好,主要抓住其中的共通之处,或者说整体感觉。
在表示整数的数据类型方面:
- Go 有
int
,int32
,int64
等 - C 有
int
,long
,short
等 - Java 有
int
,long
,short
等 - JavaScript 有
Number
,既可以表示整数,也可以表示小数
在表示小数的数据类型方面:
- Go 有
float32
,float64
- C 有
float
,double
- Java 有
float
,double
- JavaScript 有
Number
,既可以表示整数,也可以表示小数
在声明、定义变量的方法是:
- Go 是
var a int
,a := 1
等 - C 是
int a
,char b = 'b'
等
可以看到,Go 语言是变量并在前,类型在后;C语言则相反。
但无论如何,这些细节,都逃不出整体的框架。