Go中出現strconv Itoa i int 這種見名不識義的API是否說明設計者設計語言水平不高

時間 2021-05-07 02:39:14

1樓:LMO

這兩個函式strconv.Itoa和strconv.Atoi是為了迎合老C/C++程式設計師懷舊感的.

對它們無感者用strconv.FormatInt和strconv.ParseInt即可.

2樓:flashyiyi

因為人家不支援過載啊,不支援過載的語言型別轉換都是這樣的,兩端都寫全名太長。

雖然過載確實不是乙個很常用的語言特性,但偏偏在這個環境下它確實有用……

我是覺得不管是過載還是泛型都是必要的現代語言特性。相比過載這種小問題,還是泛型缺失更嚴重了。

不過題主這種質疑語言設計者水平的想法並不好,你覺得你能想到的東西人家可能想不到嗎?

直接下定義,認為設計水平差,就無法進一步思考」為何他要這樣設計」,這樣並不利於自身的提高。

當然,如果你指的是,它用的是itoa而非itos,那確實是他們自己的問題。

別扯什麼照顧c語言開發者使用者習慣了,語言內部自洽是最重要的,人家c語言這麼設計是因為人家沒有string好吧?

3樓:facetothefate

並不是歷史就不講了其實itoa是很好的名字

資訊量很大輸入的型別輸出的編碼函式的作用就濃縮在這4個字母裡了所以顯然你要提供不同API給不同的輸入輸出型別根據這個命名規則自然也就知道其餘API應該長什麼樣。

只不過這種老的c 式寫法有些繁瑣這名字也限制了過載比如這一組API完全都可以叫同乙個名字不過引數型別不同罷了。

4樓:Agile2-張恂老師

這題體現了什麼叫作無知者無畏。不過題主的提問還是有一定價值的,我表示有保留的肯定。

同學,strconv.Itoa(),這也能叫「太簡潔」?

說實話,這設計真不如 VB 或 http://

VB.Net

中的 C(Change or Convert)系列:CStr(i)、CInt(s) 等等,超簡潔、實用。

實現整數到字串轉換,VB 通常只需輸入 4 個字元指令,Go 竟然用了冗長的 strconv.Itoa,11 個字元(不算 .)!

Type Conversion Functions (Visual Basic)

Visual Basic Type Conversion Functions (Visual Studio 2010)

These functions are compiled inline, meaning the conversion code is part of the code that evaluates the expression. Sometimes there is no call to a procedure to accomplish the conversion, which improves performance. Each function coerces an

expression to a specific data type.As a rule, you should use the Visual Basic type conversion functions in preference to the .NET Framework methods such as ToString(), either on the Convert class or on an individual type structure or class.

The Visual Basic functions are designed for optimal interaction with Visual Basic code, and they alsomake your source code shorter and easier to read. In addition, the .NET Framework conversion methods do not always produce the same results as the Visual Basic functions, for example when converting Boolean to Integer.

For more information, see Troubleshooting Data Types (Visual Basic).

(from MSDN search)

問題主要出在前面的 strconv。

說 strconv 或 itoa 見名不識義,這點不能苟同,說明題主大概是名程式語言的初學者,至少不懂 C,要麼英文不好。

無論 strconv、itoa 都是坊間各大程式語言沿用已久、廣為人熟的構造,老古董。

來自 itoa - Bing 網典:

itoa,是廣泛應用的非標準C語言擴充套件函式。將任意型別的數字轉換為字串。在中與之有相反功能的函式是atoi。

由於它不是標準C語言函式,所以不能在所有的編譯器中使用。但是,大多數的編譯器(如Windows上的)通常在標頭檔案中包含這個函式。

VB 其實也有自己的 strconv,VB 6.0 的 StrConv 函式:

StrConv Function

如果題主說的是 itoa 簡潔,有點道理。

不過,itoa 其實屬於古典的瑕疵,應該被淘汰的設計。我的理由如下:

最簡單應該是 i2s,可是這個 i 還是有問題。int 到 str 用 itoa 或 i2s,那麼 byte,short,uint,double,long,float 以及其他資料型別等等呢?於是還要有 b2s,s2s,ui2s,d2s,l2s,f2s 等等,夠煩的。

其實函式名中根本無需說明從什麼型別轉到 str,只要 CStr 就夠了,不同的輸入型別就用方法或函式的 Overloading(過載)全搞定。

此外,為什麼會 itoa(ascii)而不是 to string?因為那是遠古時代,與 C 相比 OOP 根本還沒有成氣候嘛,所以不會有當代 String 類的概念,只有 char*。現在你用了 to ascii,那麼 Unicode 怎麼辦?

是不是還要再搞個 itou?

所以,我說 21 世紀了,itoa 可以淘汰了;而 Go 的設計者們估計實在是太忙了,順手抄了 C 的古董設計,僅此而已,既不必拔高也不必貶低。

重點

如果呼叫轉換方法,每次你都要從 strconv 或 String 類等冗長的字首名開始,那麼肯定是囉嗦的。

所以,引入 http://

VB.net

之類的 C 系列的 Convert helper 函式,確實是一種在 API 使用的方便性上更漂亮、大膽的設計。

值得 Go 或其他語言學習。

當然,作為一門新語言的初創階段,我覺得可以理解。畢竟這不是 Go 語言設計、優化的重點,目前設計者可能還顧不上。

說不定將來會有一些變化呢?

5樓:

1. Go設計者水平很高,比大部分人都要高。

2. 偉人也會犯錯,也會為了情懷推動一些未必是好事的事情。

3. 個人認為現代語言沒有C語言的包袱,沒有必要再使用歷史遺留的不易讀API名。

4. 命名風格只有主觀的偏好,不可能爭吵出客觀的高低。

5. 重複第四條。

6樓:SuperFashi

今天看了這個回答才知道原來atoi是ascii to int的意思。

原來寫C++的時候找到了這個函式,懶得查意思拿過來就用了。後來轉Go的時候直接Google golang atoi然後就跳出了strconv.Atoi也是拿來就用了。

如果要詬病各種奇怪的縮寫的話,請轉去隔壁PHP,Go的命名已經是很標準化了。個人從來對命名不是很在意,但如果文件寫的不好我是要罵上天的。

7樓:不減肥成功不改名

如果換乙個語言,我們可能還不能嘲笑語言設計者的審美水平,但是 Go 和 C 既然是一夥人設計的,那麼嘲笑他們設計 C 的時候品位糟糕顯然是有可能的。

當然,具體糟不糟糕還要結合當時的環境,這個問題就見仁見智了。

8樓:

設計 Go 語言的就是當年發明 UNIX 和 C 語言的人,就是為了替代 C 語言在某些領域的地位的,目標使用者就是 C / C++ 程式設計師,所以有 C 語言遺留很正常。

9樓:Silen

Unix環境高階程式設計裡面提及一些標準,符合標準的作業系統都需要提供一些介面。印象中有些這樣的API。和語言設計無關。

可以翻看go sys、 OS等包對比POSIX 和一些其他標準。好多相同名字的API

10樓:優游幻世

itoa 指的是integer to ascii

Where did the name `atoi` come from?

11樓:風之小祈

你需要多了解一下計算機歷史。

此外,golang 早期的目標使用者是 c / cpp 程式設計師,使用c風格的函式命名太正常不過了。

12樓:shooting

首先人家是 Itoa,T並沒有大寫

再者,itoa是個從c時代流傳下來的(非標準)函式。大概因為長得確實奇怪了點,所以幾乎是被所有用過c/cpp的人記住了。感覺相當於語言的吉祥物一類的東西。

大概golang的lib作者繼承了這種感情吧……

不過寫成Itoa也真是夠難看的....

在Ansys workbench中出現了乙個錯誤 An unknown error occurred during the ANSYS solve 請問怎麼解決?

徐曉鋒 這個就是指在計算中出現了問題,導致計算結構無法收斂。主要修改兩點,乙個是網格劃分。這個主要是看有沒有劃分的比較畸形的單元,就是那種角度很小,很尖銳的單元,這些單元很難收斂。二是修改荷載步數。子步數一定的盡量小,那樣就能一點一點的計算,容易收斂,不過計算時間會增加。 挪威的呻吟 我找到答案了進...

react中出現的 hydrate 這個單詞到底是什麼意思

伊撒爾 簡單說就是復用 dom,也可以理解為 dom2vdom,fre 中的實現只有幾行 const recycleNode node node nodeType TEXT NODE createText node nodeValue createVNode node nodeName toLowe...

怎麼放棄生命中出現的「光」?

Philli.N 我想,你並不需要放棄 光 你只要在心裡保留它。我能明白這種艱難的處境,它並不是三言兩語能夠醫治得好的。我知道,時間實際上醫不好這樣的傷,它會埋在心裡,隱隱做痛。我想說,或許可以試試接受這一切。他離開了你,你還在想他。難過?沒有問題的,我們是人,難過是多麼正常的情緒。你的心裡痛,讓自...