成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么 Go 語言把類型放在后面?

開發(fā) 后端
Go 的變量名總是在前,在人的代碼閱讀上可以保持從左到右閱讀,不需要像 C 語言一樣在一大堆聲明中用技巧找變量名對(duì)應(yīng)的類型。

[[428007]]

本文轉(zhuǎn)載自微信公眾號(hào)「腦子進(jìn)煎魚了」,作者陳煎魚。轉(zhuǎn)載本文請(qǐng)聯(lián)系腦子進(jìn)煎魚了公眾號(hào)。

大家好,我是煎魚。

前段時(shí)間看到大家在吵一個(gè)話題,那就是 Go 語言的類型聲明,摳知識(shí)摳的非常細(xì)了,就是為什么他要放在后面,展開了熱烈的討論。

示例代碼如下:

  1. var a []string 
  2. var b []string 

其實(shí)在早年 Go 官方估計(jì)已經(jīng)被問煩了,寫過一篇《Go's Declaration Syntax[1]》來具體介紹和說明情況。

為此煎魚將參考并結(jié)合這篇官方資料,帶大家一起了解為什么 Go 如此的 “與眾不同” ,為什么要把類型放在后面。

類型前置

在業(yè)內(nèi)目前有不少知名語言,也采取的是在聲明變量類型時(shí),把類型定義在名字前面。像是 C、C++、C#、Java 等:

  1. int x; 
  2. int x = 100; 

基本的格式定義: ;。

上面的聲明是一個(gè)簡單的例子,如果更復(fù)雜一些,Go 官方還給出了著名的函數(shù)指針的例子:

  1. int (*fp)(int a, int b); 

更進(jìn)一步,如果返回值也是個(gè)函數(shù)指針類型,就會(huì)變成:

  1. int (*(*fp)(int (*)(intint), int))(intint

這已經(jīng)很難看出來是個(gè) fp 的聲明了。

類型后置

前面所舉例的類型前置的編程語言,很多都是 C 系列中的一者。類型后置的代表,分別有:Go、Rust、Scala、Kotlin 等。

其實(shí)在很多類型后置的編程語言種,會(huì)采取變量名+冒號(hào)+類型的方式出現(xiàn)。就像 Rust 一樣:

  1. let x: i32; 
    1. var a []string 

基本的格式定義:

  1. x: int 
  2. p: pointer to int 
  3. a: array[3] of int 

Go 官方參照了這類類型后置的設(shè)計(jì),并且為了簡潔,進(jìn)一步去掉了冒號(hào)和一些關(guān)鍵字,變成:

  1. var a []string 

我們?cè)倏椿厍懊?fp 的聲明的例子:

  1. int (*(*fp)(int (*)(intint), int))(intint

再對(duì)比 Go 語言中就變成了:

f func(func(int,int) int, int) func(int, int) int

兩者一對(duì)比,Go 語言代碼可讀性確實(shí)更高一些。

思考

后置類別

在類型聲明上,實(shí)際上分為:變量類型后置、函數(shù)返回值后置。兩者共同構(gòu)建了前置還是后置,總不能一個(gè)前置,一個(gè)后置吧,那得多么的難受。

上方 C 語言和 Go 語言函數(shù)指針的例子,所對(duì)比帶來的代碼可讀性提高,其實(shí)本質(zhì)上是由函數(shù)返回值后置所帶來的。

和類型前置、后置沒太多直接關(guān)系。

核心思想

在類型后置上來講,Go 官方核心思想是:這種聲明方式(從左到右的風(fēng)格)的一個(gè)優(yōu)點(diǎn)是,當(dāng)類型變得更加復(fù)雜時(shí),它的效果非常好(One merit of this left-to-right style is how well it works as the types become more complex)。

Go 的變量名總是在前,在人的代碼閱讀上可以保持從左到右閱讀,不需要像 C 語言一樣在一大堆聲明中用技巧找變量名對(duì)應(yīng)的類型。

The Clockwise/Spiral Rule

為此甚至有人寫了篇 C 語言的順時(shí)針讀法《The Clockwise/Spiral Rule[2]》,有興趣可以閱讀。

如此一對(duì)比,Go 語言的類型后置在復(fù)雜場(chǎng)景下與 C 語言的對(duì)比確實(shí)更好一些。

其他因素

類型推導(dǎo)

諸如在類型推導(dǎo)的形式上也會(huì)更直觀:

  1. func main() { 
  2.     var s1 := "腦子進(jìn)煎魚了" 
  3.     var s2 string 

也是一個(gè)可讀性提高的問題。

類型和名字誰更重要

不同設(shè)計(jì)者對(duì)誰更重要的理解也不一樣。是類型更重要,還是名字更重要呢?

有的人認(rèn)為是類型,有的人認(rèn)為是名字。這就真的是千人千面,眾口難調(diào)了。

C# 的后悔

我們看看其他語言,C# 設(shè)計(jì)組成員之一,其實(shí)在《Sharp Regrets: Top 10 Worst C# Features[3]》中的第五點(diǎn)表達(dá)了個(gè)人對(duì)類型前置、后置的設(shè)計(jì)教訓(xùn)。

核心觀點(diǎn)是:從編程和數(shù)學(xué)兩方面來看,都有一個(gè)約定,即計(jì)算的結(jié)果在右側(cè)表示,所以在類 C 語言中,類型在左側(cè)是很奇怪的。

在設(shè)計(jì)時(shí),C# 本來計(jì)劃把類型注釋放在右邊。但考慮到類 C 語言,因此遵循了其他語言的慣例。

總結(jié)

實(shí)際上該問題的研討,在 2021 年的現(xiàn)在,大部分 case 都一一被反駁了。類型后置也不是一個(gè)與眾不同的設(shè)計(jì),很多語言都是如此。但既然要討論 Go 語言,那更多的是站在設(shè)計(jì)者的角度去考慮。

結(jié)合 Go 所提供的官方資料,在當(dāng)年的目的更多的是為了在遇到復(fù)雜類型定義時(shí),能保持一定的代碼可讀性。

當(dāng)然,這不可否認(rèn)肯定包含 Go 開發(fā)團(tuán)隊(duì)的主觀意識(shí)。有興趣的可以具體挖挖背后的信息。

如果是你,你會(huì)希望類型放在前面,還是后面呢,為什么?

參考資料

[1]Go's Declaration Syntax: https://go.dev/blog/declaration-syntax

[2]The Clockwise/Spiral Rule: http://c-faq.com/decl/spiral.anderson.html

[3]Sharp Regrets: Top 10 Worst C# Features: https://www.informit.com/articles/article.aspx?p=2425867

 

責(zé)任編輯:武曉燕 來源: 腦子進(jìn)煎魚了
相關(guān)推薦

2024-01-16 15:24:09

AI人工智能AI領(lǐng)導(dǎo)者

2015-11-05 14:01:20

無線充電標(biāo)準(zhǔn)無線技術(shù)充電

2020-04-07 16:12:56

Go編程語言開發(fā)

2023-01-18 10:15:52

理想 L8 Pro自動(dòng)駕駛

2024-01-02 10:38:22

Go語言數(shù)組

2016-09-27 21:25:08

Go語言Ken Thompso

2018-05-02 12:34:48

2023-03-06 08:01:25

structGo語言

2022-01-17 16:09:43

Go語言開發(fā)

2012-05-19 22:17:30

Android

2016-10-25 10:22:54

2012-11-13 10:27:45

PythonGo編程語言

2022-01-10 23:54:56

GoMap并發(fā)

2012-08-20 09:16:15

Go語言

2024-01-15 00:42:55

Go語言應(yīng)用程序

2024-01-01 08:10:40

Go語言map

2024-01-05 08:45:35

Go語言map

2014-12-23 09:34:47

動(dòng)態(tài)語言

2020-02-27 21:03:30

調(diào)度器架構(gòu)效率

2017-11-14 11:12:50

Go語言編譯器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精久久久久久 | 中文字幕一区二区三区四区 | 男女免费网站 | 成年男女免费视频网站 | 在线免费国产视频 | 国产精品免费在线 | 91麻豆产精品久久久久久夏晴子 | 日韩91| 色综合一区 | 无码一区二区三区视频 | 淫片一级国产 | 国产精品永久免费视频 | 国产伦精品一区二区三区精品视频 | 成人在线免费观看视频 | 成人免费黄色片 | 欧美综合视频 | 色频| 人人99 | 九九热这里 | 国产成人99久久亚洲综合精品 | 精品国产一区二区三区观看不卡 | 精品小视频 | 久久大| 久久三级影院 | 国产在线一区二区 | av黄色在线播放 | 草久久久 | 国产精品视频中文字幕 | 日韩欧美综合在线视频 | 五月槐花香 | 欧美一级久久 | 福利网址| 91福利在线观看视频 | 国产成人精品免高潮在线观看 | 日韩视频高清 | 久色网| 91在线观看视频 | 999久久久久久久久6666 | 亚洲一二三区不卡 | 久国产| 欧洲一区二区视频 |