转载自http://wanwu.tech/2017/03/04/numbers/
现在你已经做好了编程的前期工作,我们正式开始吧。
这一章中,你将学习怎么样用Swift表达数字,其中你还将学到注释,表达式,运算符,常数和变量等知识。
就像婴儿学数数一样,我们也要开始学习数字了。
新建一个Playground,开始我们的学习。
Hello World
进入Playground之后,你会看到以下代码,下面我们所有代码请写在这些代码之后。至于这些代码什么意思,你也会很快知道的,不要着急。
//: Playground - noun: a place where people can play
import UIKit
var str = "Hello, playground"
注释
想象一下你进入了一个未知的世界,不知身在何处。突然,在一面墙上有这么一段话:
//: Playground - noun: a place where people can play
// 请尽情的玩吧
有没有感觉顿时轻松了好多。
其实,这句话就是你新建的Playground自动生成的一段单行注释。这段注释告诉了你这里的基本信息。语法结构就是双斜杠//
,后面接你想表达的内容。
当你发现这样的信息对你很有帮助的时候,你可能也想留一段类似的注释给后来人,或者未来的你,告你那个人他在这里将会看到的东西。但是如果你想表达更多的内容的话,你可以这样写:
//: Playground - noun: a place where people can play
// 请尽情的玩吧,这里真的很好玩
// 你可以学到如何使用Swift来编程
也可以这样写为多行注释:
/*
: Playground - noun: a place where people can play
请尽情的玩吧,这里真的很好玩
你可以学到如何使用Swift来编程
*/
多行注释的语法是用/*...*/
包裹你的注释内容。
至于你想怎样写,并没有严格的要求。但是记住,注释可以让别人或者未来的你更好的理解你的代码,请习惯在合适的地方写合适的注释。
输出打印
这里的打印并不是说要用打印机打印文件,而是把信息输出到一个外围设备,比如说你的屏幕上。
在你的Playground中输入:
print("Hello, world")
观察右侧结果查看栏,是不是有:
"Hello, world\n"
这个就是输出打印的内容了。不过,最后那个\n
是什么?自己先百度下?
今后,我们会用下面的形式表达代码及其输出:
print("Hello, world") // => "Hello, world\n"
有了打印能力,你将能更好的调试你的代码,方便查看变量值等信息。
数字与四则运算
我们可以尝试输出数字,例如:
print(1)
print(1.1)
那我想进行数值运算怎么办呢?我们直接使用加减乘除就可以了,比如:
1+1 // => 2
4-3 // => 1
4*7 // => 28
6/2 // => 3
上面每行都是一个表达式,表达式有一个值。
但是上面的表达式太紧凑了,看起来太累,我们可以这样写:
1 + 1
4 - 3
4 * 7
6 / 2
是不是看起来舒服一点呢?不过如果只有运算符的一侧有空格,是不符合语法规范的,如:
1 +1 // 错
4- 3 // 错
整数与浮点数
尝试下面的表达式:
5 / 2 // => 2
为什么呢?计算机也会算错吗?
这是因为Swift认为5和2都是整数,那么这个表达式的值也应该是一个整数,Swift只取这个表达式值的整数部分,也就是2。
那如果我想要计算出带有小数的更精确的值呢?我们可以这样:
5.0 / 2.0 // => 2.5
我们这就告诉了Swift,这两个数是带有小数的,也就是浮点数,计算精度会提高。
余数
如果我想知道整数除法运算的余数呢?这个运算可以叫取余,或者叫取模。
5 % 2 // => 1
运算符优先级
在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性[1]。
很吓人?我觉得也是。
不过不用怕,其实就和你上学的时候学的四则运算法则差不多,更多其他的规则,我写在这里,难度你会背吗?用到了自己去查吧。比如这里:Swift 运算符
数学公式
Swift也提供给你了一些常用的数学公式,比如正余弦,平方根,最值等运算:
sin(45 * Double.pi / 180) //正弦 => 0.7071067811865475
cos(0) // 余弦 => 1
sqrt(4) // 平方根 => 2
max(10, 4) // 最大值 => 10
min(10, 4) // 最小值 => 4
写有意义的的代码
目前为止,我们并没有觉得我们的代码有什么了不起的功能。但是将来,我们会用其他一样简单的语句,搭建出各类App。
为了使我们以后更方便的使用自己的代码,我们会给这些数据赋予有意义的名字。同时,这些名字是和某种数据类型关联在一起的,比如上文中我们遇到的整数就是一种数据类型。
有意义的名字
观察下面代码:
let numberApple: Int = 10
let numberOrange: Int = 8
let pi: Double = 3.14159
var numberWorker: Int = 5
var height: Double = 1.82
如果不认识英语,可以查字典。
你能大概猜出来每句话什么意思吗?应该不难是吗?比如第一句是“苹果数量为10”等等。
假设你看到了下面的代码:
let a: Int = 10
let b: Int = 8
let c: Double = 3.14159
var d: Int = 5
var e: Double = 1.82
你能看出来每句话什么意思吗?第一句是“a等于10”?那么你告诉我,“a“是什么?也许你会说,我可以加注释,比如写成这样子的就好了:
let a: Int = 10 // number of apple
let b: Int = 8 // number of Orange
let c: Double = 3.14159 // pi
var d: Int = 5 //number of worker
var e: Double = 1.82 // height
那你为什么不直接写成最开始的那种形式呢?
请记住:任何情况下,起一个有意义的名字!
如果你的代码可以做到不使用任何注释,就能让别人大致看懂,是不是就具有了很好的可读性?
起名格式建议
注意我们的名字:numberApple。有没有发现number小写,Apple首字母大写。
Swift语言建议,对于常量和变量来说:
- 首字母小写
- 如果名字由几个单词组成,第一个单词后的单词首字母大写(驼峰格式)。
- 如果有一个单词是缩写,那么整个缩写使用相同大小写。(比如urlDescription和sourceURL)
等等,什么是常量和变量?
常量和变量
常量,值不可变。
变量,值可变。
我们还是看刚才的代码,我们来一步步分析:
let numberApple: Int = 10
我们试着这样读出来:let the number of apple, which is of type Int, to be 10。(令苹果数量为10,而且数据类型为整型)
这句话声明了一个常量,其值为10。这个常量的名字是numberApple。
let指定了这个值为常量。
:Int指定这个值数据类型为整型。
那么类似的
let numberOrange: Int = 8
声明一个名为numberOrange的常量,数据类型为整型(即上文所说的整数),赋值为8。
let pi: Double = 3.14159
声明一个名为pi的常量,数据类型为双精度浮点型(即上文所说的浮点数的一种),赋值为3.14159。
关于数据类型的更多细节,请参考下一章,或者网络资源:Swift 数据类型
类似的,下面代码,与上面不同的仅仅是let变成了var
var numberWorker: Int = 5
var height: Double = 1.82
var开头,则说明这个值是一个变量。
我们试着改变常量和变量的值。
numberApple = 3 // 错
numberOrange = 5 // 错
pi = 2.2 // 错
numberWorker = 6 // 没问题
height = 1.44 // 没问题
上面的“=”是赋值运算符
通过点击代码前面的红点,我们可以看到后面红底黑字的提示说明错误原因,下面白底黑字也是同样的错误原因,同时还有蓝底白字的修改建议。
我们发现,一旦声明了一个常量,那么它的值是不能改变的,但是变量可以。所以上面建议我们将numberApple的声明由常量变为变量:
let numberApple: Int = 10
变为:
var numberApple: Int = 10
通常,如果你认为一个值是不会变的,那么将其声明为常量。比如地球的半径,成年人的身高等。
如果是会变的,那么声明为变量。比如你的年龄,公司人数等。
递增和递减
尝试下面代码:
var counter: Int = 0
counter += 1 // => counter = 1
counter -= 1 // => counter = 0
开始,counter为0,通过使用递增操作符+=
,counter变为了1。又通过递减操作符-=
,变为了0。其实,上面代码等同于:
var counter: Int = 0
counter = counter + 1 // => counter = 1
counter = counter - 1 // => counter = 0
类似的,试试 *=
和 /=
有什么效果吧。
如果你和大多数人一样懒的话,我相信你会喜欢上这几种操作符的。
总结
- 注释的两种方法:
//
和/*...*/
- 一定要有一个有意义的名字
- 数据类型
- 运算符
- 常量和变量
下一步
我们知道了怎么表达有两个苹果,但是怎么表达我的名字叫小明呢?