2016-06-21 62 views
3

语义问题在这里。我喜欢使用三元表达式;例如(这是一个愚蠢的例子,只是为了说明我的问题):如果超过80个字符,我不应该使用三元表达式吗?

some_int >= 5 ? @description = "This is a pretty long value" : @description = "This value is a little shorter" 

...但行通常会变得很长。我是否应该用此代替:

if some_int >= 5 
     @description = "This is a pretty long value" 
    else 
     @description = "This value is a little shorter" 
    end 

只是为了保持个别行较短?是否要求更短==更具可读性?谢谢!

+0

为什么要保留80个字符以下的行? – spickermann

+0

@spickermann由于80个字符对于最小编辑器窗口宽度来说是一个安全的假设,所以走得比这更长,它会在右边缘上换行或消失,从而导致难以阅读。就我个人而言,我假设我们有宽屏幕,但您需要最低限度。 – Schwern

回答

6
some_int >= 5 ? @description = "This is a pretty long value" : @description = "This value is a little shorter" 

这是一个不正确的三元使用。三元的唯一用途是当你要使用返回值时。应当书面像这样(格式化问题不谈):

@description = some_int >= 5 ? "This is a pretty long value" : "This value is a little shorter" 

如果它推超过80个字符的行应我不使用三元的表达?

行长度是错误的度量。这就像询问子程序是否不应超过25行(或其他)。这并不能解决问题的根源,并可能导致一些尴尬的选择。真正的问题是复杂性。

从复杂性POV你的三元很好。这是一个简单的条件,简单的语句,它使用返回值。问题是陈述太长,他们会包装。你可以重新格式化它们,如@U-D13 suggests

@description = some_int >= 5 
    ? "This is a pretty long value" 
    : "This value is a little shorter" 

你也可以把字符串放到他们自己的变量中,为代码添加进一步的说明。

@long_description = "This is a pretty long value" 
@short_description = "This value is a little shorter (except it's not)" 

@description = some_int >= 5 ? @long_description : @short_description 

这两种工具都是有效的,可以合并。这是情景。

嘿,看看,现在文本是一个可配置的对象变量。

2

打破表达成几行:

@description = some_int >= 5 
    ? "This is a pretty long value" 
    : "This value is a little shorter" 

这样你就可以保持代码的可读性,仍然有三元。

2

关于Ruby有趣的是,你可以使用一个if其中三元是太混乱或尴尬:

@description = 
    if some_int >= 5 
    "This is a pretty long value" 
    else 
    "This value is a little shorter" 
    end 

这是相当容易一目了然比三元等同于阅读。

ifcase都以这种方式工作,返回被触发的值。

的普遍做法三元效果最好,当你处理得非常短值:

method_call(value > 5 ? :high : :low) 

除此之外,它变得相当困难的遵循这可能会导致意想不到的错误。

相关问题