没有参数的函数——它们在软件设计中的作用是什么?
Functions without arguments - what is their role in software design?
Robert Martin 在他的书 "Clean Code" 中指出函数参数的理想数量为零。大多数人都会同意太多的函数参数会导致很多问题。但据我所知,零参数的函数至少属于以下类别之一:
- 该函数很简单,并且始终 return 具有相同的值。
- 该函数缺乏引用透明性,其 return 值取决于外部可变状态。
- 函数的目的是它的副作用。
现在类型 (1) 的函数并不是很有用,而 (2) 和 (3) 类型的函数由于众所周知的原因应该避免使用。
我知道我提到的那本书是关于 OOP 的,所以函数通常属于一个对象并获得一个作为隐式参数传递的对象引用。但是,访问对象属性仍然意味着 (2) 或 (3)。
那我错过了什么?
如果您回答了这个问题,请不要只是表达您的意见,而是提供合理的论据或具体的例子。否则它可能会被关闭。
对象的属性实质上将用作函数的参数。通过这种方式,您可以直接操作您正在使用的对象,而不是传递和返回值,然后在执行函数中包含的某些行为后将这些值归因于对象。
So what am I missing?
马丁声明中的关键词是"ideal"。如果您继续阅读,他会深入介绍具有一个、两个和三个参数的函数,但只在一个上下文中提到 niladic 函数——测试。他声称它们测试起来微不足道,大概是因为只有一种可能的结果,而且要么对要么错。
所以这是一个理想,从中吸取的原则是参数越少越好。显然,在现实中,这种理想很少能实现。函数的 目的 通常是接受输入,无论是直接输入,还是通过对象或系统状态间接输入(请注意,我也称这些为 "arguments" 以与Martin 的分析),并提供输出。当你有多个参数时,测试用例的数量呈指数增长,维护更加困难等
所以你 "missing" 什么都不是,只要你认识到这是一个 理想目标 而不是你应该作为 绝对.
C# 中 "pure" niladic 函数的一些示例:
DateTime.MinValue
String.Empty
C# 中的 Niladic 函数 return 对象或系统状态:
DateTime.Now()
object.GetHashCode()
String.Length
Robert Martin 在他的书 "Clean Code" 中指出函数参数的理想数量为零。大多数人都会同意太多的函数参数会导致很多问题。但据我所知,零参数的函数至少属于以下类别之一:
- 该函数很简单,并且始终 return 具有相同的值。
- 该函数缺乏引用透明性,其 return 值取决于外部可变状态。
- 函数的目的是它的副作用。
现在类型 (1) 的函数并不是很有用,而 (2) 和 (3) 类型的函数由于众所周知的原因应该避免使用。
我知道我提到的那本书是关于 OOP 的,所以函数通常属于一个对象并获得一个作为隐式参数传递的对象引用。但是,访问对象属性仍然意味着 (2) 或 (3)。
那我错过了什么?
如果您回答了这个问题,请不要只是表达您的意见,而是提供合理的论据或具体的例子。否则它可能会被关闭。
对象的属性实质上将用作函数的参数。通过这种方式,您可以直接操作您正在使用的对象,而不是传递和返回值,然后在执行函数中包含的某些行为后将这些值归因于对象。
So what am I missing?
马丁声明中的关键词是"ideal"。如果您继续阅读,他会深入介绍具有一个、两个和三个参数的函数,但只在一个上下文中提到 niladic 函数——测试。他声称它们测试起来微不足道,大概是因为只有一种可能的结果,而且要么对要么错。
所以这是一个理想,从中吸取的原则是参数越少越好。显然,在现实中,这种理想很少能实现。函数的 目的 通常是接受输入,无论是直接输入,还是通过对象或系统状态间接输入(请注意,我也称这些为 "arguments" 以与Martin 的分析),并提供输出。当你有多个参数时,测试用例的数量呈指数增长,维护更加困难等
所以你 "missing" 什么都不是,只要你认识到这是一个 理想目标 而不是你应该作为 绝对.
C# 中 "pure" niladic 函数的一些示例:
DateTime.MinValue
String.Empty
C# 中的 Niladic 函数 return 对象或系统状态:
DateTime.Now()
object.GetHashCode()
String.Length