Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为变量赋值的Ruby`if`块推荐的缩进样式?_Ruby_Coding Style - Fatal编程技术网

为变量赋值的Ruby`if`块推荐的缩进样式?

为变量赋值的Ruby`if`块推荐的缩进样式?,ruby,coding-style,Ruby,Coding Style,以下哪一种是更好的Ruby代码格式,为什么 备选方案A: def load_business @business ||= if params[:badge_uuid] # some code else # some other code end end 备选案文B: def load_business @business ||= if params[:badge_uuid] # some code

以下哪一种是更好的Ruby代码格式,为什么

备选方案A:

def load_business
  @business ||= if params[:badge_uuid] 
    # some code
  else
    # some other code
  end
end
备选案文B:

def load_business
  @business ||= if params[:badge_uuid] 
                  # some code
                else
                  # some other code
                end
end
我会使用选项A

下面是一些同样也是这样的ActiveRecord代码

编辑:


这是一个相当固执己见的问题,可能没有正确的答案。正因为如此,无论你怎么做,只要它不仅仅是丑陋的代码,人们可能不会反对你。

我不会因为使用
if
块的值而被抓住。可能是因为我的背景是,
如果
是一个语句,而不是一个表达式。。。所以我的两分钱是:

def load_business
  @business ||= (  params[:badge_uuid]
                 ? # some code
                 : # some other code)
end

如果代码片段不是简单的表达式,我会在
If
的每个部分中指定一个值,并指定使用该变量来更新
@business

这是一个主观问题,因此我们只能给出(希望是合理的)意见。我总是使用选项A。我的理由是:

  • 代码块在同一缩进级别打开和关闭,这创建了“视觉内聚”

  • 如果变量名更改了其大小,则不需要编辑任何内容(不过,有些文本编辑器会自动处理)

  • 在源代码中创建一个“洞”。变量名越大,洞越大。在我看来,这是令人讨厌的。此外,在达到合理的80/100字符限制之前,可用空间会减少

  • 我在编写多行哈希/数组时使用这种风格。。。(请注意最后一个元素中的逗号,以便我们可以方便地以不同的友好方式重新排序):


    我宁愿避开他们两个。可能会为这两种情况创建方法并使用
    ?:
    然后?我会将整个if语句拆分为一个方法。@business | |=business|u值(params)。我不明白为什么这个问题被关闭,这似乎是一个有效的问题。。。风格问题在编程中非常重要。那么我应该在哪里问这种问题呢。亲爱的版主们,请推荐一个论坛。一个好的“选项C”是:在“=”字符后面加一个换行符,然后在“=”字符后面加上两个空格的“如果”块,正如第二点所述,通过使用更好的文本编辑器可以解决问题。@NiklasBaumstark:哪个编辑器会自动处理这种情况?@undur_gongor:选项B是EMACS缩进Ruby代码的默认方式(尽管它是可配置的)。因此,只需按一下TAB键,您就可以简单地重新插入整个
    if
    语句(或者,如果您擅长破解elisp,甚至可以让它自动执行此操作)。我认为在vim中也很简单。正如你所说的,你有一个禁忌源于命令式背景。有许多语言(不一定是函数式的)在其中条件分支返回表达式。问题:如果有一个If块作为方法的最后一个表达式,是将其保留为If,还是设置变量,然后返回该变量?+1作为问题点。在Lisp中缺少
    return
    已经20多年了,对此我感到很沮丧,我会明确地将值赋给一个变量并返回它,或者在
    if
    的每个部分中放置一个
    return
    。当在没有显式返回语句的情况下读取代码时,不清楚函数是否打算返回某个值,或者某个值恰好是函数中的最后一个值——复合构造隐式返回每个分支的最后一个值,这会使代码更难读取。就个人而言,我认为这是一个主要的设计缺陷,在Ruby等语言中也是如此。
    hash = {
      :a => 1,
      :b => 2,
    }
    
    array = [
      :a, 
      :b,
    ]