我想把所有的procedure改为function并做相应的代码修改;
我想把所有的function改为procedure并做相应的代码修改。
两中想法都比较怪异。因为我对什么时候用procedure、什么时候用function不很清楚,只觉得可以随便用,都会达到预期的效果。希望有人能给我讲讲区别,难道真的是随便用吗?

解决方案 »

  1.   

    当然有区别,function是有返回值的。而procedure没有返回值,只是做了一件事而已~。
    如:function里一般有一个默认变量叫result的。这个值就是返回值。
    function在定义时要有类型名。
    function somefunc():integer;//表明这个function的返回值时interger型的
      

  2.   

    goodloop(小志) 正确
    function 类似VC中的 type_name function_name(paramter_declaration/void);
    procedure 类似于 void function_name(paramter_declaration/void);Delphi不成文标准:
      function返回一个值,参数是不返回值的,如function IsGetOK(ID:Integer; var Name:string):Boolean;这种写法是不推荐的
    而这种写法可改为
      procedure GetName(ID:Integer; var Name:string; var IsOK:boolean);
      

  3.   

    呵呵,俺来说两句:一、调用时的内存管理:对于函数,调用时传递参数需要额外附加一个返回类型,对于过程则没有。因此,所有的函数都可以写成过程。
    二、调用时的语法规则:函数调用可以在复制语句的右边,也可以向过程调用那样直接自成一条语句;而过程调用则不能。因此,所有的过程都可以写成函数,只是在需要时才将函数调用作为表达式或者赋值语句右边的部分。
    三、函数调用的函数返回值可以直接赋值给变量,而过程调用的返回值则必需有已存在的变量来存放,在此基础上才能作为表达式。总结:函数与过程都可以返回值,都可以返回多个值。如果返回的值作为表达式使用的机会更多,那么推荐用声明为函数(例如,Max,Min等函数),否则用哪一个都无所谓。
    至于Delphi,固然博大精深,但毕竟不是神话。例如:
    procedure SetLength(var S; NewLength: Integer);
    俺在频繁使用当中就觉得如下声明更合适:
    function SetLength(var S; NewLength: Integer): Boolean;//是否成功
    或者
    function SetLength(var S; NewLength: Integer): Integer;//错误代码其实,就Delphi中可以把函数调用作为过程调用来说,显然声明为函数要优于声明为过程,因为这样就可以在表达式中直接调用函数而省去为过程调用准备参数的麻烦。