Logic 简化典型的(?)条件构造
我经常看到(有时自己写)这样的结构:Logic 简化典型的(?)条件构造,logic,boolean-logic,Logic,Boolean Logic,我经常看到(有时自己写)这样的结构: if(A || B) { var sharedValue = ...; if(A) { // do stuff with sharedValue } else { // do other stuff with sharedValue } } 实例: 开关(e键) { /* *不要介意开关,因为它可以简单地转换为: *如果(e.Key==Key.Left | | e.Key=
if(A || B)
{
var sharedValue = ...;
if(A)
{
// do stuff with sharedValue
}
else
{
// do other stuff with sharedValue
}
}
实例:
开关(e键)
{
/*
*不要介意开关,因为它可以简单地转换为:
*如果(e.Key==Key.Left | | e.Key==Key.Right){…}
*/
大小写键。左:
案例关键。右:
var container=containerFromData(数据);
如果(e.Key==Key.Left)
{
this.TryNavigateBackward(容器);
}
其他的
{
此.TryNavigateForward(容器);
}
}
我真的觉得我遗漏了什么,所以一定有更好(更简单,更不冗长)的方式来描述这一点,但无法想出一个想法。这个问题可能在某种程度上与人们使用的编程语言有关(我目前在C#),但是,为了简化给定的示例,是否存在任何构造
注意:我知道三元条件运算符
a?b:c
,但这(至少在c#中)仅在检索值并将其放入变量时有效。上面的例子想要用一个共享的价值实际做不同的(可能是复杂的)事情。因为我没有看到任何其他建议,所以我会扔掉一些,看看它们是否是你想要的
首先,如果OOP在表中,继承可以表示这种共享行为。您要做的是在类shared
、ASpecific
和BSpecific
中封装共享的、特定于A的和特定于B的行为,其中ASpecific
和BSpecific
继承自shared
。然后,如果A
或B
,则分别启动ASpecific
或BSpecific
的实例,然后将其视为共享
的实例。如果您有条件C
,D
等,而这些条件不使用共享的东西,那么您可能会有另一个名为Base
的父类,您会有CBase
,DBase
继承自Base
,共享的
继承自Base
,并根据条件旋转实例,并将结果视为Base
的实例
第二,当需要共享内容时,您可以通过将特定于A和特定于B的行为传递给共享方法来使用控制反转。您可以使用面向对象编程来实现这一点,也可以使用纯函数式编程。使用后者(因为前者类似于上述解决方案,可能不太好),您将有一个shared
函数,它将functionf
作为参数。函数f
将具有需要传入共享对象的签名。然后,如果A
,则使用一个函数(指针或匿名内联)调用shared
,该函数对传递给它的共享对象执行A
特定的内容;否则,如果B
,则使用一个函数调用shared
,该函数对传入的共享对象执行B
特定的填充
如果你真正想要避免的是嵌套,你也可以把
If(A | | B){…}
的东西拿出来,让它在一个更高的范围内被声明但没有被实例化;然后,稍后,分别检查A
和B
,并知道在这些情况下共享的
将具有先前所需的设置。感谢您的精彩解释,对我来说,第一种方法似乎最合适,我将对此进行检查。再次感谢。