1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【翻譯】成為優(yōu)秀 Swift 開發(fā)者的 10 條建議

        共 3902字,需瀏覽 8分鐘

         ·

        2016-11-24 17:55

        在這里給大家分享一些幫助大家成為更優(yōu)秀的Swift開發(fā)者的建議,讓你的代碼,寫的更少,性能更優(yōu) 。

        1. Extension 擴(kuò)展

        舉例:平方

        // Okay Version
        func square(x: Int) -> Int { return x * x }
        var squaredOFFive = square(x: 5)
        square(x:squaredOFFive) // 625

        創(chuàng)建無效變量,將5平方后再平方 —— 畢竟我們不喜歡打字。

        // Better Version
        extension Int { 
         var squared: Int { return self * self }
        }
        5.squared // 25
        5.squared.squared // 625

        2. Generics 泛型

        舉例:打印數(shù)組中的所有元素

        // Bad Code
        var stringArray = ["Bob", "Bobby", "SangJoon"]
        var intArray = [1, 3, 4, 5, 6]
        var doubleArray = [1.0, 2.0, 3.0]
        func printStringArray(a: [String]) { for s in a { print(s) } }
        func printIntArray(a: [Int]) { for i in a { print(i) } }
        func printDoubleArray(a: [Double]) {for d in a { print(d) } }

        對于很多無效的函數(shù),我們只需創(chuàng)建一個(gè)就可。

        // Awesome Code
        func printElementFromArray(a: [T]) {
         for element in a { print(element) } }

        3. For 循環(huán) vs While 循環(huán)

        舉例:打印5次 “Count”

        // Okay Code
        var i = 0
        while 5 > i {
        print("Count")
        i += 1 }

        創(chuàng)建變量“i”以確保你電腦打印有限的數(shù)字不會崩潰。

        要記?。鹤兞吭蕉?→ 記憶越多 → 越麻煩 → bug越多 → 問題越多。蝴蝶效應(yīng)要謹(jǐn)記

        // Better Code
        for _ in 1...5 { print("Count") }

        4. 有選擇的展開

        舉例:Gaurd let vs if let

        我們來寫一個(gè)歡迎新用戶的程序。

        var myUsername: Double?
        var myPassword: Double?
        // Hideous Code
        func userLogIn() {
         if let username = myUsername {
          if let password = myPassword {
           print("Welcome, \(username)"!)
          }
         }
        }

        你看到世界末日的金字塔了嗎?嵌套的代碼太讓人討厭了。堅(jiān)決不要!把糟糕的代碼去掉,改成更好的。

        // Pretty Code
        func userLogIn() {
         guard let username = myUsername, let password = myPassword 
          else { return } 
         print("Welcome, \(username)!") }

        上下兩者的差別是顯而易見的。如果用戶名或密碼有一個(gè)零值,優(yōu)雅的代碼會調(diào)用“return”提前退出。否則,會出現(xiàn)歡迎的信息。

        5. 計(jì)算屬性 vs 函數(shù)

        舉例:求圓的直徑

        // Code
        func getDiameter(radius: Double) -> Double { return radius * 2}
        func getRadius(diameter: Double) -> Double { return diameter / 2}
        getDiameter(radius: 10) // return 20
        getRadius(diameter: 200) // return 100
        getRadius(diameter: 600) // return 300

        上面創(chuàng)建了兩個(gè)互斥函數(shù)。太糟糕了!我們將半徑和直徑之間的點(diǎn)連接起來。

        // Good Code
        var radius: Double = 10
        var diameter: Double {
        get { return radius * 2}
         set { radius = newValue / 2} } 
        radius // 10
        diameter // 20
        diameter = 1000 
        radius // 500

        現(xiàn)在,半徑和直徑變量是互相獨(dú)立的。連接越多 → 額外輸入越少 → 錯(cuò)誤更少 → bug越少 → 問題越少。

        6. 類型安全枚舉

        舉例:售票

        // Simply Bad
        switch "Adult" {
         case "Adult": print("Pay $7")
         case "Child": print("Pay $3")
         case "Senior": print("Pay $4")
         default: print("You alive, bruh?") }

        “Adult”, “Child”, “Senior” → 這是在硬編碼,逐一地將每個(gè)情況的字符串打出來,萬萬不可。上面已經(jīng)解釋過,寫太多會出什么問題。我們可一點(diǎn)都不喜歡打字。

        // Beautiful Code
        enum People { case adult, child, senior }
        switch People.adult {
         case .adult: print("Pay $7")
         case .child: print("Pay $3")
         case .senior: print("Pay $4")
         default: print("You alive, bruh?") }

        “.adult”, “.child”, “.senior” 重點(diǎn)標(biāo)注肯定是沒錯(cuò)的。如果switch語句超過指定枚舉的范圍遇到一些未知情況,左邊發(fā)生紅色錯(cuò)誤(),Xcode會報(bào)警?!?找不到合適的表情啦。

        7. 無效合并

        舉例:用戶選擇Twitter主題色

        // Long Code
        var userChosenColor: String? 
        var defaultColor = "Red"
        var colorToUse = "" 
        if let Color = userChosenColor { colorToUse = Color } else
         { colorToUse = defaultColor }

        這代碼太長了,我們縮短一下。

        // Concise AF
        var colorToUse = userChosenColor ?? defaultColor

        上邊代碼的意思是,如果userChosernColor返回零值(無效),選擇defaultColor (red),否則,選擇userChosenColor.

        8. 有條件的合并

        舉例:雞冠頭(SpikyHair)顯高

        // Simply Verbose
        var currentHeight = 185
        var hasSpikyHair = true
        var finalHeight = 0
        if hasSpikyHair { finalHeight = currentHeight + 5} 
         else { finalHeight = currentHeight }

        上面的代碼太長了,我們來給它瘦瘦身。

        // Lovely Code
        finalHeight = currentHeight + (hasSpikyHair ? 5: 0)

        上面的代碼意思是,如果hasSpikeHaire是真實(shí)的,最后的高度增加5;如果是假的,最后的高度加0(不增加)。

        9. 函數(shù)式編程

        舉例:獲取偶數(shù)

        // Imperative (a.k.a boring)
        var newEvens = [Int]()
        for i in 1...10 {
         if i % 2 == 0 { newEvens.append(i) } }
        print(newEvens) // [2, 4, 6, 8, 10]

        不需要了解全過程。review上面的for循環(huán)太浪費(fèi)時(shí)間了,其實(shí)可以更清晰一些。

        // Declarative 
        var evens = Array(1...10).filter { $0 % 2 == 0 } 
        print(evens) // [2, 4, 6, 8, 10]

        函數(shù)式編程是現(xiàn)象級的,會讓你變得更聰明。

        10. Closure vs Func

        // Normal Function 
        func sum(x: Int, y: Int) -> Int { return x + y }
        var result = sum(x: 5, y: 6) // 11

        不需要記住函數(shù)和變量的名字。

        // Closure
        var sumUsingClosure: (Int, Int) -> (Int) = { $0 + $1 }
        sumUsingClosure(5, 6) // 11 
        瀏覽 120
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成都私人高清影院最火的一句 | 乱伦肏屄视频 | 丰满的少妇k8经典片 | 99激情| 成人电影999 | 国产高声呻吟一区二区久久资源 | 久久精品10 | 爆操美女视频网站 | 麻豆九色| jiZZjiZZji ZZ亚洲熟女 |