2014-01-27 113 views
5

飛鏢風格指南建議使用constructors instead of static methods to create instances,因爲「命名的構造函數和工廠構造在達特給你所有的其他語言的靜態方法的靈活性,同時仍然允許調用點顯得像一個普通的構造函數調用「。飛鏢工廠(構造函數)與靜態方法;例如,爲什麼int.parse()不是工廠構造函數?

那麼是否有技術上的原因,因爲宣佈int.parse()double.parse()爲靜態方法而不是工廠構造函數?

更一般地說,選擇通過Dart中的靜態(工廠)方法編寫工廠構造函數的指導原則是什麼?

+0

是的,這似乎有點不一致。 'new int.fromString()'從這個角度來看更有意義。雖然'int.parse()'感覺更自然。 – ronag

+0

這可能是另一個特殊的表現目的,但這實在是瘋狂的猜測。 – MarioP

+0

@MarioP:是的,我想這是有道理的。但是,我希望編譯器能夠優化這樣的特殊處理是不必要的。 – ronag

回答

5

在谷歌網上論壇挖了一段時間後,我確實發現其實一個官方的解釋吧:Link to Groups discussion

對於檔案的目的,在這裏從鏈接引用文本:

我想過讓它成爲一個構造函數,但它對int或double值並不適用。

我看到「解析」作爲一個效用函數而不是構造函數,可能是因爲int和double實際上沒有構造函數。你不會創建一個整數,你會發現它。

此外,目前唯一的方法來檢查一個字符串是一個數字文字是調用分析,看看它是否拋出(但我不完全滿意!),我不喜歡構造函數拋出除了編程錯誤之外。

而且你不必在這個面前寫下「新」,因爲沒有特別的收穫。

沒有一個明確的理由使得它不是一個構造函數,而是一堆小問題,這些問題一起使我更喜歡它作爲一個靜態函數。

這對我的「表現目的」理論非常重要。好吧。

相關問題