好多小伙伴刚学编程的时候,不知道函数和方法的区别是什么。java中叫方法,C语言又叫函数,javascript也叫函数...晕头转向。
其实,他们来自两个单词:function(函数)与method(方法)。作用基本上相同,不过,我个人的理解是:方法更加依赖于类,存在在对象/类中叫做方法,函数则不是。而后来逐渐就不是特别区分了。
在刚学编程语言的时候,有些小伙伴不知道编程语言中函数的作用。今天,我就用数学函数的角度解释编程语言中函数的作用!
总所周知,数学中的函数一般是这样的:
y = 2 * x
估计上过八年级以上学过最基本的一次函数估计都可以理解这个式子。
那么,当他在x取不同值时,y也可以相应的变化。
如果将这个式子写在代码中,看起来就成了将 2*x 的结果赋值给 y ,y接收到的就是2*x表达式的返回值!
注意这个词:返回值。在未来你会反复的听到这个词。
此时如果让你写个分别计算当x是2、3、8、10的值,
数学中,将以上值一个个代入x中进行操作,得出对应的y
编程语言中也一样,
不过,假设后面要进行相同的某些较复杂的操作(这里就输出一句:代入xxx进行运算)
(为了方便演示,拆开写了):
#include <stdio.h>
int main(){
int x,y;
x = 2;
printf("代入2进行运算\n");
y = 2*x;
printf("%d\n",y);
x = 3;
printf("代入3进行运算\n");
y = 2*x;
printf("%d\n",y);
x = 8;
printf("代入8进行运算\n");
y = 2*x;
printf("%d\n",y);
x = 10;
printf("代入10进行运算\n");
y = 2*x;
printf("%d\n",y);
return 0;
}
因为做的操作过于简单,但如果是个很复杂的式子,这样写就会显得代码冗余。那么就可以利用到函数这个概念。
先把C语言函数的格式讲一下吧!
[返回值类型] [函数名] ([函数参数]...){
// 使用传过来的参数执行的操作
}
返回值类型可以是基本数据类型(如int,char,float,double...),返回的数据就是经过处理函数的数据!
那么,刚刚的式子就可以封装成一个函数(假设函数名就叫a):
int a(int x){
printf("代入了%d进行计算!\n",x);
return 2 * x;
}
这是最基本的一个C语言函数的格式,小括号中间的是参数。想对什么值做处理,就传入什么值即可(也可以选择声什么都不传,但是小括号不能省略),传入的类型与定义参数的类型必须相同,接收返回值的类型必须跟返回值类型相同!(如这个例子返回值为int类型,接收也用int类型)
此时,原来的代码就可以写成,也可以完成与刚刚相同的操作:
# include <stdio.h>
int main(){
int x,y;
x = 2;
y = a(x);
printf("%d\n",y);
x = 3;
y = a(x);
printf("%d\n",y);
x = 8;
y = a(x);
printf("%d\n",y);
x = 10;
y = a(x);
printf("%d\n",y);
return 0;
}
有些同学又会觉得,这还要返回一个值,然后再输出。函数既然能复用,为什么不全封装进去?确实也可以这样,不过这时就要注意了:函数不需要返回什么给调用者的时候,返回值类型就可以写 void 了,不过此时,再也不能拿任何变量来接收这个函数的返回值了。
完整代码如下:
#include <stdio.h>
void a(int x){
// 声明一个变量保存x处理后的结果
int y;
printf("代入了%d进行计算!\n",x);
y = 2 * x;
printf("%d\n",y);
}
int main(){
int x;
// 调用函数的时候函数内会输出
// 所以不需要一个个写printf
x = 2;
a(x);
x = 3;
a(x);
x = 8;
a(x);
x = 10;
a(x);
return 0;
}
此时,编程中的“函数”的概念与数学中“函数”的概念完美结合起来。但明显编程中的函数远比数学中函数更加的灵活多变!