【发布时间】:2016-03-11 20:31:57
【问题描述】:
在进行命令式编程时,我经常发现自己编写代码来对这样的项目进行分组:
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。
【问题讨论】:
-
我不认为这真的应该被标记为 Java,你的伪代码不是 Java,既然你在谈论算法结构和流程,那么人们用什么语言回答并不重要吗?你说人们应该假设 Java,但为什么呢?
-
@KevinWells 从根本上说,这个问题适用于任何命令式编程语言。然而,很多时候问题会收到 cmets 以获得更具体的细节,并且可用于解决问题的确切工具可能取决于语言。我可以删除 Java 提及和标签,但我会期望被要求提供更多上下文。
-
很公平,我认为这是一个不讨论特定语言的有效问题(因为它实际上更多的是关于良好的编码实践),但我理解避免以后可能会提到的任何事情的冲动
-
@KevinWells 至少我可以更改标签的顺序,使
algorithm成为主要标签。编辑:这似乎不起作用。删除标签。
标签: algorithm design-patterns imperative-programming