相关阅读: 使用Kotlin优雅的开发Android应用,附demo
一文让你全面深入了解Kotlin,附优秀的开源Kotlin的Android项目和视频
Kotlin学习资料大全,附学习视频首发 来源:http:///swift-is-like-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..
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() val emptyMap = mapOf()
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(x: T) { print('Name is ' x.name()) }
Kotlin
interface Nameable { fun name(): String } fun f(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'
|