单个if语句中谓词的正确平衡在哪里?

Nic*_*len 8 language-agnostic coding-style

我个人对以下代码没有任何问题

if (Object foo != null && !String.IsNullOrEmpty(foo["bar"]))
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

因为我认为以下内容过于冗长

if (Object foo != null)
{
    if (!String.IsNullOrEmpty(foo["bar"]))
    {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果说有5个谓词并且我不得不将文本包装在编辑器中以便立即查看它们,那么我不会在这个观点上走得那么远,是否有一条逻辑"线"可以描绘出你有多少谓词在类似意义上包含在单个if语句中,表示方法永远不需要超过7个参数

jpa*_*cek 10

我不认为重写if语句是两种方式,特别是如果你认为else在你的例子中添加一个子句会产生不同的结果.如果我想在这种条件下减少原子命题的数量,我会将一些有意义的因素结合到一个自己的函数中,例如:

if(won_jackpot(obj)) ...
Run Code Online (Sandbox Code Playgroud)


180*_*ION 9

我认为这是不同类型的运算符和正确格式的平衡.如果所有运算符都相同(所有"和"或全部"或"),那么您可以将不确定数量的表达式连接在一起而不会失去理解力:

if (something() &&
    something_else() &&
    so_on() &&
    so_forth() &&
    some_more_stuff() &&
    yada() &&
    yada() &&
    yada() &&
    newman() &&
    soup_nazi() &&
    etc())
  ...
Run Code Online (Sandbox Code Playgroud)


Don*_*eba 5

短期记忆有七个项目的容量,给予或采取两个.这意味着涉及五个以上不同对象的表达式可能需要暂停并思考它.