我最近读到选项 - 操作数分离是一种在Eiffel语言中引入的原则(我从未使用过Eiffel)。
[Option-operand separation]指出一个操作的参数应该只包含操作数 - 被理解为操作所必需的信息 - 而不是选项 - 被理解为辅助信息。选项应该在不同的操作中设置。
这是否意味着一个函数应该只包含作为其功能一部分的“必要”参数,并且不应该有任何改变功能的参数(而应该是一个单独的函数)?
有人可以简单地解释一下,最好是用伪代码示例吗?
答案 0 :(得分:1)
是的,这是个主意:不应该使用参数来选择特定的行为。应该使用不同的方法(埃菲尔术语中的功能)。
示例。假设有一种将二维图形移动到给定位置的方法。可以使用极坐标或笛卡尔坐标指定位置:
move (coordinate_1, coordinate_2: REAL_64; is_polar: BOOLEAN)
-- Move the figure to the position (coordinate_1, coordinate_2)
-- using polar system if is_polar is True, and Cartesian system otherwise.
根据原则,定义两个函数更好:
cartesian_move (x, y: REAL_64)
-- Move the figure to the position with Cartesian coordinates (x, y).
polar_move (rho, phi: REAL_64)
-- Move the figure to the position with polar coordinates (rho, phi).
尽管该原则似乎普遍适用,但某些面向对象的语言在某些情况下并未提供足够的方法。显而易见的例子是在许多语言中具有相同名称的构造函数,因此使用选项成为唯一的选择(在这些情况下使用对象工厂的解决方法)。