整型字面量的那些事

作者:Erica Sadun,原文鏈接,原文日期:2016/06/28
譯者:Cwift;校對:pmst;定稿:Cee

昨晚我發(fā)了一條推特邀請開發(fā)者們參與一個問題的調(diào)查。相當一部分人問我這個調(diào)查是怎么回事。

Swift 標準庫中一些類型轉(zhuǎn)換相關(guān)的協(xié)議,Matthew Johson 和我觀點相同,認為命名非常糟糕。標準庫中大約存在 80 個古怪的協(xié)議,其中大約 15% 都與類型轉(zhuǎn)換相關(guān)。

因此我們遞交了一份有關(guān)重命名的提案,不過最終被否決了。標準庫團隊傾向于使用新的 Syntax 命名空間,而我們的提案側(cè)重于命名方面的指導。他們的答復是具體問題具體分析,在不違背哲學的前提下,Swift 的革新提案需要著眼真實世界進行設(shè)計,而不是單純的理論指導。我和標準庫團隊沒能達成共識,不過討論還在持續(xù),因為 WWDC 過后這些問題還是沒能得到解決。最近 Matthew Johson 已經(jīng)在起草一份新的提案了。

當某個類型遵循 IntegerLiteralConvertible 協(xié)議后,意味著「允許一個整型字面量被解釋成該類型的實例」。想要這樣的行為發(fā)生,協(xié)議遵守者必須實現(xiàn)指定的構(gòu)造器,該構(gòu)造器接受一個 Int 類型的參數(shù)。

// 協(xié)議的遵守者可以使用整型字面量進行初始化
public protocol IntegerLiteralConvertible {

    associatedtype IntegerLiteralType

    // 創(chuàng)建一個實例,并用 `value` 進行初始化
    public init(integerLiteral value: Self.IntegerLiteralType)
}

我認為使用下面的表達方式來闡述這個協(xié)議會更清晰:

// 遵守該協(xié)議后,協(xié)議的遵守者可以使用整型字面量表示
//
//
// let instance: T = *integer literal*
//
// 
// 比如:
// 
//
// let myDouble: Double = 2 // 整型字面量 2 自動轉(zhuǎn)型成了 Double
// let anotherDouble: Double = myDouble * 5 // 整型字面量 5 自動轉(zhuǎn)型成了 Double
//
//
public protocol NAME_TO_BE_DETERMINED {

    //  約束整型字面量,字面量默認會被識別成Int類型
    associatedtype IntegerLiteralType

    //  創(chuàng)建一個實例,并用 `value` 進行初始化
    //  構(gòu)造器內(nèi)部的語法必須可以被替換
    public init(integerLiteral value: Self.IntegerLiteralType)
}

協(xié)議命名是一個棘手的問題。參與討論的成員建議使用 Syntax.IntegerLiteralSyntax.IntegerLiteralExpressible,我認為二者都有不足的地方。而且上述的命名方式也并不能夠表達使用協(xié)議的初衷

昨晚我向 Swift 開發(fā)者們發(fā)推詢問了有關(guān) Syntax.IntegerLiteralExpressible 的含義,這里是回復結(jié)果。大約九成的人認為它的含義是「協(xié)議的遵守者可以像整型字面量那樣來展示自己」。在這個鏈接頁面的頂部有一個標簽,你可以在「問題摘要」和「個人回答」間進行切換,然后就可以看到參與調(diào)查者對選項的解釋。

更新:戴夫·亞伯拉罕的回復:

你所提供的選項中,唯一看起來正確的答案不夠優(yōu)雅并且有一些錯誤——我曾說的是「協(xié)議遵守者的實例可以用整型字面量來表示」,你的答案大概匹配了原意的 90%,剩下的 10% 還差很多。
我只能告訴你,你的調(diào)查結(jié)果支持了我的意見。

雖然有關(guān)類型轉(zhuǎn)換的協(xié)議的適用對象只是標準庫中的類型,但是這些協(xié)議(和它們的同胞協(xié)議們一樣)可以被職業(yè)的 Swift 開發(fā)者看到、閱讀并使用。就這一點來說,我認為追求好的命名規(guī)則是有價值的。希望 Swift 能用更好的命名取代形如 Syntax.AllowsIntegerLiteralToBeInterpretedAsExpressionOfConformingType 這樣的協(xié)議命名。

本文由 SwiftGG 翻譯組翻譯,已經(jīng)獲得作者翻譯授權(quán),最新文章請訪問 http://swift.gg。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容