2016-11-17 70 views
1

最近,當我通過一個項目源時,我遇到了類似下面的聲明。在聲明中使用=>操作符的好處

public bool isRestricted => false; 

任何人都可以簡單介紹一下,使用這些語句有什麼好處。 在此先感謝。

+4

它只是語法上的糖而不是'public bool isRestricted {get {return false; }}' – Rob

+2

它提供了更簡潔,更簡潔的結構,它解釋了基本思想或邏輯http://softwareengineering.stackexchange.com/a/194010/242481 – Pravin

+0

感謝Rob。所以這樣做沒有其他增加的專業。 – 17CrazyBrain

回答

6

這是一個很好的表達功能,真正適合具有很多小功能的對象。例如代表業務規則。它使這些類型的對象變小,易於閱讀,便於維護和理解。說我認爲它僅僅是語法糖而不是真正有用的是錯誤的 - 如果表達體是那樣的話,那麼也可以考慮其他幾個特徵,比如屬性,汽車屬性等等。表達的身體是計算對象確實有用,可以考慮下面的代碼:

public class PriceCalculator 
{ 
    public double Price(WomensFashionItem item) 
    { 
     return item.Cost * 1.2; 
    } 

    public double Price(MensFashionItem item) 
    { 
     return item.Cost * 1.33 + 10; 
    } 

    public double Price(ToyItem item) 
    { 
     if (item.Source == "Taiwan") 
     { 
      return item.Cost * 2.2; 
     } 
     else 
     { 
      return item.Cost * 1.5; 
     } 
    } 
} 

通過採用表達的身體,就可以減少線路數量,在我看來更容易在這裏展示我們的意圖。

public class PriceCalculator 
{ 
    public double Price(WomensFashionItem item) => item.Cost * 1.2; 
    public double Price(MensFashionItem item) => item.Cost * 1.33 + 10; 
    public double Price(ToyItem item) => item.Source == "Taiwan" ? item.Cost * 2.2 : item.Cost * 1.5; 
} 

所以從24條線,6,並具有所有的業務規則一眼視圖可真厲害。我可以輕鬆地將此代碼顯示給域專家或業主,他們應該能夠理解正在發生的事情並提供反饋。

現在,表達式體可能不如泛型類型系統那麼強大,但它們當然可以成爲工具箱中的一個很好的工具,用於將單行或計算屬性轉換爲小而易於理解的成員。

+0

公平。最後的聲明可能已經在第一個代碼已經簡化:) –

+0

此外,我會使用=> item.Cost *(item.Source ==「Taiwan」?2.2:1.5):) –

+1

你是對的,你可以使用第一個是條件運算符,但是我做了其他的操作來使差異更清楚,因爲條件運算符本質上是一個表達式。在最後一條評論中,您可以從條件中返回因素,但在這裏我確實更喜歡計算的顯式返回,至少對於此類業務邏輯對象而言,我在此選擇清晰度,但出於不同的原因。 :) – Espen