首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以使用布尔代数来减少代码中的行数吗?

我可以使用布尔代数来减少代码中的行数吗?
EN

Software Engineering用户
提问于 2019-01-19 05:49:46
回答 6查看 3K关注 0票数 5

我最近正在学习计算机科学,我被介绍到布尔代数。似乎布尔代数被用来简化硬件中的逻辑门,以使电路设计最小化,从而降低成本。是否有类似的方法可以使用它来减少软件中的代码行数,比如C++、C#或任何其他语言?

EN

回答 6

Software Engineering用户

回答已采纳

发布于 2019-01-19 07:32:01

在编程中,您可以在许多事情上使用布尔代数。它是一个

  • 基本的计算技术,如加、减、乘数字,
  • 一个多用途的工具,而不仅仅是一个减少程序中代码行数的工具。

注意,它不是一个仅仅简化硬件逻辑门的工具。但是,有时也可以将其用于这类情况(以及相反的情况,或完全不同的目的)。

例如,如果程序包含一个过于复杂的布尔表达式或条件序列,则布尔代数可能会帮助您简化表达式和周围的代码。但这并不一定导致代码行数减少。事实上,有时复杂的单行布尔代码片段在将它们拆分成几行代码时变得更加可维护,而布尔代数可以帮助您正确地完成这一任务。

所以IMHO你的问题是“我能用袖珍计算器找出从A到B最短的路线吗?”当然可以,当你拿一张地图,上面有个别道路的距离信息,然后用计算器把它们加起来,然后用最小的和来选择路线。但是你也可以用计算器来寻找更长的路线,或者计算完全不同的东西。

票数 22
EN

Software Engineering用户

发布于 2019-01-19 09:47:11

可以,停那儿吧。但你应该吗?

布尔代数的作用是将逻辑表达式简化为它们的最小形式,但这是好的还是坏的,由程序员来决定。让我们使用以下验证代码:

代码语言:javascript
运行
复制
...
if (person.Money == 0) return;
if (person.Money != 0 && person.Age < 15) return; 
if (person.Age > 90) return;
if (person.Children > 3) return;
if (person.HasWhiteShirt() && person.HasBlueSocks()) return;
...

这是对对象person的检查列表,一旦其中之一为真,就会退出该函数。它的含义是非常清楚的,任何阅读它的人,即使是一个非程序员,都能理解我们在做什么检查。

然而,有不同的方式来写这篇文章。让我们按照您在问题中所问的那样,对代码行进行简化,看看会发生什么:

代码语言:javascript
运行
复制
if (... || person.Money == 0 || person.Age < 15 || person.Age > 90 || person.Children > 3 || (person.HasWhiteShirt() && person.HasBlueSocks()) || ...) return;

我们现在有一行不可读的条件,通过简化,我们也失去了<15岁支票与金钱有关的信息。编辑这段代码在将来会更加困难,所以减少它是一个错误。

总之:无论逻辑表达式的最小形式如何,始终追求可读性。

票数 22
EN

Software Engineering用户

发布于 2019-01-19 08:44:56

布尔代数是逻辑简化为其最基本的形式。它很好地映射到二进制计数系统,这是第二个最基本的可想象的计数系统。

布尔代数似乎是用来简化硬件中的逻辑门的。

不完全是。首先,它使得在硬件中实现任何一种逻辑成为可能。一旦你拥有了它,你就可以使用软件来构建它,并再次创建更复杂的逻辑。

因此,不可以使用布尔代数减少代码行数。每当有二进制选择要做时,就使用它。如果您的问题很复杂,您将在软件解决方案中有很多选择。

相反,简单的逻辑需要更少的布尔代数,复杂的逻辑需要更多。更多的逻辑==,更多的代码。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/385783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档