Swift 與 Kotlin 的簡單對比

一位國外的程序員認爲 Swift 的語法與 Kotlin 類似,並整理了一些 Swift 和 Kotlin 的對比,下面是一些例子,你們不妨也看看。git

BASICS

Hello World程序員

Swiftswift

print("Hello, world!")

 

Kotlin數組

println("Hello, world!")

 

變量和常量app

Swiftide

var myVariable = 42
myVariable = 50 let myConstant = 42

 

Kotlin函數

var myVariable = 42 myVariable = 50 val myConstant = 42

 

顯式類型ui

Swiftthis

let explicitDouble: Double = 70

 

Kotlinspa

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(width: Int, height: Int) -> Int {     return width * height } area(width: 2, height: 3)

 

Kotlin

fun area(width: 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
相關文章
相關標籤/搜索