為什麼 Go1.22 for 迴圈要支援整數範圍?
來源:腦子進煎魚了
大家好,我是煎魚。
前段時間分享了《Go1.22 新特性:for 迴圈不再共享迴圈變數,且支援整數範圍》的新特性介紹。
很多小夥伴對其中的 for 迴圈會整型範圍迭代的特性感覺不太理解,為什麼那麼多東西沒支援。這都能入圍?
我特意去翻了一下原始的 discussions,for 迴圈加整數迭代這事,是由 Go 核心團隊負責人 @Russ Cox(下稱:rsc)直接發起的。(驚不驚喜,意不意外?)
為什麼加整型範圍
加的的原因也很直接,rsc 表示:對於不是來自 C 語言系列的開發者來說,一個常見的問題是要理解 Go 語言的習慣用法。
如下程式碼:
for i := 0; i < n; i++ { ... }
當你停下來解釋它時,你會發現 “數到 n” 是一個很機械的過程。因此如果你在 Go 工程中經常要用到時,你希望簡化這一寫法,常常會定義一個標準函式。
如下程式碼:
for i := range count(n) { ... }
如此一來,這將會成為計數到 n 的新用法。那麼新自定義的 count 函式,會造成每個程式都會匯入一些包。
但是,從 0 到 n 的計數非常常見,甚至值得使用一個預定義函式去做這件事。我們可以從語言變化層面出發,讓 for 迴圈支援整型範圍型別的迭代,這是有意義的。
因此最終新增了前文提到的特性,也就是整型型別的 for 迴圈迭代支援。用以下程式碼:
for i := range n { ... }
來替代:
for i := 0; i < n; i++ { ... }
甚至他還貼心的提到:
對於以前的 C、C++ 和 Java 程式設計師來說,不編寫 3 子句的 for 迴圈想法可能看起來很陌生。一開始我(指的是 rsc 自己)也是如此。 但我們一旦採用了這種變更,for range 這種範圍形式很快就會變得慣用,並且 3 子句的迴圈看起來就像用分號結束語句一樣過時。
翻譯一下
寫到這裡,我不得不說 rsc 確實是 “學術派” 的代表,給的理由看著都非常充分。這裡就由本煎魚來簡單粗暴的翻譯一下。仰望一下大佬的想法。
說白了,就是 rsc 看到和接觸到身邊很多人(非 C 語言系列的開發者)。在做從 0 到 n 的計數時,非常不習慣,也不太理解,提了一些意見給他。
所以我(rsc)要加這個特性到 for range 了,加進去後能讓程式碼更簡潔、高效,不需要額外引入包。
我們做這個事,就跟把過時的分號作為結束語句去掉一樣。這是更先進的!
總結
本次的最佳化從出發角度來看,主要是統一 for 迴圈迭代的使用。以前每次要做 0 到 n 的計數時,還是不夠方便的。
加進來後確實可以產生一定的提效。但這種用途的場景確實也比較少。
也能看的出,rsc 提的功能特性的提案。相較於其他人而言,真的是更容易加入了。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024922/viewspace-3004873/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 隨機範圍小數和隨機範圍整數隨機
- C++之for迴圈、範圍for語句探究C++
- 為什麼迴圈佇列要浪費一個儲存空間佇列
- 匹配指定範圍整數正規表示式
- 讓自定義的容器,也能基於範圍迴圈
- 為什麼要重構?深入探討重構的原則、範圍和時機
- Linux UID是什麼?其數值範圍有哪些?LinuxUI
- 為什麼int8的範圍是[-128,127]
- js中為什麼for迴圈比forEach效能高?JS
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- Python迴圈引用是什麼?如何避免迴圈引用?Python
- 為什麼要“東數西算”?
- MATLAB中如何生成指定範圍的隨機整數向量Matlab隨機
- js生成一定範圍內的隨機整數JS隨機
- 為什麼要有事件迴圈機制(Event Loop)事件OOP
- Spring——為什麼會有迴圈依賴(原始碼)Spring原始碼
- matlab 從某個範圍內隨機取出一個整數Matlab隨機
- java 生成一個隨機整數,範圍從 1 到 10Java隨機
- foreach迴圈中為什麼不要進行remove/add操作REM
- 什麼是遞迴?遞迴和迴圈的異同遞迴
- int 8 佔一個位元組,為什麼範圍是-128 到 127?
- Python 為什麼不設計 do-while 迴圈結構?PythonWhile
- 為什麼我的gridview.DataKeys.count總是為零?並提示索引超出範圍View索引
- 為什麼程式要從0開始計數
- 為什麼不建議在for迴圈中使用"+"進行字串拼接字串
- 3516 求n個整數的最小值 迴圈結構
- Python中for迴圈和while迴圈有什麼區別?Python入門教程PythonWhile
- MySQL next-key lock 加鎖範圍是什麼?MySql
- 為什麼要code reviewView
- 為什麼要寫作
- 414周賽·第二題 - 3281. 範圍內整數的最大得分
- Python:判斷一個正整數是否為迴文數Python
- node的事件迴圈和瀏覽器的事件迴圈有什麼區別?事件瀏覽器
- 簡單的for迴圈有什麼新玩法
- 事件迴圈Event loop到底是什麼事件OOP
- 為什麼要打造智慧數字經營門店?
- Python是什麼?為什麼要掌握python?Python
- 【redis前傳】redis整數集為什麼不能降級Redis