编程起步:(一)告诉机器一个功能
本文约1900字,初学者建议阅读时间30min。某群群友专用
如果已经会用键盘和鼠标,加上中文、英语或数学还不错,初中生已经够格“用”编程。
他们已经对程序有所了解:鼠标左键对应不少程序,A
键代表输入“A”,Ctrl+C
对应“复制”的功能……
程序有些像给机器的文章,像让电脑执行的“解答过程”。主三科之一有一定基础,加上有学习编程的动力,“用”编程的目标还是很容易达到的。别说太复杂了,鼠标也很复杂,可多少人会用鼠标,但不懂鼠标内部构造呢?就算不懂编程的很多东西,也不影响用编程。
说到用编程的动力,或说你认为用编程有多重要。大家都觉得钱很重要,因为那是资产,是人躺着也能发挥作用的东西。程序也是,程序甚至能做到“一人成军”。
当然,现状还是要面对的,先实现一个小目标,告诉机器一个功能吧。
准备
接下来最好有一台电脑,打开浏览器,调出开发者工具(Windows机按F12),点击左上角“控制台”标签页。
如果有一堆红色的英文,忽视即可;也可调用“清除”功能处理:点输入框,输入`clear()(扩号是英文小括号),按回车键。
写第一个功能
接着告诉控制台第一个功能x => x * x
,按回车。就是一个简单的求平方功能。
可以看到,控制台会返回一个值,这个值就刚好与刚才你告诉浏览器的一致。
x
是这段功能的输入,x * x
是输出,箭头=>
用来分隔,可以方便阅读,x => x * x
是值。
练习编程,要严格注意每一个新的概念、注意细节,不然后面欠债会越来越多。
这里的概念有“输入”、“输出”,“值”,都贯穿本文;细节主要是方便阅读,除了分割符,
=>
和*
两边都有空格,主要是为了好看。虽然看起来不太重要,但是这是个挺好的指标,看初学者对练习编程够不够细心,受到的指导够不够规范。而且这种看似不重要的细节有很多,积累起来就不是细节了,这点都缺漏忽视的话,后面忽视的地方会更多,以至于难以挽回。
如果你比较细心,可能会注意到打完函数后、按回车键之前,控制台返回值那一行有个 f f f若隐若现:
f f f就是“function”,英语有“功能”、“函数”等意思。
那么,怎么用这个“功能”呢?(x => x * x)(2)
,函数两边的括号是为了避免歧义。这回在让控制台求值之前,先自己一步步求出值:
(x => x * x)(2)
,调用函数,输入为2
;(2 => x * x)
,把2
代入输入;(2 * 2)
,把该函数输出中的x
全换为2
;4
,求值完毕。
一步步求值的练习可以帮助初学者快速熟悉程序语言,也为后续彻底理解“功能”这个概念搭好基础。
练习:
- 输入4的时候,输出值是什么?请一步步求值;
- 输入16的时候,输出值是什么?请一步步求值;
- 功能
(y => y * y)
的输入为4的时候,输出值是什么?
名字
功能的名字
做上述练习的时候,老是要写多一次功能主体,如(x => x * x)
,有什么方法避免这种重复动作呢?
打个比方,假设你偷懒没做上面的练习,总不能一直用“村里最靓的但不做练习那个”叫你吧?会显得啰里啰唆。
假设你名字叫小强,用程序来表示:let 小强 = "村里最靓的但不做练习那个"
,以后就能用小强叫你了。
回到功能x => x * x
,在控制台输入let square = x => x * x
——let
开头,是为了告诉控制台这句话是用来命名的;square
就是名字,可以换成很多其他符号,比如f
;=
是分隔符,可以读作”被赋值为“。这句命令就是”让square
被赋值x => x * x
“,也就是square
的值是这个函数了。
控制台返回了什么值?undefined
。因为这款编程语言要求每句命令都要值,但let
这种”命名“命令实在是没有值,只好发明一个undefined
来填空,记住就好。
如何调用square
呢?跟调用它代表的函数一样,如:(square)(2)
,但之前为何要加括号来着?这里括号去掉可以么?
名字的选择其实可以很随意,你可以用square
也可以用f
,正如就算你不叫小强了,也是”村里最靓的……“。如果命名对你太难,难到学习进度那种,初学的时候可以先忽略,但要注意使用合理的名字是细节的一部分。
如果你喜欢中文,可以把名字换成”平方“,如
let 平方 = x => x * x
,调用要相应地改为平方(2)
之类;如果你喜欢数字,你可以试一试。对结果的解释不在本文范围。
如果你认真地阅读并练习本节,控制台可能有如下记录:
输入值的名字
同为求平方,(x => x * x)
跟(y => y * y)
有什么不同?如果你做了前面对应的练习,可能会说没什么区别,为什么?
提示:”就算你不叫小强……“
与函数名类似,x
可以换为可读性更高的名字,如input_number
,输出部分的名字也要相应替换。
今日小结
- 编程就是跟机器沟通,要调用或”告诉“功能;
- 概念
- 编程的功能,function,一般被叫做”函数“
- 功能构成:输入、输出
- 调用、求值与返回值
- 名字
- 命名
- 重新命名
- 使用名字
- 编程的功能,function,一般被叫做”函数“
- 代码
x => x * x
(x => x * x)(2)
let square = x => x * x
let 平方 = x => x * x
平方(2)
后面你还要应对更复杂的输入和输出,好好消化跟休息吧。
思考题:
- 本文的”功能“一般被叫做”函数“,高中数学的函数一般这样赋值 f ( x ) = x 2 f(x) = x^2 f(x)=x2,这样调用 f ( 2 ) f(2) f(2),你认为这样有什么好处,有什么坏处?
- 多试试在别的网站,按个F12打开控制台。不要关掉,一段时间后来看,可能会多出一些东西。忽略看不懂的地方,找你看得懂的。比如这篇文章写作的网站:
如果你足够细心,会注意到
let 小强 = "村里最靓的但不做练习那个"
不属于输入值,也不属于函数。那是这个系列尾声会讲的东西。现在不懂没有关系。本文多次用的“就算你不叫小强”,其实有更文雅的表达:“玫瑰不叫玫瑰,依然芳香”,莎士比亚说的。