在命令式编程时,我经常发现自己编写代码来对这样的项目进行分组:
function group(items):
groups <- new Groups
curGroup <- new Group
for item in items:
if item doesn't belong in curGroup:
if curGroup is good:
add curGroup to groups
curGroup <- new Group
add item to curGroup
if curGroup is good:
add curGroup to groups
return groups
不幸的是,这段代码存在一些缺陷:
if curGroup is good: add curGroup to groups
代码是重复的。虽然条件中的条件可以分解为一个函数,但调用该函数并将 curGroups 添加到组的逻辑仍然出现两次,并且很容易忘记第二次出现。创建新组的逻辑出现两次。这个逻辑可能是微不足道的,如果不是,那么它可以分解成一个单独的函数,但就像第一个要点一样,它表明流程不正确。
第一项可能无法通过归属检查,在这种情况下,我们会在创建新组后立即创建一个新组。这个问题可能看起来微不足道,但有时需要明确阻止将初始空组添加到
groups
. 无论如何,它表明所需逻辑的表达不正确。
我想知道是否有一种更简洁的方式来表达这种逻辑。我为这个问题的抽象性质道歉,但这个问题出现在多种情况下。如果有必要在特定编程语言的上下文中解决这个问题,您可以假设 Java。