老夫敲代码就是一把梭,我单说我的看法
我不管官方是怎么解释和定义的。我单说我的看法,我不要你觉得,我要我觉得!
1:为了应对项目的复杂性,函数可以将其项目中的某一个节点用函数的形式独立起来。比如,包。假如把人类看做一个程序。那么这个程序在运行中,在不同的场景是要携带不同的东西的。而这些琐碎的东西是可以丢在包里的。包里还可能有钱包、钥匙包、卡包。敲黑板,点题啊,包中用包,暗指函数可以嵌套函数。
2:为了让项目中的某一个节点具备复用性
(结合现实场景来看,你可以把他理解为U盘。)
3:函数就是方法,方法就是函数。就像数组教学篇里的索引和下标。一个意思。
函数语法-语法我会用慢慢专业的形式去表达了
<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
//方法体
}
代码模块有左右滚动条,按住不放,左右滑动即可
访问修饰符,决定这个方法对于其他成员的可见性。这个概念,萌新可以用钱包、银行卡来理解。钱包,你打开它,你就可以看见。银行卡,你需要去柜台操作才能看见。他们的本质一样,但是可见性不一样.
返回类型,方法可以返回一个值,约定这个方法体最终返回给调用方的数据类型,就是由返回类型决定的。比如,年轻的樵夫在过河时,不慎将一把铁斧掉入河中,河神拿了金斧、银斧、铁斧问樵夫掉落的是哪个。河神拿的三把斧子就是返回类型,类型是斧。成年人的世界,当然是全都要。
很好理解,就是这个方法的名字。方法名字一般描述了这个方法具体的作用。
参数列表,需要使用括号包裹起来,可以是多个,也可以是没有。参数算是沟通程序主体和方法体内部的一个衔接,比如樵夫例子中,樵夫掉落的铁斧头。
函数在调用时只需要通过函数名字调用即可,如果函数定义了参数,需要传递与之类型相同的参数。
例子1
我们用计算器来举例子,因为基础的加减乘除运算在实际场景中是会被重复利用的。所以我们可以将其做成四个方法
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Add(3, 5));//调用并输出Add方法
Console.ReadKey();
}
//定义了一个加法计算函数,
//其访问修饰符是public static
//返回类型是int
//方法名字是Add,代表这个方法是相加的方法
//参数列表中包含两个参数,numberA和numberB
public static int Add(int numberA, int numberB)
{
return numberA + numberB;
}
}
上面这个例子,Add函数修饰符使用了两个。public(全局公用) 和 static(静态)
常规情况下,一个public就够了,但是这里为什么要还要使用static呢?
那是因为函数,其调用Add函数的Main标记了static(静态)。
在同一个类中,静态成员只能访问静态成员,不可以访问非静态成员。
上述代码中,在调用Add方法时,传入了3和5.
在看Add方法的内部,通过return关键字,返回了numberA + numberB
最终输出结果:8
例子2
再来讲一个嵌套函数的例子,假如要给几个员工发工资。而工资中包含底薪、提成、绩效、考勤、补助、个税、五险一金。那么运用函数是什么样的效果呢?
代码中的个税计算可能不够严谨,主要目的是为了展现函数的复用性和可嵌套的特点。
class Program
{
static void Main(string[] args)
{
// 汤姆的工资条:底薪、提成、绩效、考勤、补助、五险一金
decimal[] tom = { 3000, 2000, 800, 200, 100, -320 };
// 杰克的工资条:底薪、提成、绩效、考勤、补助、五险一金
decimal[] jack = { 3500, 1800, 800, -200, 100, -320 };
Console.WriteLine("汤姆的工资:"+ ComputeSalary(tom) + "元");
Console.WriteLine("杰克的工资:" + ComputeSalary(jack) + "元");
Console.ReadKey();
}
/// <summary>
/// 工资计算函数
/// </summary>
/// <param name="parms_salary">员工工资条</param>
/// <returns></returns>
public static decimal ComputeSalary(decimal[] parms_salary)
{
decimal salary = 0;
salary += parms_salary[0];//加上底薪
salary += parms_salary[1];//加上提成
salary += parms_salary[2];//加上绩效
salary += parms_salary[3];//加上考勤
salary += parms_salary[4];//加上补助
//调用计算个税的函数
salary -= PIT(salary);//扣减个税
salary += parms_salary[5];//加上要扣除的五险一金
return salary;
}
/// <summary>
/// PIT 是个税英文(personal income tax)的简写
/// </summary>
/// <param name="money">税前金额</param>
/// <returns></returns>
public static decimal PIT(decimal money)
{
decimal pit = 0;
money -= 5000;//每月收入-5000的免征额度
if (money < 0) {
return 0;//不扣税
}
decimal yearMoney = money * 12;//全年应纳税所得额
//个税计算
if (yearMoney <= 36000)//全年应纳税所得额超过36000则扣除百分之3的个税
{
pit = money * 0.03m; // 0.03后面的m是为了标记0.03是decimal类型
}
else {
pit = money * 0.1m;//扣除百分之10的个税
}
return pit;//纳税金额
}
}
PC浏览,可以直接复制这段代码
最终输出结果
汤姆的工资:5747.00元
杰克的工资:5650.00元
我们来拆解一下例题2。
例题2中,一共三个函数。
Mian函数,控制台程序的入口点。所有代码从这里开始执行
ComputeSalary函数,用来计算工资的函数,要求传入员工的工资条作为参数。
PIT函数,用来计算指定工资金额的个税。要求将本月个人薪资作为参数传递。
上述代码在运行过程中,会先调用Mian函数,开始执行程序,其后通过调用ComputeSalary函数传入工资条来计算工资,在ComputeSalary函数中,又调用PIT函数来计算要扣减的个税。最终返回了员工工资。
其实函数还分为很多类型。
比如构造函数,全局函数,静态全局函数等等。
这里按下不表,萌新先理解最基础的函数运用即可。其他的会在之后的文章中一一讲到。