现在的位置: 首页 > 综合 > 正文

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

2012年10月05日 ⁄ 综合 ⁄ 共 4116字 ⁄ 字号 评论关闭
文章目录

第四章 函数

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

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

抱歉!评论已关闭.