zoukankan      html  css  js  c++  java
  • Swift 与 Kotlin 的简单对比

    一位国外的程序员认为 Swift 的语法与 Kotlin 相似,并整理了一些 Swift 和 Kotlin 的对比,下面是一些例子,大家不妨也看看。

    BASICS

    Hello World

    Swift

    print("Hello, world!")

    Kotlin

    println("Hello, world!")

    变量和常量

    Swift

    var myVariable = 42
    myVariable = 50
    let myConstant = 42

    Kotlin

    var myVariable = 42
    myVariable = 50
    val myConstant = 42

    显式类型

    Swift

    let explicitDouble: Double = 70

    Kotlin

    val explicitDouble: Double = 70.0

    强制类型转换

    Swift

    let label = "The width is "
    let width = 94
    let widthLabel = label + String(width)

    Kotlin

    val label = "The width is "
    val width = 94
    val widthLabel = label + width

    字符串插值

    Swift

    let apples = 3
    let oranges = 5
    let fruitSummary = "I have (apples + oranges) " +
                       "pieces of fruit."

    Kotlin

    val apples = 3
    val oranges = 5
    val fruitSummary = "I have ${apples + oranges} " +
                       "pieces of fruit."

    范围操作符

    Swift

    let names = ["Anna", "Alex", "Brian", "Jack"]
    let count = names.count
    for i in 0..<count {
        print("Person (i + 1) is called (names[i])")
    }
    // Person 1 is called Anna
    // Person 2 is called Alex
    // Person 3 is called Brian
    // Person 4 is called Jack

    Kotlin

    val names = arrayOf("Anna", "Alex", "Brian", "Jack")
    val count = names.count()
    for (i in 0..count - 1) {
        println("Person ${i + 1} is called ${names[i]}")
    }
    // Person 1 is called Anna
    // Person 2 is called Alex
    // Person 3 is called Brian
    // Person 4 is called Jack

    包罗广泛的范围操作符(Inclusive Range Operator)

    Swift

    for index in 1...5 {
        print("(index) times 5 is (index * 5)")
    }
    // 1 times 5 is 5
    // 2 times 5 is 10
    // 3 times 5 is 15
    // 4 times 5 is 20
    // 5 times 5 is 25

    Kotlin

    for (index in 1..5) {
        println("$index times 5 is ${index * 5}")
    }
    // 1 times 5 is 5
    // 2 times 5 is 10
    // 3 times 5 is 15
    // 4 times 5 is 20
    // 5 times 5 is 25

    BASICS

    数组

    Swift

    var shoppingList = ["catfish", "water",
        "tulips", "blue paint"]
    shoppingList[1] = "bottle of water"

    Kotlin

    val shoppingList = arrayOf("catfish", "water",
        "tulips", "blue paint")
    shoppingList[1] = "bottle of water"

    映射

    Swift

    var occupations = [
        "Malcolm": "Captain",
        "Kaylee": "Mechanic",
    ]
    occupations["Jayne"] = "Public Relations"

    Kotlin

    val occupations = mutableMapOf(
        "Malcolm" to "Captain",
        "Kaylee" to "Mechanic"
    )
    occupations["Jayne"] = "Public Relations"

    空集合

    Swift

    let emptyArray = [String]()
    let emptyDictionary = [String: Float]()

    Kotlin

    val emptyArray = arrayOf<String>()
    val emptyMap = mapOf<String, Float>()

    FUNCTIONS

    函数

    Swift

    func greet(_ name: String,_ day: String) -> String {
        return "Hello (name), today is (day)."
    }
    greet("Bob", "Tuesday")

    Kotlin

    fun greet(name: String, day: String): String {
        return "Hello $name, today is $day."
    }
    greet("Bob", "Tuesday")

    元组返回

    Swift

    func getGasPrices() -> (Double, Double, Double) {
        return (3.59, 3.69, 3.79)
    }

    Kotlin

    data class GasPrices(val a: Double, val b: Double,
         val c: Double)
    fun getGasPrices() = GasPrices(3.59, 3.69, 3.79)

    参数的变量数目(Variable Number Of Arguments)

    Swift

    func sumOf(_ numbers: Int...) -> Int {
        var sum = 0
        for number in numbers {
            sum += number
        }
        return sum
    }
    sumOf(42, 597, 12)

    Kotlin

    fun sumOf(vararg numbers: Int): Int {
        var sum = 0
        for (number in numbers) {
            sum += number
        }
        return sum
    }
    sumOf(42, 597, 12)
    
    // sumOf() can also be written in a shorter way:
    fun sumOf(vararg numbers: Int) = numbers.sum()

    函数类型

    Swift

    func makeIncrementer() -> (Int -> Int) {
        func addOne(number: Int) -> Int {
            return 1 + number
        }
        return addOne
    }
    let increment = makeIncrementer()
    increment(7)

    Kotlin

    fun makeIncrementer(): (Int) -> Int {
        val addOne = fun(number: Int): Int {
            return 1 + number
        }
        return addOne
    }
    val increment = makeIncrementer()
    increment(7)
    
    // makeIncrementer can also be written in a shorter way:
    fun makeIncrementer() = fun(number: Int) = 1 + number

    映射

    Swift

    let numbers = [20, 19, 7, 12]
    numbers.map { 3 * $0 }

    Kotlin

    val numbers = listOf(20, 19, 7, 12)
    numbers.map { 3 * it }

    排序

    Swift

    var mutableArray = [1, 5, 3, 12, 2]
    mutableArray.sort()

    Kotlin

    listOf(1, 5, 3, 12, 2).sorted()

    命名参数

    Swift

    func area( Int, height: Int) -> Int {
        return width * height
    }
    area( 2, height: 3)

    Kotlin

    fun area( Int, height: Int) = width * height
    area(width = 2, height = 3)
    
    // This is also possible with named arguments
    area(2, height = 2)
    area(height = 3, width = 2)

    CLASSES

    声明

    Swift

    class Shape {
        var numberOfSides = 0
        func simpleDescription() -> String {
            return "A shape with (numberOfSides) sides."
        }
    }

    Kotlin

    class Shape {
        var numberOfSides = 0
        fun simpleDescription() =
            "A shape with $numberOfSides sides."
    }

    用法

    Swift

    var shape = Shape()
    shape.numberOfSides = 7
    var shapeDescription = shape.simpleDescription()

    Kotlin

    var shape = Shape()
    shape.numberOfSides = 7
    var shapeDescription = shape.simpleDescription()

    子类

    Swift

    class NamedShape {
        var numberOfSides: Int = 0
        let name: String
    
        init(name: String) {
            self.name = name
        }
    
        func simpleDescription() -> String {
            return "A shape with (numberOfSides) sides."
        }
    }
    
    class Square: NamedShape {
        var sideLength: Double
    
        init(sideLength: Double, name: String) {
            self.sideLength = sideLength
            super.init(name: name)
            self.numberOfSides = 4
        }
    
        func area() -> Double {
            return sideLength * sideLength
        }
    
        override func simpleDescription() -> String {
            return "A square with sides of length " +
    	       sideLength + "."
        }
    }
    
    let test = Square(sideLength: 5.2, name: "square")
    test.area()
    test.simpleDescription()

    Kotlin

    open class NamedShape(val name: String) {
        var numberOfSides = 0
    
        open fun simpleDescription() =
            "A shape with $numberOfSides sides."
    }
    
    class Square(var sideLength: BigDecimal, name: String) :
            NamedShape(name) {
        init {
            numberOfSides = 4
        }
    
        fun area() = sideLength.pow(2)
    
        override fun simpleDescription() =
            "A square with sides of length $sideLength."
    }
    
    val test = Square(BigDecimal("5.2"), "square")
    test.area()
    test.simpleDescription()

    类型检查

    Swift

    var movieCount = 0
    var songCount = 0
    
    for item in library {
        if item is Movie {
            movieCount += 1
        } else if item is Song {
            songCount += 1
        }
    }

    Kotlin

    var movieCount = 0
    var songCount = 0
    
    for (item in library) {
        if (item is Movie) {
            ++movieCount
        } else if (item is Song) {
            ++songCount
        }
    }

    模式匹配

    Swift

    let nb = 42
    switch nb {
        case 0...7, 8, 9: print("single digit")
        case 10: print("double digits")
        case 11...99: print("double digits")
        case 100...999: print("triple digits")
        default: print("four or more digits")
    }

    Kotlin

    val nb = 42
    when (nb) {
        in 0..7, 8, 9 -> println("single digit")
        10 -> println("double digits")
        in 11..99 -> println("double digits")
        in 100..999 -> println("triple digits")
        else -> println("four or more digits")
    }

    类型向下转换

    Swift

    for current in someObjects {
        if let movie = current as? Movie {
            print("Movie: '(movie.name)', " +
                "dir. (movie.director)")
        }
    }

    Kotlin

    for (current in someObjects) {
        if (current is Movie) {
            println("Movie: '${current.name}', " +
    	    "dir. ${current.director}")
        }
    }

    协议

    Swift

    protocol Nameable {
        func name() -> String
    }
    
    func f<T: Nameable>(x: T) {
        print("Name is " + x.name())
    }

    Kotlin

    interface Nameable {
        fun name(): String
    }
    
    fun f<T: Nameable>(x: T) {
        println("Name is " + x.name())
    }

    扩展

    Swift

    extension Double {
        var km: Double { return self * 1_000.0 }
        var m: Double { return self }
        var cm: Double { return self / 100.0 }
        var mm: Double { return self / 1_000.0 }
        var ft: Double { return self / 3.28084 }
    }
    let oneInch = 25.4.mm
    print("One inch is (oneInch) meters")
    // prints "One inch is 0.0254 meters"
    let threeFeet = 3.ft
    print("Three feet is (threeFeet) meters")
    // prints "Three feet is 0.914399970739201 meters"

    Kotlin

    val Double.km: Double get() = this * 1000
    val Double.m: Double get() = this
    val Double.cm: Double get() = this / 100
    val Double.mm: Double get() = this / 1000
    val Double.ft: Double get() = this / 3.28084
    
    val oneInch = 25.4.mm
    println("One inch is $oneInch meters")
    // prints "One inch is 0.0254 meters"
    val threeFeet = 3.0.ft
    println("Three feet is $threeFeet meters")
    // prints "Three feet is 0.914399970739201 meters"

    原文地址:https://www.oschina.net/news/85013/swift-is-like-kotlin?from=groupmessage&isappinstalled=1
  • 相关阅读:
    eval()函数的使用
    Ajax的GET,POST方法传输数据和接收返回数据
    使用目录
    安装目录
    c 文件输入和输出
    【C++王桂林】
    【C++】虚函数表vtable理解
    【C++】内存管理内幕阅读笔记
    git提交中的索引错误问题
    pydicom编辑、删除DICOM文件中病人相关信息
  • 原文地址:https://www.cnblogs.com/conorpai/p/6901520.html
Copyright © 2011-2022 走看看