While 循環的函數式程式設計替代方案
在函數式程式設計範例中,希望用更多函數式方法取代傳統的while循環。然而,JavaScript 中缺乏尾部調用優化對這項努力提出了挑戰。
模擬 while 循環的一種方法是創建一個實用函數:
<code class="javascript">function while(func, test, data) { const newData = func(data); if (test(newData)) { return newData; } else { return while(func, test, newData); } }</code>
但是,作為代碼表明,如果沒有尾部調用優化,這種方法並不是最佳的。具有手動資料複製的修改版本可以緩解該問題:
<code class="javascript">function while(func, test, data) { let newData = *copy the data somehow* while(test(newData)) { newData = func(newData); } return newData; }</code>
儘管提供了純度,但此方法引入了不必要的複雜性。
另一種方法是使用生成器函數和實用函數,例如 find 或減少,但找到一個可讀的實作仍然具有挑戰性。
最終,如果在函數式程式設計上下文中需要 while 循環,最佳策略取決於應用程式的特定需求。在某些情況下,使用常規 while 循環並確保純度可能是可以接受的,而在其他情況下,像 while 這樣的實用函數可能是合適的。
以上是如何在沒有尾部呼叫優化的情況下替換函數式 JavaScript 中的 While 迴圈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!