2012-01-05 16 views
4

哪些更好的Ruby代碼格式化風格,爲什麼?Ruby'if'塊爲變量賦值的推薦縮進樣式?

選項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 
+2

我寧願避免他們兩個。也許爲這兩種情況創建方法並使用':'然後呢? – 2012-01-05 15:49:22

+1

我將整個if語句拆分爲一個方法。@ business || = business_value(params)。 – Darryl 2012-01-05 15:51:44

+3

我不明白爲什麼問題已經結束,這似乎是一個有效的問題......風格問題與編程非常相關。 – tokland 2012-01-05 17:15:26

回答

4

這是一個主觀問題,所以我們只能給出(有希望推理的)意見。我總是使用選項A。我的理由:

  1. 該代碼塊在相同的縮進級別打開和關閉,創建「視覺凝聚力」。

  2. 如果變量名稱改變其大小,則不需要編輯任何內容(儘管有些文本編輯器會自動處理它)。

  3. 您在源代碼中創建了一個「洞」。變量名越大,洞越大。 IMO這在視覺上很煩人。此外,你有更少的空間可用,直到達到一些合理的80/100-字符限制。

我用這種風格編寫多線時,散列/陣列/ ...(注意逗號也是在最後一個元素,所以我們可以重新排列它們容易和DIFF友好的方式):

hash = { 
    :a => 1, 
    :b => 2, 
} 

array = [ 
    :a, 
    :b, 
] 
+0

第二點是通過獲得更好的文本編輯器來解決的。 – 2012-01-05 15:54:23

+0

@NiklasBaumstark:哪個編輯器會自動處理這種情況? – 2012-01-05 16:07:53

+0

@undur_gongor:選項B是EMACS縮進Ruby代碼的默認方式(雖然它是可配置的)。因此,只需簡單按下TAB鍵即可簡單地重新整理「if」語句(或者如果您擅長黑客入侵,甚至可以自動執行此操作)。我認爲在vim中它同樣簡單。 – 2012-01-05 16:09:14

2

我不會使用if塊的值來致死。也許是因爲我來自一個背景,其中if是一個聲明,而不是表達......所以,我的兩分錢是:

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

如果代碼片段是不是純表情,我想將它們分配到一個值在if的每個部分中,並分配使用該變量來更新@business

+4

正如你所說,你遭受了來自命令式背景的禁忌。有** lot **語言(不一定是功能),其中條件分支返回表達式。問題:如果你有一個if塊作爲方法的最後一個表達式,你把它作爲一個if還是你設置變量然後返回該變量? – tokland 2012-01-05 15:58:06

+0

+1的問題。由於在Lisp中缺少'return'20多年了,我會明確地將該值賦給一個變量並返回它,或者在'if'的每個部分中放置一個'return'。在沒有顯式返回語句的情況下讀取代碼時,並不清楚一個函數是否意圖返回某些東西,或者如果某個函數恰好是某個函數中的最後一個 - 具有複合結構隱式地返回每個分支的最後一個值,則會使代碼更難讀。就個人而言,我認爲這是一個主要的設計缺陷,並且像Ruby這樣的語言。 – Lindydancer 2012-01-05 16:30:13