重载或可选参数


Answers:


12

如果该语言正确支持它们(例如,类型安全),则出于以下原因,我希望使用可选参数:

  • 它们更好地传达了您的意图,因此没有人怀疑您的函数重载会做一些不同的事情(无论如何,它可能都不应该这样做)。
  • 即使函数重载仅委托给更全面的代码,也要维护的代码更少。如果以后要重命名该函数,则至少要有3个位置(两个定义+一个调用)。
  • 编译器(如果有)可能会生成较小的二进制文件。
  • 至少在某些语言中,可选参数的扩展性更好。如果您希望具有3个可选参数并具有混合和匹配的能力,该怎么办?为了获得充分的灵活性,您需要6个重载才能做到这一点。
  • 如果它是一个对象方法,则多次重载将极大地阻碍子类中重写的实现。

您不需要8吗?三个可选参数ab并且c具有以下可能性:无,a,b,c,ab,ac,bc,abc。它2^n适用于不同类型,而不是n!
Mark

0

假设一个构造器的情况:我经常选择一种流畅的构造器模式来防止出现很多选择的情况。

例如。Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))是调用在Guava中实现的流利的生成器界面的示例。

当然,您现在需要一个单独的对象来保存构建器的状态,但是通过将构造行为与构造行为分开,可以降低总体复杂性。


这不能回答问题。
安迪
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.