亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語言為什么不支持三元運算符原理解析

 更新時間:2023年08月07日 09:10:38   作者:煎魚  
這篇文章主要為大家介紹了Go語言為什么不支持三元運算符原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

這是一個很多其他語言工程師轉(zhuǎn) Go 語言的時間節(jié)點,這就難免不論一番比較。其中一個經(jīng)典的運算上的就是 “三元運算符”:

為什么 Go 語言不支持三元運算符,Go 不支持三元運算符就是設計的不好,是歷史在開倒車嗎?

今天就由煎魚來和大家一起摸索為什么。

三元運算符是什么

三元運算符,在典型的數(shù)學意義上,或者從解析器的角度來看,是一個需要三個參數(shù)的運算符。而我們?nèi)粘V校畛R姷氖嵌\算符:

x?+?y
x?/?y
x?*?y

還有一元運算符:

-a
~b
!c

以及今天的男主角 “三元運算符”。在 C/C++ 等多種語言中,我們可以根據(jù)條件聲明和初始化變量的習慣來選擇性使用三元條件運算符:

int?index?=?val?>?0???val?:?-val

Go 使用三元運算符

想在 Go 語言里也使用三元運算符時,發(fā)現(xiàn)居然沒有...想要實現(xiàn)與上面相同的代碼段的方式似乎只能:

var?index?int
if?val?>?0?{
????index?=?val
}?else?{
????index?=?-val
}

看上去十分的冗余,不夠簡潔。

為什么 Go 沒有三元運算符

為什么 Go 沒有 ?: 操作符,沒有的話,官方推薦的方式是怎么樣的。

通過 Go FAQ 我們可以得知:

Go 官方就是推薦我們使用前面提到的方式來替代,并且明確了如下態(tài)度:

  • Go 中沒有 ?: 的原因是語言的設計者看到這個操作經(jīng)常被用來創(chuàng)建難以理解的復雜表達式。
  • 在替代方案上,if-else 形式雖然較長,但無疑是更清晰的。一門語言只需要一個條件控制流結(jié)構(gòu)。

整體來講,Go 語言的設計者是為了考慮可讀性拒絕了實現(xiàn)三元運算符,"less is more." 也是標榜臺詞了。

社區(qū)爭議

Go 語言的一些點與眾不同,基本是大家皆知的。無論是 if err != nil,又或是本次的三元運算符,要大家用 if-else 替代:

if?expr?{
????n?=?trueVal
}?else?{
????n?=?falseVal
}

反對

因此有社區(qū)小伙伴給出了反對,基本分為如下幾類:

  • 認為 if-else 也有以類似情況能被濫用,設計者的理由不夠充分,認為是 “借口”。
  • 認為三元運算符的 “丑陋” 問題,是開發(fā)者的編碼問題,而不是語言問題。三元在各種語言中很常見,它們是正常的,Go 語言也應該要有。
  • 認為用 if-else 替代三元運算符也很麻煩,讓開發(fā)者多讀了 3-4 行和額外的縮進級別。

同意

認可這個決策的也有不少,為此給出了大量的真實工程案例。

一般來講,我們用三元運算符是希望這么用:

cond???true_value?:?false_value

你可能見過這么用:

cond???value_a?+?value_b?:?value_c?*?value_d

還見過這樣:

(((cond_a???val_one)?:?cond_b)???val_two)?:?val_three
cond_a???(val_one?:?(cond_b???(val_two?:?val_three)))

還能嵌套三元運算符:

int?a?=?cond_a???val_one?:
????cond_b???val_two?:
????cond_c???val_three?:?val_four;

也能出現(xiàn)可讀性更差的:

void?rgb_to_lightness_(
??const?double?re,?const?double?gr,?const?double?bl,?double?&li)
{
??li=((re?<?gr)???((gr?<?bl)???bl?:?gr)?:?((re?<?bl)???bl?:?re)?+
????????????????????????????(gr?<?re)
????????????????????????????((bl?<?gr)???bl?:?gr)
??????????????????????????:?((bl?<?re)???bl?:?re))?/?2.0;
}

說白了就是真實的代碼工程中,大家見到過大量三元運算符濫用的場景,紛紛給出了大量的難理解的例子,讓大家困擾不堪。

總結(jié)

在這篇文章中,首先針對 “三元運算符” 做了基本的介紹。緊接著根據(jù) Go 語言不支持三元的態(tài)度進行了說明,且面向社區(qū)的爭議我們分為了正反方面的基本詮釋。

實際上一個簡單的 ?: 既整潔又實用,但是沒有很好又高效的辦法方法可以防止丑陋的嵌套,也就是排除可讀性的問題。

在真實的業(yè)務工程中,常常能看到一個三元運算符,一開始只是很簡單。后面嵌套越加越深,邏輯越寫越復雜,從而帶來了許多維護上的問題。

給大家拋出如下問題:

  • 你認為 Go 語言是否要有三元運算符呢?
  • 如果要有,復雜嵌套的三元運算符又如何考慮呢?

以上問題留給大家思考,更多關于Go 三元運算符的資料請關注腳本之家其它相關文章!

相關文章

  • Golang中切片長度和容量的區(qū)別示例詳解

    Golang中切片長度和容量的區(qū)別示例詳解

    切片長度與容量在Go中很常見,切片長度是切片中可用元素的數(shù)量,而切片容量是從切片中第一個元素開始計算的底層數(shù)組中的元素數(shù)量,這篇文章主要給大家介紹了關于Golang中切片長度和容量區(qū)別的相關資料,需要的朋友可以參考下
    2024-01-01
  • Go中Context使用源碼解析

    Go中Context使用源碼解析

    這篇文章主要為大家介紹了Go中Context使用源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • golang grpc配置使用實戰(zhàn)

    golang grpc配置使用實戰(zhàn)

    本文主要介紹了golang grpc配置使用實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Golang實踐筆錄之讀取yaml配置文件

    Golang實踐筆錄之讀取yaml配置文件

    YAML是YAML?Ain't?a?Markup?Language的縮寫,YAML不是一種標記語言,相比JSON格式的方便,這篇文章主要給大家介紹了關于Golang實踐筆錄之讀取yaml配置文件的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Golang使用Zookeeper實現(xiàn)分布式鎖

    Golang使用Zookeeper實現(xiàn)分布式鎖

    分布式鎖是一種在分布式系統(tǒng)中用于控制并發(fā)訪問的機制,ZooKeeper?和?Redis?都是常用的實現(xiàn)分布式鎖的工具,本文就來使用Zookeeper實現(xiàn)分布式鎖,希望對大家有所幫助
    2024-02-02
  • Go模塊布局管理文檔翻譯理解

    Go模塊布局管理文檔翻譯理解

    這篇文章主要為大家介紹了Go模塊布局管理文檔翻譯理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Go語言利用ssh連接服務器的方法步驟

    Go語言利用ssh連接服務器的方法步驟

    這篇文章主要介紹了Go語言利用ssh連接服務器的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Go語言sync.Map詳解及使用場景

    Go語言sync.Map詳解及使用場景

    Go語言中的sync.Map是一個高效的并發(fā)安全映射結(jié)構(gòu),適用于高并發(fā)讀多寫少的場景,它通過讀寫分離、無鎖讀取路徑、寫入時的鎖保護等機制,提高了讀取性能并減少了鎖競爭,sync.Map不需要手動管理鎖,降低了編程復雜性,適合需要簡單并發(fā)訪問的場合
    2024-10-10
  • Go select 死鎖的一個細節(jié)

    Go select 死鎖的一個細節(jié)

    這篇文章主要給大家分享的是Go select 死鎖的一個細節(jié),文章先是對主題提出問題,然后展開內(nèi)容,感興趣的小伙伴可以借鑒一下,希望對你有所幫助
    2021-10-10
  • Golang實現(xiàn)自己的orm框架實例探索

    Golang實現(xiàn)自己的orm框架實例探索

    這篇文章主要為大家介紹了Golang實現(xiàn)自己的orm框架實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01

最新評論