Processing:函数(Function)

1. 用户自定义函数的好处:模块化,易读,拆分大程序,反复利用性强。还有一个重要的:查错。我们可以//掉某些自定义函数,一一运行其余的,来逐一找到问题所在。

2. 比如line()这样的函数属于processing自带库的函数。

3. 一个函数定义的结构是这样子的:
returnType functionName (arguments ) {
// Code body of function
}

4. 你可以直接用 函数名称() 这样的方式在draw()内调用你的自定义函数。你可以在setup()draw()以外的任何地方定义你自己的函数,当然,惯例是放在你的draw()程序块下。

5. 引数(Argument)是执行函数的条件。属于局部变量的范畴。

6. 局部变量可以在一个函数中被申明和使用。

7. void drawCar(int x, int y, int thesize, color c) 圆括号里的值叫做引数(Argument)。
void draw() {
drawCar(100,100,64,color(20,250,0,79));
}

圆括号里的值叫做参数(Parameter)。
二者是一种传递的关系。
可以这样假设:主程序呼叫函数并传递引数。函数得到引数后,便可利用它做任何想做的事。

8. 传递参数时需要注意的:
1)你必须传递与定义函数相同数量的参数
2)当一个参数被传递,它的类型(type)必须与在自定函数内申明的引数一致。例如整数传整数,小数传小数
3)作为参数传递给函数的值可以是数字(20,5,4,3,等等),变量(x,y,等等),或者一个公式的结果(8+3, 4 * x/2, random(0,10), 等等)
4)引数属于函数内局部变量并仅能在那个函数内被辨知

9. 运行这段代码:
void setup() {
float num = 10;
println(“The number is: ” + num);
randomizer(num);
println(“The number is: ” + num);
}

void randomizer(float newnum) {
newnum=newnum+random(-2,2);
println(“The new number is: ” + newnum);
}

由它可见,无论newnum怎样改变,num的值永远都是10,num的值不受影响因为它所传递的只是一个副本(copy)。

10. 由上例,我们也能看出一个使用函数的程序的流程:
1)设置num等于10
2)列引出num的值
3)呼叫函数randomizer
a. 设置newnum等于newnum加上一个随机数字
b. 列印newnum的值
4)列印num的值

11. 将noLoop()用在draw()里边可以停止程序循环,也就是说只运行draw()里边的程序一次。

12. 原来写在很多函数前的“void”意思是没有返回类型(ReturnType)的意思。。

13. 你可以在函数名称前使用诸如int或float之类的返回类型,另外不要忘记在程序最后加上“return 返回值的名称(例如变量名)“

14. 计算两点间的距离,可以使用pr内置函数dist()。用法: dist(100, 100, mouseX, mouseY); 计算点(100,100)与鼠标位置之间的距离。

15. 开方的写法:sqrt()

16. 再来一个华氏转摄氏的例子:
void setup() {
float temp = tempConverter(60);
println(temp);
}

float tempConverter(float farenheit) {
float celsius = (farenheit – 32) * (5.0/9.0);
return celsius;
}

反正目的就是代来代去的把我们搞晕@@

依据以前几课的经验,本课出题的重点仍然在于将之前我们写过的程序用自定义函数的方式重写调用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.