2011-11-22 74 views
3

這些替代方案是CoffeeScript中基於類的編程的最佳風格嗎?哪種風格最適合CoffeeScript中的基於類的編程?

# Alternative 1 
class Person 
    constructor: (@name, @age) -> 

new Person "Peter", 19 

# Alternative 2 
class Person 
    name: "" 
    age: 0 
    constructor: (@name, @age) -> 

new Person "Peter", 19 

# Alternative 3 
class Person 
    constructor: (@name = "", @age = 0) -> 

new Person "Peter", 19 


# Alternative 4 
class Person 
    constructor: (name, age) -> 
    @name = name ? "" 
    @age = age ? 0 

new Person "Peter", 19 
+0

什麼是你的「最佳」的標準? – Phrogz

+0

這個問題應該轉移到http://codereview.stackexchange.com/ –

+0

@TrevorBurnham:不知道那個。看起來很整潔! – ajsie

回答

3

嗯。 #1很好,很簡單。 #3簡要地顯示了參數的預期格式(儘管默認值實際上並不合理 - 除非您預期某個人被命名爲""或成爲0歲)。

我真的建議使用散列來代替:

class Person 
    constructor: ({@name, @age}) -> 

new Person(name: "Peter", age: 19) 

這使你不必記住的參數的順序,使您的實例調用更多的自我記錄。

(我用一些例子這種方法在CoffeeScript: Accelerated JavaScript Development

+0

整潔。當我想指定默認值時,這也工作嗎? – Thilo

+0

或更一般:我可以指定解構賦值的默認值嗎? – Thilo

+1

不,您不能設置內聯默認值。我建議在[Underscore.js](http://documentcloud.github.com/underscore/)上使用'defaults'方法在構造函數中填寫對象的默認值。 –

0

第一種方法比較清楚。我總是使用這種方法。

1

#1是好的,但不確定默認值。

#2和#3是等價的,如果類不大,我會使用#3。

我認爲#4是不必要的複雜。