《Visual C# 最佳实践》第四章 函数 (一):函数概念

原创 2011年01月22日 14:17:00

第四章 函数


  很多人到现在还分不清楚什么是函数,什么是方法,非常之困惑。其实,这两种概念是换汤不换药,讲到都是同一种东西。方法是面向对象的产物,比如,我们说使用某的对象的某个方法;函数是面向过程的产物,比如,我们经常会说执行某个函数。不管是函数还是方法,它们的写法都是一样的。本章将向大家详细介绍函数的相关概念。
  本章的学习重点:
  ◆    函数的概念
  ◆    函数的语法
  ◆    函数的调用及执行过程

4.1函数概念

  在数学领域,我们经常会听到函数的概念,比如三角函数中的正弦函数,余弦函数,正切函数,余切函数,这些对于我们来说,再熟悉不过了,只要输入相对应的变量就可以计算出结果。格式为y=f(x)。x称为自变元,y称为因变元,f称为函数名。
  今天,在计算机领域,也继承了这种思维方式,把一段经常需要使用的代码封装起来,在需要使用时可以直接调用,并且返回结果。格式为y=f(x)。x称为参数,y称为返回值,f称为函数名。同时,也再一次说明了计算机与数学的互补关系。

4.1.1函数的概念

  函数就是一段准备好的代码,它可以接受参数,处理逻辑,然后返回某些数据。我们通常使用函数来实现某个单一功能,通过对多个函数的组织和调用来实现整个程序的功能。函数相当于把一个复杂的较大的程序,分解为单一的较小的程序模块。所以,有时我们也把函数成为子程序。
在C#语言中,存在两种函数,一种是运行时提供的标准库函数,称为内置函数。这种函数不需要用户定义就可以直接使用。比如,Console.Write(),Console.Read()等函数。微软公司在开发.NET平台的时候已经把我们在编写程序时经常需要使用的函数,以最优的方式编写好了,并以类库的方式提供给用户使用。用户使用时只需按内置函数给出的函数名和相关规则直接调用即可。
  另一种是用户自定义的函数,称为自定义函数。尽管内置函数能为程序设计提供方便,使程序的质量和效率得以提高,但其数量毕竟有限,不能完全满足用户的特殊需求。因此,C#语言允许用户按C#语言的函数语法自己设计函数,来实现更个性化的功能。
  作者心得:
  函数这一节很重要,可以说一个程序的优劣集中体现在函数上。如果函数使用的恰当,可以让程序看起来有条理,容易看懂。如果函数使用的乱七八糟,或者是没有使用函数,程序就会显得很乱,不仅让别人无法查看,就连自己也容易晕头转向。可以这样说,如果超过100行的程序中没有使用函数,那么这个程序一定很罗嗦(有些绝对,但也是事实)。

4.1.2函数的语法

  上一节,我们讲到了内置函数和自定义函数,内置函数比较简单只要知道函数的作用以及调用规则就可以顺利的使用了。内置函数的内部实现和自定义函数的实现是一样的,所以,我们只要理解了自定义函数,自然就明白了内置函数的使用方法。下面我们向大家介绍自定义函数的语法,简称函数的语法。
  一个函数包括函数头和语句体两个部分,语句体比较容易理解,就是指函数的内部实现。函数头由三个部分组成:返回值类型,函数名,参数表。格式如下:
  返回值类型 函数名(参数表)
  {
        语句体;
  }
  返回值类型用来定义函数返回的数据是什么类型的,可以是前面说到的某个内置数据类型、或者是自定义数据类型,在语句体中使用return关键字来返回数据。如果没有返回值,使用void关键字来代替具体的返回值类型。
  函数名用来代表函数的标识,所以在程序中必须是唯一的,不能重复定义。它也必须遵循我们在讲述变量时所讲的标识符命名规则。
  参数表用来向语句体传送外部数据,可以没有参数,也可以有多个参数。在函数调用的时候,参数可以是值类型,也可以是引用类型。语句体对值类型参数的修改不会影响函数外部的值类型数据。但是语句体对引用类型参数的修改会影响函数外部的引用类型数据。
  语句体可以申明局部变量,并且可以编写代码实现功能的逻辑。
  我们在前面其实已经接触过函数了,例如:Console.WriteLine()函数,我们并不知道它的内部是什么,我们只要会使用它即可。下面我们来看一个范例:
using System;
namespace Microsoft.Example
{
    public class TestFunction
    {
        static int Add(int a, int b, int c)        //定义Add函数
        {
            return a + b + c;                //返回值
        }
         static void Main(string[] args)
        {
            int a = 1;        //定义int类型的变量a
            int b = 2;        //定义int类型的变量b
            int c = 3;        //定义int类型的变量c
            int result = Add(a, b, c);            //调用Add函数
            Console.WriteLine("结果为:" + result);
        }
    }
}
  上述代码中,第6行定义了一个Add函数,其中int是它的返回值类型,Add是函数名。这个函数需要输入三个整数a b c作为参数表。
  第8行是函数的语句体,用来实现函数的功能,这里实现的是三个整数相加。然后使用return关键字把结果返回调用函数的语句中。这里需要注意了,return关键字返回的类型要与函数名前面的回返值类型一致。
  最后的输出结果是:
  结果为:6
  作者心得:
  函数名的命名可大有学问,我们需要记住的第一条就是名称要有真实意义。看着函数名就知道,函数的作用是什么,实现什么功能。在C#语言中一般使用动宾格式来命名,而不是主宾格式。例如:GetAge()函数。

4.1.3函数的调用及执行过程

  上一节向大家讲述了如何定义一个函数,这一节将向大家讲述如何调用一个已经定义了的函数,以及函数调用的相关知识。
  函数的调用格式:
  函数名(参数表);
  需要说明一下,函数名必须与函数定义的函数名一致,这个估计大家不会做错。参数表也是一样,必须与函数定义的参数表一致,类型,个数,顺序都要一致。当多个参数时,使用逗号相互隔开。作为参数表中的参数可以是常量,有值的变量或者运算表达式。
  在C#语言中,函数调用根据在程序中出现的位置来分,可以有以下三种调用方式:
  1、以函数调用语句的形式调用。当函数调用不要求返回值时,可由函数调用加上分号构成来实现,即该函数调用作为一个独立的语句使用。
  例如:test();
  test()函数调用相当于执行一段相关程序。
  2、函数调用作为一个运算对象直接出现在一个表达式中。例如:
  k=sin(x)*cos(y);
  该赋值语句包含两个函数调用,每个函数调用都是表达式的一个运算对象。因此要求函数应带回一个确定的值参加表达式的运算,这种表达式称为函数表达式。
  3、将一个函数调用的返回值作为另一个函数调用的实参。例如:k=sin(cos(x));
  下面我们来看一个范例:
using System;
namespace Microsoft.Example
{
    public class TestTransfer
    {
        static int Add(int a, int b, int c)        //定义Add函数
        {
            int sum;                    //定义一个int变量sum
            sum = a * (b + c);            //进行计算
            Console.WriteLine("a的值为:" + a);
            Console.WriteLine("b的值为:" + b);
            Console.WriteLine("c的值为:" + c);
            return sum;                //返回值
        }
         static void Main(string[] args)
        {
            int j, sum;                    //定义两个int类型的变量
            Console.Write("请输入J的值:");
            int.TryParse(Console.ReadLine(), out j);
            sum = Add(j, ++j, ++j);        //调用Add函数
            Console.WriteLine("计算结果sum是:" + sum);
            Console.Write("请输入J的值:");
            int.TryParse(Console.ReadLine(), out j);
            sum = Add(++j, ++j, j);        //调用Add函数
            Console.WriteLine("计算结果sum是:" + sum);
        }
    }
}
  上述代码中,当输入j=1,调用函数Add(j,++j,++j)时,按从左到右的顺序,先计算表达式的值,相
当于Add(1,2,3)函数调用,函数计算返回值 1*(2+3)=5。
  当再次输入j=1,调用函数Add(++j,++j,j)时,按从左到右的顺序,先计算表达式的值,相当于Add(2,3,3)函数调用,函数计算返回值 2*(3+3)=12。
  这里需要注意的是,C#对于参数为表达式是,使用的是从左到右的计算顺序。其他语言可能有所不同,比如C语言使用的是从右到左的计算顺序。
  最后的输出结果是:
  请输入J的值:1
  a的值为:1
  b的值为:2
  c的值为:3
  计算结果sum是:5
  请输入J的值:1
  a的值为:2
  b的值为:3
  c的值为:3
  计算结果sum是:12

oracle入门之第四章【单行函数】

4.1 什么是函数 只要它能接收输入,对输入进行加工并产生输出,它就可以被称之为函数。 4.2 单行函数简介 单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果。 单行函数...
  • zhou9898
  • zhou9898
  • 2013年02月13日 19:59
  • 467

你必须知道的25个C#基础概念

1.静态变量和非静态变量的区别?  静态变量:静态变量使用 static 修饰符进行声明 ,在所属类被装载时创建,通过类进行访问,所属类的 所有实例的同一静态变量都是同一个值。 非静态变量:不带...
  • y29508968
  • y29508968
  • 2016年12月04日 11:18
  • 630

编写高质量代码:改善JavaScript程序建议--函数式编程

函数式编程已经在实际应用中经发挥了巨大作用,更有越来越多的语言不断地加入对诸如闭包、匿名函数等的支持,从某种程度上来讲,函数式编程正在逐步同化命令式编程。 建议1:禁用Function构造函数使用Fu...
  • ligang2585116
  • ligang2585116
  • 2016年10月16日 21:19
  • 1752

《软件需求最佳实践》与《掌握需求过程》对比

最近公司要考察需求技能,抱着总结经验,提升技能的心态,看了两本关于需求的书籍,一本是被公司奉为需求人员教科书的《软件需求最佳实践》徐峰著,一本是《掌握需求过程第三版》James Robertson著。...
  • happymatilian
  • happymatilian
  • 2016年10月27日 16:40
  • 1659

关于C# 中的封装

今天开始关于深入.NET平台与C#编程的学习,第一章中讲到关于封装的概念及应用,部分学员感觉比较的抽象,现在将C#中的封装相关的知识点整理了一下,希望能对你的学习带来帮助。 封装的概念 ...
  • 279503482
  • 279503482
  • 2014年03月07日 13:06
  • 3463

20个数据库设计最佳实践

能够最佳的使用好数据库需要扎实的基础,下面文章详细的说明了20个数据库设计的最佳实践,很适合是实习的程序员学习。 使用明确、统一的标明和列名,例如 Sch...
  • www19940501a
  • www19940501a
  • 2013年07月01日 23:43
  • 972

用spring 集成mybatis的最佳实践

第一篇博文,欢迎各位大神拍砖
  • yeluochengshang
  • yeluochengshang
  • 2014年09月24日 01:46
  • 1405

Java异常处理手册和最佳实践

Java异常处理框架是非常强大并且很容易理解和使用,异常可能产生于不同的情况,例如:用户错误数据的输入,硬件故障,网络连接失败,数据服务器故障等等,下面我们需要学习在java中如何处理这些异常。在程序...
  • hp910315
  • hp910315
  • 2015年10月21日 15:26
  • 2685

Android开发最佳实践

 原文链接:https://github.com/futurice/android-best-practices 转载来源:http://blog.csdn.net/asce1885/arti...
  • myhui123
  • myhui123
  • 2015年02月10日 11:47
  • 6759

机器学习实战第四章——朴素贝叶斯分类(源码解析)

机器学习实战第四章——朴素贝叶斯分类(源码解析)
  • Quincuntial
  • Quincuntial
  • 2016年01月12日 20:05
  • 1155
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《Visual C# 最佳实践》第四章 函数 (一):函数概念
举报原因:
原因补充:

(最多只允许输入30个字)