- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在事件处理程序中,我正在响应值的更改。我可以访问旧值和新值,并希望根据更改的内容执行某些操作。
每个不同的结果都将执行一些操作/函数x、y或z的组合。z接受一个介于-1和1之间的参数。执行这些操作的顺序并不重要。
看看下面的逻辑网格。旧值是标签的最左边一列,新值是标签的最上面一行:
New:
0 !=0
-------- -------
Old: 0 | nothing Y, Z(1)
!=0 | X, Z(-1) X, Y -- Z(0) is okay but not required for this quadrant
if (oldvalue == 0 && newvalue == 0) return;
if (oldvalue != 0) X();
if (newvalue != 0) Y();
Z(oldvalue != 0 ? -1 : 0 + newvalue != 0 ? 1 : 0);
int which = (oldvalue == 0 ? 0 : 1) + (newvalue == 0 ? 0 : 2)
switch (which) {
case 1:
X(); Z(-1);
break;
case 2:
Y(); Z(1);
break;
case 3:
X(); Y();
break;
}
Conditions:
oldvalue == 0 ? 0 : 1
newvalue == 0 ? 0 : 2
Actions:
X = {false, true, false, true}
Y = {false, false, true, true}
Z(-1) = true where condition = 1
Z(1) = true where condition = 2
最佳答案
让我们从另一个角度来看你的问题。在设计代码体时,我尝试应用以下原则:
纠正错误。
说清楚。
使它简洁。
快点。
…按顺序。
所有这些,在某种程度上,都是主观的。然而,通情达理的人往往会找到共同点——而且人们往往对他们的对立观点有更多的共识。但撇开这些…
这里的首要任务是确保代码能够正常工作。显然,有多个实现可以实现这一点——但我还要补充一点,很重要的是,要容易证明实现是正确的。实现这一点的一种方法是使代码读起来更像规范(稍后将详细介绍)。
第二个优先事项是确保在将来,当开发人员(包括原始作者!)看看这段代码,他们马上就能理解它在做什么。实现越复杂(读:fancy),开发人员就越难立即理解代码在做什么。
第三个优先——简短、简洁的代码,是与前两个部分相反的代码。希望使代码更简洁,可能会导致您使用比实际解决问题所需的更复杂的构造。虽然保持代码简短很重要,但我们不应该让它变得难以理解的密集。
最后一个优先级-性能-只在重要的时候才重要。我的意思是,从性能的角度来看,您不应该使实现复杂化,除非您已经执行了概要分析并将其识别为系统中的瓶颈。
因此,既然我们已经研究了驱动我们决策的原则,让我们将它们应用到手头的问题上。您已经提供了一个非常清晰的代码行为规范。让我们试着坚持下去:
void YourMethod( int oldValue, int newValue )
{
bool oldValueNonZero = oldValue != 0;
bool newValueNonZero = newValue != 0;
if( oldValueNonZero ) { X(); }
if( newValueNonZero ) { Y(); }
if( oldValueNonZero && newValueNonZero ) { Z(); }
}
oldValueNonZero
和
newValueNonZero
我使实现清楚地表明了我的期望。这既提高了代码的可读性,也清楚地向将来必须阅读代码的开发人员传达了我的意图。
if()
测试的主体被包装在
{
和
}
括号中,这有助于减少将来对实现所做的更改将破坏行为的可能性,例如意外地包含一个新的案例。使用单行
ifs
是解决未来问题的方法。
MxN
。
MxNxOxP...xZ
。
关于c# - 有效地用代码表达2x2逻辑网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3587147/
我希望 Eclipse 调试器观察某个表达式何时变为真(其值发生变化)并在发生这种情况时停止。这在我看来非常有用和基本,所以我认为必须有一种方法可以在 eclipse 中做到这一点(如在 gdb 中)
我正在使用 SPEL 表达式,当我的应用程序启动时,我收到此错误。 ftpOutboundGateway.setRenameExpressionString("'/processed/headers[
我不是 visual studio 程序员,但我需要快速创建一个应用程序来显示图像并使用 slider 操纵它的高度和宽度。我已经完成了快速谷歌和所有关于使用 picturebox(picbox) 作
我在玩弄 Boost Xpressive,但遇到了以下代码片段的问题 #include #include #include using namespace std; using namespac
今年我一直在想,2022年我想做些什么,做哪方面的改变,这周末在家终于想到了! 2021 轻描淡写 年底就一直想对2021年写一篇总结的,起码不得写个千八百字,可是思来想去不知道怎么写,直到最后都没想
这个问题在这里已经有了答案: Italic greek letters / latex-style math in plot titles (2 个回答) 8年前关闭。 我应该怎么做才能让 R 在图例
有没有办法为 jade 模板错误提供自定义异常处理程序? 例如 // server.js app = express(); app.set('view engine', jade); app.loca
我需要了解使用路由在 Express 应用程序中流程的工作原理,我有这些路线 app.use(require('./routes/reportsRouter')); app.use(require('
在一条 route 我有这个: if (elements.length <= 0) { var msg = 'no elements found
完整的代码如下 - 很简单,我想添加、删除或更新帖子 - 当我自己做其中一件事时,它可以工作,但一起它会中断 我在 NodeJS MySQL 中搜索了很多我用它来查询数据库 var mysql = r
下面的CSS选择器有没有更优雅的写法? input:not([type="image"]):not([type="submit"]) 我想匹配所有不是 image 类型或 submit 类型的 HTM
当我尝试全局安装 express-generator 时,它说它成功了。我什至可以在我的全局应用程序列表中看到它但是当我尝试运行 express我遇到标题问题:zsh: command not fou
这不是一个很好的问题,但它是这样的: 我正在结合 DataFrame 的几列进行非常简单的计算,但前提是一列具有特定值。想法是: if df.x==1: df.y = df.y - df.a/
我有一个网站 -https://example.com- 调用 API -https://api.example.com-。该 API 是用 Express 编写的,其使用 CORS package允
当我使用 Express 框架时,我将“.html”文件放入文件夹 View 中,然后将“.js”和“.css”文件放入 public 中。当我运行我的应用程序时,我可以获得 js 和 css,但我无
有一个简单的应用程序 var express = require('express'); var http = require('http'); var path=require('path'); v
我正在构建一个基于express的REST API,我想在用户的请求中使用错误的HTTP动词时发出警告。 目前,我正在添加 app.all('/', (req, res) => { answe
对于用于在 connect/express 中对 session 数据进行加密散列的 key 长度有什么建议吗?我看到了从 60 多个字符串到规范的“键盘猫”的所有内容。 对于我的直接用例,我打算对整
Redis 的HDEL 的时间复杂度是O(N)(其中N 是要移除的字段数)。我有一个用例,其中字段必须为每个操作进行类型转换。我将如何表达新的时间复杂度? O(N*2)? 最佳答案 时间复杂度将相同:
我看到我可以像这样指定 gradle 依赖项: dependencies { compile 'com.fasterxml.jackson.core:jackson-annotations:2
我是一名优秀的程序员,十分优秀!