几句话编程入门(已完结)

0015 隐藏的问题

在小学我们学习书写计算式的格式是:1+2 = 3。前面是计算式,后面是结果。那么等号就表示对前面算式的计算。

到了初中学习代数的时候,我们书写的方式是:a = 1+2。这时候再按照上面的思维去理解,就解释不通了。这里的意思是把等号后面的内容进行计算,然后把结果放到 a 里面。

我们在程序中,使用的是后面的这种格式。那么等号(在不同语言中有可能是不同的符号表达,但道理一致)并不是我们传统意义上的等号。那么你先忘掉过去所学过的东西,然后记住现在这个符号叫做赋值符。赋值符的含义是把后面的计算结果(值)赋给前面的变量或者常量。

在我的印象中,初中对于这个赋值的概念并没有讲的特别明确。因为在当时的知识体系下,等号还用作了许多其他的用途。而在代码中我们对这些内容进行了更加细致和清晰的设定。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

8 个赞

0016 关于数字

有整数,也有小数,我们称小数为浮点数,就是它具有一个浮动的小数点嘛。

这就是两种数据类型,整型和浮点型。为什么它们的类型不同呢?因为它们在计算机中进行储存的方法不一样,虽然存储起来都是 0 和 1 的组合,但读取出来可能是不同的内容,这就是类型的区别。这里就不具体展开了。

对于一个数据,计算机会分配一个内存空间进行存储,那么分配多大的空间,这是一个问题。为了确保空间不被浪费,所以一般分配一个较小的空间。但某些情况下这个数据比较大,可能小的空间就不够用了,所以要分配一个较大的空间。于是就又有了一种数据类型,长整型。而浮点型所对应的就是更高的精度,你可以理解为更大的内存空间允许书写更多的小数位数。

以上就是一个大概的理解。现在流行的语言很多都不会刻意的去区分数据类型了。只是你了解这些概念,对理解代码的运行还是非常有帮助的。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

6 个赞

摘录来自我最近学习的、十分优秀的js教程中关于“小数的数值计算不精确”的解释,毕竟不少语言里都有这样的情况。
示例为0.1+0.2在程序计算后不等于0.3(这的确是完全与数学不符)

一个数字以其二进制的形式存储在内存中,一个 1 和 0 的序列。但是在十进制数字系统中看起来很简单的 0.10.2 这样的小数,实际上在二进制形式中是无限循环小数。

换句话说,什么是 0.10.1 就是 1 除以 101/10,即十分之一。在十进制数字系统中,这样的数字表示起来很容易。将其与三分之一进行比较:1/3。三分之一变成了无限循环小数 0.33333(3)

在十进制数字系统中,可以保证以 10 的整数次幂作为除数能够正常工作,但是以 3 作为除数则不能。也是同样的原因,在二进制数字系统中,可以保证以 2 的整数次幂作为除数时能够正常工作,但 1/10 就变成了一个无限循环的二进制小数。

使用二进制数字系统无法 精确 存储 0.10.2,就像没有办法将三分之一存储为十进制小数一样。
IEEE-754 数字格式通过将数字舍入到最接近的可能数字来解决此问题。这些舍入规则通常不允许我们看到“极小的精度损失”,但是它确实存在。

我们可以看到:

alert( 0.1.toFixed(20) ); // 将0.1舍入到小数点后20位,得到0.10000000000000000555

当我们对两个数字进行求和时,它们的“精度损失”会叠加起来。

这就是为什么 0.1 + 0.2 不等于 0.3
不仅仅是 JavaScript

许多其他编程语言也存在同样的问题。

PHP,Java,C,Perl,Ruby,Python 给出的也是完全相同的结果,因为它们基于的是相同的数字格式。

源地址 数字类型 (学js强烈推荐这个教程)

5 个赞

补充的十分赞!

如果希望获得精确的计算,可以引入一些相关的功能库,插件,组件什么的。各种语言都有这方面的增强,或者说补丁。我没探究过具体的原理,但猜测大概是用性能换精确度。

1 个赞

0017 字符串

变量或者常量(以后我可能只说变量,但是常量基本同理,只是一起称呼的话比较拗口)不止可以用来代表数字,也可以用来代表一串文字。那么这样一串文字就被称呼为字符串。

"这样就是一个字符串"
str = "也可以把这个字符串赋值给一个变量"

那么为了表明这是一串文字,它不是代码,也不是代码中的变量或者其他什么的,所以我们要使用引号对它进行一下标记。一般来说使用双引号是通用的方法,在有一些语言中也可以使用单引号,然后两种引号可以交替使用。

这里要指出两个特例:

如果这串字符里没有内容,可以吗?这是可以的,它仍然是一个字符串,只不过字符串里面没有任何内容,这被称作为空字符串。写出来当然就是一对引号(""),里面没有任何东西。

如果引号里面是数字呢("1234")?这仍然是字符型,而不是数字类型,因为我们标记了这是字符串,所以我们应该把它当做文字看待,而不能因为里面写的是 1234 就把它当做数字。

复杂吗?不复杂,只是对概念的咬文嚼字而已


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

3 个赞

0018 简单的计算

a = 1+2*3/4-5

就很直观的四则混合运算,只不过乘号和除号和我们在纸上书写的方法有点区别,毕竟键盘上没有直接的乘号和除号。

计算的话也会先算乘除法,再算加减法,上面的计算结果是 -2.5。这里引出了一个概念,就是运算符的优先级,不同的运算符有不同的优先级。先运算优先级高的,如果优先级相同,就从左往右计算。这都是小学的概念啦。

然后也可以加小括号,来提升这部分运算的优先级。也可以多层小括号嵌套,对,没有小学里面那种中括号和大括号的设定,全都是小括号,但你可以随意套多少层。

然后需要注意的是,这些符号必须在英文状态下输入,就是英文半角符号。要不然是会出错的。

其实对于代码基本上除了注释和字符串里面的内容都应该在英文状态下进行输入。(当然这件事情并不绝对,比如现在许多语言的变量名其实是可以使用中文的,但真的十分不建议,也不需要什么特别的理由,就反复切换输入法,已经很让人烦躁,而且这会导致我们不小心在错误的状态下输入符号,就更加容易犯错。)


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

4 个赞

感谢作者耐心写这么有趣的编程科普文章,我觉得很有价值,不过要看目标读者。刚才在一个技术群里分享,大家给了一些反馈建议,我贴在这里供参考哈:


pimgeek: 大家觉得这位网友写的编程入门怎么样?

pimgeek: 你给身边的人推荐编程书籍或教程时,会选择哪种教材?后来真正学会编程的人如何反馈的 [偷笑]

E: [耶] 看需求 要是想找工作的直接去培训机构 如果是自己研究学习的 可以去看看大学里面的公开课入门

E: 自学的基本都凉凉 培训机构的倒是有一部分出来工作了[旺柴]

pimgeek: 你说的这个情况和我了解的相反,很多学编程学的特别好的人都说他们主要靠自学,培训班上过都觉得不太值 :flushed:

E: [旺柴]那是因为他们都是培训班出来的

M: 因为学得好的不用去培训班[偷笑]

M: 去培训班的反之

E: 你说的不对, 培训班学不到东西的

Z: 为什么要学编程[抠鼻]

E:但是培训班会让你进入这种编程学习环境,还有提供入职的培训。

E: 学习编程是门槛最低的…

E: 而且不需要前期资本

M: 初期,理论占30% 练习占70%的教程,不要纯讲理论的教程。

pimgeek: 完全同意

1 个赞

我是纯自学的。不过前期有一些 C 语言的基础(计算机二级

我也教过许多人,见到了许多失败的案例,分析了许多原因。

初期学习理论确实很重要,但想要学会动手是非常非常必要的。所以我后来的课程干脆就改成全动手了,反正只要肯坚持动手,总会学会的;而不肯动手的,必然是学不会的。

目前这个教程是纯讲编程的基础理论,但并不与动手冲突(只是需要动手的时间点,不在此刻)。虽然是理论层面的东西,但更偏重于入门了解方向。目标是先对这些概念有一定的了解和认识,有一定的熟悉和印象。所以讲的很浅显很粗糙,并不需要刻意的去记忆,看一下,听懂了就可以。

这样做的好处是在阅读实际的编程教程时,不会出现最初的茫然期,可以大概知道为什么要先学这样的知识,它在后面可能起到怎样的作用。而不是在阅读教程的前1/3时,都是拼命的去记忆那些基础概念,而完全不知道为什么要学习它们。

换句话说,就是在为编程入门这件事情绘制一个简易的地图,这样在真正上路之后就可以明白自己大概在什么位置,应该朝什么样的方向去前进。

5 个赞

0019 进行比较

等号不再是我们小学时所学到的那个等号,虽然它还可以用来计算出结果,不过是把右面的计算结果存储到左面的变量里。而且本身表示的含义是赋值(在不同语言下具体的符号可能有区别)。

但是在我们小学学习的范围内,等号并不只有计算这一个用途,它还可以用来比较左右数字的大小。表达的是左边的计算结果和右边的计算结果在数值上相等。

1 = 1

像上面这样书写,我们认为这个关系是成立的,或者说这是对的。

好了,结束了对小学知识的复习,开始学习新的设定。为了避免混淆,所以我们用两个或者三个等号来表示这种相等的关系:

1 == 1

两个等号表示数值上的相等,就是把两边的数据转换为同种类型,然后比较它们的值。如果是三个等号,则是“全等于”,表示两边的计算结果,无论在数值上还是类型上都是完全相同的。

那么类似的,还有大于(>)、小于(<)、大于等于(>=)、小于等于(<=)。再强调一下,这些设定基本上在各种语言下都有,但是具体的书写方法可能有细节上的差别。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

3 个赞

0020 成立与否

上一节我们说到可以比较两个计算结果之间的大小关系。那么比较的结果就是这个式子成立或者不成立。或者说这个表达式对与错。说到这里,大概你已经开始回忆到了一些初中代数中的基础概念,对,就是真与假。

即便你在初中对这个概念觉得很头疼,也不用着急。我并不会把这件事情搞得很复杂,只是我说说你听听,在想当初……不对,不是《八扇屏》。我说说你听听,听懂就够了。

如果我说一等于一,那么这件事情是成立的,你没有疑问吧?

如果我说一等于二,那么这件事情是不成立的,你也没有疑问吧?

我们把条件成立,标记为真,写作 true;把条件不成立,标记为假,写作 false(不同语言下可能有大小写上的区别)。

上面这句也很好理解吧,只是换了一个说法,但只有两种情况,还不至于让我们在认知上产生混乱。

其实现在你已经学会了一个新的数据类型,叫做布尔型(Boolean)。我知道这个名字会让人很迷惑,但这个问题我们不去思考。反正这种类型只有两个值,就是上面所说的这两个。通俗地讲,它就用来表示成立与否,或者说是与不是……反正正反两种情况,放到不同的语境下,选择你喜欢的表达方式,能帮助你理解就 OK。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

2 个赞

0021 与或非

可能你听说过标题中这个说法,它说的是三种关系,对,每一个字代表一种关系。

与(And),你也可以理解为“和”,我个人更愿意把它读作“并且”,因为这样读会更有助于我理解。比如我们知道有一种太阳能灯,它在天黑的时候感应到有人经过就会亮起来。那么它亮起来的条件是什么?天黑并且有人。前后两个条件都为真(都成立)的时候,它就亮起来了。有一个条件没有达成那它就不会亮。

这挺简单的吧,甚至都不算是一个逻辑问题,只是我们日常语言表达和理解的问题,稍微体会一下就可以很准确的抓住这种关系。

或(Or),我会把它读作“或者”。买东西想要付款,你得带着现金或者手机。如果有现金,就可以直接给他钞票;有手机就可以扫码。那么这两个条件达成一个就可以完成付款;都没带就得哭唧唧的求朋友给送过来了;那如果都带了呢,当然也可以完成付款,这并没什么毛病。

我们可以看出上面这两种关系说的是两个条件之间的关系。而下面这个说的是一个条件:

非(Not),我会把它当做“不是”或者“并非”,总之就是取一个相反的结果。那么比如我爱吃糖,如果是相反的结果就是我不爱吃糖。如果我本身是爱吃糖的(事实),那么第一个描述就为真,第二个描述就为假(相反的结果)。

初中时对于这三种关系所产生的结果,我们会去背一个真值表。但事实上只要你用合适的语言去将这个关系读出来,那么它的结果就自然而然的呈现出来了。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

3 个赞

0022 关于运算符

有几个数据参加运算就叫做几元运算符。所以加号就是二元运算符,因为它是把左右两个数据给加到一起。

上一章我们所说的三种关系叫做逻辑运算,前两个是二元运算,最后一个是一元运算。

然后还有一个三元运算符,我来简单的举个例子:

d = a ? b : c

显然我们是要把后面三个数据的运算结果存入前面的变量 d。后面的运算是这样进行的,如果 a 为真,那么计算结果就是 b,否则计算结果是 c。这个问题你只要读两遍这句描述就可以理解。当然实际的使用还是会涉及到一些后面的知识,所以在这里只要求读懂。

然后还有一些其他的运算符,比如说取余数,这还是比较常用的,但我们又容易忘掉这种操作。然后各种语言一般都会提供数学方法,用来进行一些更复杂的数学计算,但是在语法上差别可能比较大,我就不做举例了。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

6 个赞

0023 如果

如果明天是晴天,我们就一起吃个饭。

这是我们很日常的一种表达,现在来仔细的理一下其中的逻辑。首先有一个条件——明天是晴天。如果条件成立,那么就进行后面预订的事情;如果条件不成立,那么就不进行这些事情,就把这些内容略过了。

这是挺容易理解的。

我们要知道计算机是很笨的,让它做什么事情,你就要非常细致的交代清楚。比如说一起吃个饭这件事情,你就要细致到出门,到哪里,吃什么东西……一条一条的给它列出来。你应该懂了,这可能是一个代码段。

用并不标准的代码去简单的示例一下这个情况:

if(明天是晴天){
  出门
  骑共享单车
  到 KFC
  ……
}

再强调一遍,如果那个条件没有成立,我是不会去做后面一系列事情的,毕竟如果下大雨,我还跑出去浇着,就……傻敷敷的


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

5 个赞

0024 否则

如果明天是晴天,我们就一起吃饭。否则我们就在网上打游戏吧!

依然是一个条件,如果条件成立,那么就一起吃饭,如果条件不成立,那么就一起打游戏。这就形成了两个分支。

这也没啥不好理解的吧?

if(明天是晴天){
  一起去吃饭呀
}else{
  那就在网上打游戏吧
}

代码里也就是换一个结构来表达相同的意思,再按照最开始那样读出来就很容易理解了。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

3 个赞

0025 结构

前面所学的两种算是逻辑语句。但其中包含了代码块或者说代码段。那么语句里面包含段落,总觉得有点儿奇怪,我就喜欢把它们当做一种固定的结构。

或者也可以把它们当成一种书写的格式,为了能够更直观的表达这种逻辑关系。

那么其中的代码块是可以包含任意内容的,也就是说,我们可以在里面再放入这样的结构,这就形成了嵌套。

如果明天是晴天,我们就……看具体情况吧,图书馆开门就去图书馆,否则就去咖啡厅发呆。当然,如果不是晴天就出不了门,于是只好在家里打游戏。

显然情况变得复杂了一些,虽然用语言描述我们也能够理解,但是写到代码里,你会发现它变得更容易懂。

if(明天是晴天){
  if(图书馆开门){
    去图书馆看书
  }else{
    去咖啡厅发呆
  }
}else{
  那就在网上打游戏吧
}

这时候你也应该能够感受到代码的缩进,对于快速对应层级关系的帮助。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

6 个赞

0026 关系

当我们进行多个判断的时候,会有许多种表达方式,这里不一一举例。这些方式会各有优劣,不过作为初学者,第一个目的是先能够将自己的想法表达出来,所以按照你能够理解的方式去书写就好。

我们可以判断一个事件发生需要的所有条件,比如上一章中我们可以判断明天是晴天,并且图书馆开门的时候。那么这其实是两个条件,两个条件同时达成我们就去图书馆。其他的事件也把所有的条件都进行一遍判断,但是这样效率肯定会低一些, 而且也存在重复的判断。

嵌套的方法减少了重复判断,相对逻辑上也更加清晰,但如果嵌套的层级比较多的时候,也会显得复杂。所以有时候我们会使用一种类似串联的方式。

if(明天不是晴天){
  在家里玩游戏
}else if(图书馆开门){
  去图书馆读书
}else{
  一起吃个饭
}

如果条件达成,那么执行对应的任务。条件没有达成,则进行后续的判断。其实就是不断的对当前的情况进行分支,直到最后覆盖所有的情况为止。那么你可以尝试用这样的表达方式,去判断不同的成绩对应的优良可劣的表达。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

4 个赞

0027 思考

根据是否达成相应的条件,判断需要执行的内容,这差不多是程序所要做的大部分事情了。

换句话说,如果不考虑性能和表达的清晰度,那么程序里的逻辑控制几乎可以全部用这样的判断去表达出来。

事实上在我们生活中也是一样的,只是我们习以为常,没有认真思考过细致的去说明其中的每一个步骤。

早晨醒来,如果不困那就睁开眼睛,如果困那么就要考虑一下今天是不是有什么日程安排。没有日程安排,当然是安心的继续睡觉。有日程安排的话就要睁开眼睛看一下时间,如果时间还早,那么可以继续睡觉;如果没时间睡觉了,当然就要起床;如果都已经超时了,那就飞快的起床……

你看是不是和我们前面举的例子,在逻辑形式上是非常类似的。

那么我们也要不断的去做这样的练习,其实就是锻炼我们把一件事情的操作逻辑给表达清楚的能力。毕竟电脑很笨的,只会按照我们设定的方法去执行,所以如果我们不能够清楚的表达我们的意思,那它就没有办法好好的完成工作了。

那么这也是学习编程所能够带给我们的收获,就是逻辑思维能力,会更加有条理的去分析一些事情。所以无论是抱着怎样的目的去做这样的练习,都是很有益处的。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

3 个赞

0028 多重分支

如果一件事情有许多的可能性,就比如我们前面所讲到的,判断分数和优良可劣的对应,这就涉及到了多个可能。

我们当然可以像前面学习的那样进行表达,其实那也是一个挺不错的方法,如果你有实际操作并认真思考,会发现它可以减少一些重复的判断,所以在许多时候,这都是一个推荐的方法。

但是还有另外一种方法,就是选择语句,switch,注意我们讲的不是游戏机。这个语句比较复杂,这里我们只讲简单的道理。

首先会给出一个条件,但这个条件一般不是简单的判断一个对与错,或者说成立与否。而是会有多个可能的结果。对于每一种可能性(case),我们提供了相应的解决方案(要执行的代码)。如果不属于其中的任何一种可能性,那么就执行默认的代码(default)。

一般的,理解到这个程度,然后对照标准的格式去书写就够用了。我先来举一个简单的例子(语法上并不严谨):

switch 今天是星期几 {
  case 1:
    今天是星期一
    break
  case 2:
    今天是星期二
    break
  default:
    今天不是星期一也不是星期二
}

根据上面的描述,你大概能够理解这段代码应该如何去执行。那么就多讲两句它的实际运行原理。

它是将上面的条件计算出一个结果,然后和每一个 case 后面的值进行比较,如果它们相同,那就从这里开始执行代码(前面没有匹配到的代码就被跳过去了),这时候如果没有后面的 break,就会一直执行下去,也就是把后面所有的代码都给执行到,显然这不是我们所期望的。所以我们使用 break 进行打断。对于 break 你可以理解为:从当前这个代码段中跳出,后面没有执行到的部分就不管了。当然这句话不够严谨,不过先有一个这样的印象,在后面实际应用中去理解就 OK。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

4 个赞

0029 转换思路

条件和情况之间的比较是是否相等,但如果你深入思考一下就会发现问题。还是用分数的例子,比如 90 分以上就算作优。我们输入的条件和具体的情况应该怎么写呢?输入分数,那条件写什么……解决了这一个情况,那么多种情况的判断,又该如何去写呢?

所以这时候我们就应该反其道而行之:

switch true {
  case score>90:
    成绩优异
    break
  ……
}

其实就是别老想着把计算式放在条件里面,我们也可以把结果放在条件里面,而把计算式放在每种情况之中。这就是一个简单的思路转换,但有时候这并不那么容易想到。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

2 个赞

0030 简写

在编程中我们经常会用到这样的操作:对于一个变量进行计算,把结果还保存回这个变量之中,就比如:

a = a+1

这当然很简单,但是如果这种操作用的非常多,那么这个写法就显得有那么一点点麻烦。而且如果我们想要修改其中的变量时,等号前后都要进行修改,就也不太方便。所以我们会简写成下面这个样子:

a += 1

这个写法和上面是等价的,就是完全一样,但这样稍微简短一点,并且修改起来也比较容易。那么扩展一下,四则混合运算都可以这样简写(在不同语言下可能有不同)。

这很好理解,我就不一一举例了。

然后还有一种更加频繁的操作,就是真的像上面一样,对于一个变量增加 1 或者减少 1。就比如我们在跳绳计数的时候就是不断给总数加一;火箭发射倒计时就是不断给计数减一。所以这种操作就有了另一种简写:

a++
a--

这被称作为自增或者自减,就是在自身的基础上增加 1 或者减少 1。就类似于:

a = a+1
a = a-1

注意刚才我说的是类似而不像前面那样说的是等价。如果你希望让问题简单一些,那么自增和自减就让它是一条单独的语句,不要混入其他语句中,这样你也就不需要关注下面所讲的这些区别了。

自增和自减的符号还可以写在变量的前面:

++a
--a

写在前面和写在后面是有区别的,这个区别只出现在这个语句同时还使用这个变量值的时候。为了让你能够理解,那么现在先记住一个原则:在上面这两种情况先出现谁,就先计算谁。

a = 6
b = a++

在第 2 行中,我们要使用 a 的值,那么就先拿出 a 的值(6)进行使用,然后再计算后面的自增。所以执行完这两条语句之后 b 被赋值为 6,而 a 自增之后变成了 7。

a = 6
b = ++a

这次自增符号在前面了,所以先计算自增,于是 a 的值变成了 7,然后取用 a 的值,所以 b 为赋值为了 7。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

2 个赞