首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编程基础知识:函数签名学习

编程基础知识:函数签名学习

作者头像
用户1289394
发布2018-02-27 19:49:57
9570
发布2018-02-27 19:49:57
举报
文章被收录于专栏:Java学习网Java学习网

编程功能的基本单位。你建立你的程序一个函数(或方法)。最小的东西您可以测试在单元测试是一个函数。也是最小的一个函数的代码名称,因此可以创建一个新的抽象。函数的目的是封装一些代码并使其可用于其他程序或其他程序库。

什么是函数签名?

函数签名包含函数名,参数,并在一些语言中,返回类型。有几个等其他元素,这些元素可能存在异常规范和各种限定符(尤其是对类方法)。不是所有的编程语言都支持所有元素。

Python总是从每个函数返回一个对象,所以没有指定返回类型的签名:

def add(a, b):
	pass

C指定返回类型和每个参数的类型:

int add(int a, int b); 

Java没有独立的功能,但其方法可以指定异常可能会抛出什么:

public class A
{
	public int add(int a, int b) throws Exception
	{
		...
	}
}

签名的c#泛型类型可能包括:

public class A
{
	public T add<T> (T number1, T number2)
}

函数签名和一份合同

一个函数签名可以告诉你很多关于这个函数的行为,但没有一切。图,例如,你可能一个add()函数,它接受两个整数,并返回一个整数对其两个参数并返回的总和。你甚至可能是正确的,但是你仍然不知道一切。这个函数使用多少内存?有多快吗?使用其他资源是什么?如果你通过了错误类型的论点吗?有一个有效的参数范围?

例如,对于动态类型语言,如Python不指定参数或返回值的类型,你可以通过任何形式的数字:int,浮点小数,字符串。在整数溢出的情况下,Python可以让内部异常传播或处理并将结果转换为浮动或小数。在所有语言的函数可以使用内存缓存查找之前调用的结果或日志每个调用数据库或远程日志服务。它甚至可以调用一些Web服务来做这个工作。

要真正了解什么功能需要一个合同。合同指定所有这些细节。一个完整的合同不能被指定在任何编程语言中,尽管一些语言比别人走得更远。埃菲尔铁塔已经创造了这个词“契约式设计”,并内置支持前置条件的概念,不变量和后置条件,但成熟的联系比这更。文档可能对人类很好,但不能自动验证。

纯函数

纯函数是函数,不分配或使用任何资源和给定相同的参数将始终返回相同的结果。如果你主要使用纯函数就可以消除整个类别的行为,但它仍然是在一般情况下不是万灵药。

如何设计你的函数签名吗

函数签名的主要门户功能程序的其余部分。许多潜在的调用者主要关心他们传递的参数,因为他们可能继续函数返回时使用它们。例如,如果一个函数修改一个参数调用者需要知道。考虑下面的签名在C:

void mystery(int * x); 

“神秘”功能可以修改其“x”的论点。为了避免意外,试图限制的能力“伤害”你的函数。在支持它的语言,使用不可变说明符像“常量。“避免指针和non-const引用。如果你接受多个参数有一定的依赖关系,可以考虑创建一个专门的对象,可以验证本身(调用者不能通过无效的组合参数)。

结论

设计和构建软件是很困难的。函数签名通常被认为是什么一个函数的描述,但这远不是准确的,即使你把合同和文档中。但是,你还没有失去一切。通过关注你的函数签名,尽可能利用语言特性和使用不可变的数据结构纯函数可以得到相当远。精心设计的功能也更容易测试,提供拼图的最后一块构建软件,按预期的方式工作。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是函数签名?
  • 函数签名和一份合同
  • 纯函数
  • 如何设计你的函数签名吗
  • 结论
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档