2017-01-31 59 views
3

我們一直遵循的airbnb eslint指導,並在其中,他們說建議不要使用generators爲什麼發電機不能很好地運輸?

  • 11.2不要使用發電機現在。

    爲什麼?它們不會很好地轉換成ES5。

我似乎沒有能夠找到任何解釋,他們的意思是不是transpiling好(不只是本文件中,但在谷歌)。我們使用babel,並有polyfills來做到這一點。有什麼我失蹤?

回答

3

他們是完全錯誤的(或文檔是嚴重過時)。傳輸器從發生器和異步函數創建一個基於閉包的狀態機。他們不好,但工作速度很快。唯一的缺點是調試比較困難(即使使用源代碼)。

在另一方面,不使用發電機將導致在某些情況下,當發電機將提供一個乾淨的解決方案尷尬的解決方法。請務必首先編寫清晰的代碼。

編輯

我們開發商在一些編程challanges可以用最好的狀態機來解決現實生活中的經驗教訓。發生器和異步函數爲您提供了一個強大的工具來表示大多數這些狀態機。

這是語言如何演變:我們發現其中有一個解決方案中的反覆存在的規劃問題,所以人們創建新的語法一種新的編程語言對這個問題更短的解決方案。這就是我們得到了基本的數據結構,函數,閉包類,第一類函數,GC,RTTI,反思,等等......今天它被認爲是你用你的項目,其中的語言選擇的問題。您可以直接編寫機器代碼,或者使用一些高級託管語言。理由通常是關於執行速度(組裝應該是快吧?),portabiliy和語言語法的學習曲線使用(我爲什麼要學習lambda表達式和產量以及異步/的await時,我總是能解決任何問題而不使用任何問題?)。我個人更喜歡使用富有表現力的語言,我相信高層次/託管程序永遠不會比本地程序慢。

所以,讓我強調一下,如果不使用生成器,你會失去一些東西:最終你會寫出一個百行的狀態機器(可能僞裝成一個對象和函數的集合)和熟悉的語法。

+1

寫另一種方式:「因爲他們是不是很好,更難調試,請勿使用transpilers」 – Rob

相關問題