第二章 准备工作
安装p5.js
开使使用p5.js和JavaScript有好几种方式,其中一种是进入p5.js官网并在系统中下载p5.js的源代码(见图 2-1)。
在写本教程时,下载页中有一个名为p5.js complete的链接,其中包含p5.js库以及一个示例项目。下载压缩包,可在其中看到一个empty-example文件夹。该文件夹中有两个文件:sketch.js文件用于编写JavaScript代码,index.html用于在Chrome等浏览器中打开并显示sketch.js文件中的JavaScript代码运行结果。还可通过作者的GitHub仓库获取相同的代码。
虽然可通过像NotePad这样的普通文本编辑器来修改sketch.js文件中的内容,但建议使用Sublime Text等代码编辑器来进行修改。
代码编辑器与Notepad或Word这样的文本编辑器非常相似,但它有着易于编码的特殊功能,如对给定编程语言的特殊词语进行语法高亮显示,我们这里的编程语言是JavaScript。Sublime Text是 你可以使用的一种代码编辑器,可下载并免费试用。
或许入门p5.js最简单的方式是在线编辑器。在线编辑器可在浏览器中使用,并且不需要在系统中进行任何安装。我在学习时很喜欢这种方式,因为入门很轻松。
在准备本书时一款易于使用的在线代码编辑器可通过如下链接获取:
如果出于某种原因无法访问以上链接,也可以尝试使用我的Codepen账号中托管的p5.js模板:Codepen - p5.js简单模板。CodePen是一个社交开发平台,这里可以在浏览器中编写代码并分享给其它开发人员。它是一个很棒的开发和测试环境。Codepen和上述所提到的p5.js编辑器的区别在于p5.js编辑器中仅能运行p5.js相关的代码,而Codepen上可以运行任意前端代码。
图2-1. 下载p5.js 源码的网页
图2-2. p5.js在线编辑器
在线编辑器的使用方法是,在我们写好代码要运行时点击页面上方的播放按钮键。按下按钮后将在右侧的窗口显示代码运行结果。Codepen的在线编辑器略有不同,只要做任何修改它都会自动执行。现在按下播放按钮不会看到什么效果,因为我们还没有编码在屏幕上画任何形状。此时生成的是一个空的画面,但我们也看到编辑器里是有代码的,这段代码我几乎在所有的p5.js程序中都会使用到, 为读者方便以下是这段代码(示例2-1)。
示例2-1. p5.js默认代码
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
}
我们先删除这段代码。在使用p5.js学习JavaScript之前,我们先来了解一些JavaScript的基础。通过GitHub仓库可查看本 书的所有示例代码。
JavaScript简易入门
我们可以在屏幕上编写简单如1 + 1的语句。这一个加两个数据加和的合法JavaScript代码。但如果这时按下播放按钮执行代码还是不会有任何输出。这有点让人泄气,因为我们觉得至少应输出计算的结果才对。
要在屏幕上看到JavaScript运行的结果,我们可以使用console.log()函数。
函数是一种编辑结构,其中包含执行特定操作的其它代码。通过调用所定义的函数名可执行复杂的操作。在我们调用函数(或称作执行函数)时,可以写下它的名字,本处为console.log,并在其后添加小括号。如果需要输入来运行其功能,我们只需像本例中那样将输入内容放在括号内。
console.log是一个内置JavaScript函数,用于在编辑器下方控制台中显示(或记录)函数内的给定值。我说内置的意思是大部分JavaScript执行环境都包含该函数。例如,浏览器界面中有一个称作控制台的区域,通过开发者工具可访问。p5.js和Codepen在线编辑器在编辑器下方也有这个叫作控制台的区域。
我们还可以有用户定义的函数,由我们自己创建,除非分享给其它人否则只能自己使用。p5.js这样的函数库有很多专属的函数。我们将使用p5.js的函数来在屏幕上画图形,并创建各类交互和动画视效。后面我们会深入到函数的概念,但现在只需要知道JavaScript有一个console.log函数,它接收一个值并在编辑器下方的控制台中显示该值。一开始我们学习的函数名字中间都不会有点号。在这个层面console.log有些不一样,但后面我们会解释为什么使用点号。
我 们来在代码中添加更多的console.log语句(示例2-2)。
示例2-2. console.log语句
console.log(1 + 1)
console.log(5 + 10)
console.log(213 * 63)
console.log(321314543265 + 342516463155)
示例2-3中为示例2-2中代码执行后控制台中显示的信息。
示例2-3. console.log语句执行结果
2
15
13419
663831006420
可以看到代码是从上到下按顺序执行的。有些编程结构可以改变这种顺序,这后面我们将会了解到。还可以看出计算机丝毫不介意处理大的数值。我们可以把人类要花上几天的运算交给计算机来执行。
示例2-2中的最后一条console.log语句处理的是非常大的数字。如果我们要在下一行对运算结果再减去10该怎么做呢?以我们现在的知识要进行这一运算还需要重复输入这些数字:
console.log(321314543265 + 342516463155 - 10)
这显然非常浪费时间。幸运的是计算很擅于存储和记住数值。因此我们可以创建被称为变量的东西来存储该值。
在编程语言中,变量是引用一个值的名称。
我们可以使用一个变量名在引入该值,这样无需再次输入这些值。如下所示:
var bigNumber = 321314543265 + 342516463155
console.log(bigNumber)
console.log(bigNumber - 10)
我们通过关键词 var 创建了一个名为bigNumber的变量,var关键词用于创建变量时使用。在var之后跟变量名,我们这里选用的是bigNumber。
选择的关键词在当前上下文中能讲得通这点很重要。本例中可能还不会有什么问题,但在程序变得越来越复杂之后,能明确含义的变量会有助于在阅读代码时能够理解意图。如查我们把存储这种大数的变量命名为cat就讲不通,其他人在阅读我们的代码时也会摸不着头脑。我们自己几个月后再来看代码也会搞不清状况。程序员一直致力于让自己的代码可读性尽可能强。
一但声明了变量,就可以使用等号运算符进行赋值。这初看起来可能有些不正常。在数学中,等号运算符用于表示等号两边的值相等。而这里我们用它来赋值,它将右边的运算值赋值给左边的变量。在很多编程语言中这都是非常普通的步骤。
既然我们的变量已经指向了值,我们就可以使用变量名来代替值进行操作。前面也提到过,变量名最后是有意义的。还有一些规则来规定变量名中有哪些字符可用哪些不可用。比如,在变量名中不能使用中间杠、感叹号或空格等特殊字符。另一个限制是我们不能使用JavaScript的保留字作为变量名,如不能JavaScript中用的var来作为变量名。如果尝试使用var作为变量名,如var var = 5,JavaScript会抛出一个错误。
译者注: 我们中国人还应注意不要使用中文输入法的标点符号,如,;等,因输入法的原因造成的错误很多时候不容易排错,所以在写代码时请保持使用英文输入法
这里提到了规则可能会让有些人不安。编程不是应该是件很有趣的事吗?但不用担心,保留字的清单很短的,所以我们无需记忆。在不断深入学习编程语言的过程中,我们会渐渐很自然的知道哪些名称不能使用。