目录
1. 前言
某些任务通常需要在一个程序中的多个位置执行(e.g.查找数组中的最大值),此时可以把几乎相同的代码按照需要放在应用程序中,但若要进行小改动,则需要修改多个代码块,很不方便。函数则可以规避上述问题。
函数:
1.可提供在应用程序中的任何一处执行的代码块
2.可将相关代码组合在一起,提高代码的可读性(应用程序变短了)
3.可创建多用途的代码,让它们对不同的数据执行相同的操作
4.可采用参数形式为函数提供信息,以返回值的形式得到函数的结果
举例:有一个函数返回数组中最大的值,可在代码的任何位置使用这个函数,且在每个地方都使用相同的代码行。只需要提供这一次代码。参数就是一个要搜索的数组,返回值就是数组中的最大值,同一函数可以处理不同的数组
函数的定义:函数名、返回类型、一个参数列表
参数列表制定了该函数需要的参数数量和参数类型
函数的名称和参数共同定义了函数的签名
2. 定义和使用函数
一般以PascalCase形式编写函数名,即每个单词的首字母大写。
不与调用代码交换任何数据的简单函数定义组成:
1.两个关键字:static(和面向对象的概念相关) 和 void(表明函数没有返回值)
2.函数名后跟圆括号,如Write()
3.一个要执行的代码块,放在花括号中
static void Write()//定义函数Write
{
Console.WriteLine("Text output from function.");
}
相对地,Main()函数是是应用函数主体
2.1 返回值
return只能返回一个值
有返回值的函数会最终计算得到这个值。
与变量一样,返回值也有数据类型:
GetString()返回的是字符串
GetVal()返回的是double,可在数学表达式中使用
double myVal;
double multiplier = 5.3;
myVal = GetVal() * multiplier;
当函数返回一个值时,必须采用以下两种方式修改函数:
1.在函数声明中指定返回值的类型,但不使用关键词void;
2.使用return关键字结束函数的执行,把返回值传送给调用代码。
从代码角度看,对于Console应用程序函数,其使用返回值的形式如下所示
static <returnType> <FunctionName>()
{
...
return <returnValue>;
}
<returnType>可以是任何类型
其中<returnValue>必须是<returnType>类型的值,或者可以隐式转换为该类型
当代码执行到return语句时,程序会立即返回调用代码,后面的代码都不会执行
return也可以放在for循环中,if块或其他结构中,会使该结构立即种植,函数也立即终止
但所有处理路径都必须执行到return语句中,否则
static double Getval()
{
double checkVal;
// checkVal assigned a value through some logic
if (checkVal < 5)
return 5.7
return 3.2;
}//这是合法的
static double Getval()
{
double checkVal;
// checkVal assigned a value through some logic
if (checkVal < 5)
return 5.7
}//这是不合法的
执行一行代码的函数可使用一个功能:表达式体方法(expressio-bodied method)
static <returnType> <FunctionName> () => <myVal1 * myVal2>;
其中=>是Lambda箭头
举例:Multiply()函数
static double Multiply (double myVal1, double myVal2)
{
return myVal1 * myVal2;
}
static double Multyply (double myVal1, double myVal2) => mVall * myVal2;
2.2 参数
当函数接受参数时,必须指定以下内容
1.函数在其定义中指定接受的参数列表,以及这些参数的类型
2.在每个函数调用中提供匹配的实参列表
形参(parameter):函数定义的一部分
实参(argument):由调用代码传递给函数
两个术语通常被简单地称为参数
可以有任意数量的参数,每个参数都有类型和名称
static <returnTyoe> <FunctionName> (<paramType> <paramName>, ...)
{
...
return <returnValue>;
}
//示例代码
static double Product (double param1, double param2)
{
...
return param1 * param2;
}
//例子
st