上一篇:Hello World
当前篇:造物之初
下一篇:基础运算
程序员就像是一个小小的造物主,我们使用有限的可用资源来创造我们想要的东西,并赋予它们一些属性,能力和规则来完成我们的任务,这一切都在手指一敲而就间
接下来我会尽可能以代码框的方式来展示代码,而非贴图,贴图占用资源,不方便复制,新手还是要多多动手敲,不要养成复制粘贴的习惯,老司机就随意了
print("Hello World!")
这是第一课中的 Hello World 程序的代码
print 是标准库提供的一个函数(功能),根据函数名称大概能理解是打印的意思,它的功能就是在调试框中输出指定信息
print 函数后面的括号表示函数的参数,在这里指要输出的信息,双引号表示字符串类型
因此这句代码的完整意思就是:将字符串 Hello World! 输出到调试框中
几乎所有编程语言教材的第一个程序都是这个样子,因为对于新手来说,最直观的就是能够看到程序运行的结果,调试框是新手使用的第一个查看运行结果的工具,Playground已经自动为我们输出了程序运行的全部过程,只不过我们最终会抛弃Playground,所以学会在黑框中输出你想看的运行结果还是有必要的
生命周期
上面的那一行代码,我们已经完成了一次造物,我们创建了一个字符串,并把它输出到黑框中,然后代码运行结束,造物主的任务完成,字符串的生命结束,被阎王爷收回去了。下面是稍微准确一点的描述
计算机需要分配一段运行内存来表示我们创建的东西,当我们创建的东西已经不再需要的时候,就需要释放这一段运行内存,要不然运行内存很快就会被占满,导致应用无法正常运行,在一些古老的编程语言中,需要我们通过代码手动释放创建的东西,而现代的编程语言几乎都有自动释放的特性,在Swift中我们叫 ARC自动内存管理 ,其他很多语言叫 自动垃圾回收
给造物起名字
如果我们要在多行代码中使用我们创建的那个字符串,我们需要给字符串起一个名字,要不然它就只能活过一行代码
let string: String = "Hello World!"
print(string)
print(string)
现在我们给创建的字符串起名字为 string ,就可以输出两次了,想输出多少次都可以,只要我们创建的东西需要在不同的地方使用,就必须为它其一个名字
let 是Swift语言的一个关键字,它是具有特殊作用的限定词,起名字的时候要避免使用关键字,string 就是我们给字符串起的名字,之后代码中使用 string 都表示这个字符串,冒号表示它的类型,任何造物都属于某一个类型,就像上帝创造了人类,那么人类就是我们共同的类型,程序中创建的东西也是一样的
常量与变量
给造物起名字是一种不准确的说法,下面我用专业术语来描述,那就是 常量 与 变量
我们创建的东西往往需要在不同的地方去使用,因此我们需要有一个标记指向创建的实例,我们称之为 常量 或 变量 ,常量 用 let 表示,变量 用 var 表示,常量 一旦赋值就不可更改,变量 可以任意更改其赋值
上一段代码我们换一种解释:声明一个类型为字符串的常量 string ,创建一个字符串 Hello World! 赋值给常量 string
为了方便理解,我们可以把代码拆成两步,就像下面这样:
let string: String
string = "Hello World!"
print(string)
然后把代码修改成下面这样:
let string: String
string = "Hello World!"
string = "Hello ZhangQi!"
print(string)
这时会发现编译器报错:Immutable value 'string' may only be initialized once,也就是我们刚刚说的常量一旦赋值不可更改,如果我们需要更改其赋值,就需要把 string 声明为变量:
var string: String
string = "Hello World!"
print(string)
string = "Hello ZhangQi!"
print(string)
这样我们就能在调试框中看到 string 被先后赋予了不同的值,同时需要注意,当我们创建了一个新的字符串赋值给 string 时,其旧的值就失去了引用,生命周期结束
从这个角度来看,起名字的描述就不准确了,实际上常量和变量只是一种 引用 或者 指向,可以形象地理解为箭头,我们可以根据箭头找到其实例,当没有任何一个箭头指向某个实例时,实例的生命周期结束,被自动释放
声明变量和常量时我们指定了其类型,不能够随意的赋值,只能赋值对应的类型实例,像下面这样编译器就会报错:
let string: String = 1
生命周期属于进阶知识,如果不好理解可以暂时不用纠结,包括引用这样的概念也属于进阶知识,对于理解代码起到很重要的作用,在学习的过程中我们会一步步加深理解
几个基础数据类型
在开始下一课之前,我们先来认识几个最常用的类型,前面我们用到了一种类型 String ,也就是字符串
字符串类型
字符串可以用插值法来替换内容,语法就是 \()
let name = "ZhangQi"
print("Hello \(name)!")
// Hello ZhangQi!
字符串还可以通过加法来合成新的字符串
let name = "ZhangQi"
let hello = "Hello " + name
print(hello)
整数类型
let a: Int = 1
let b: Int = 2
let c: Int = a + b
print(c)
Int 是我们最常用的整数类型,它在不同的操作系统下有不同的取值范围
在32位系统中,Int 实际上表示 Int32,其取值范围是 -2147483648~2147483647 ,刚好2的32次方个取值
在64位系统中,Int 实际上表示 Int64,其取值范围是 -9223372036854775808~9223372036854775807,刚好2的64次方个取值
同时整数类型还有一些变体,主要区分有符号整数和无符号整数以及整数的位数,下面举一个无符号整数类型(无符号的意思就是非负数)
UInt32 表示无符号32位整数,其取值范围是 0~4294967295,刚好也是2的32次方个取值
其他的整数类型依次类推,整数类型总体上有下面这些:
Int8 , UInt8 , Int16 , UInt16 , Int32 , UInt32 , Int64 , UInt64 , Int , UInt
绝大多数情况下,我们使用 Int 类型就够了
浮点数类型
浮点数也就是我们说的小数,Swift提供两种浮点数,Float 和 Double ,两者的区别跟整数类型区别类似,Double类型表示的范围更广,小数点后的位数更多,更加精确,图方便,我们大部分时候使用 Double 就够了
let a: Double = 0
let b: Double = 3.1415926
let c: Double = a + b
print(c)
布尔类型
Bool 类型也就是数学中的真假逻辑,它只有两个取值,要么真,要么假,真用 true 表示,假用 false 表示
let happyEveryDay: Bool = true
let eatFatFat: Bool = false
命名规范
通常情况下,命名的第一个单词首字母小写,之后每一个单词的首字母大写,不能用特殊字符,中间不允许有空格,而类型名字首字母也要大写
上一篇:Hello World
当前篇:造物之初
下一篇:基础运算