• 一位国外的程序员认为 Swift 的语法与 Kotlin 相似,并整理了一些 SwiftKotlin 的对比,下面是一些例子,大家不妨也看看。 BASICS Hello World Swift print(“Hello, world!”) Kotlin println(“Hello, world!...

    一位国外的程序员认为 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()
    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

    展开全文
  • Kotlin是什么我们知道,Apple在2014年发布了全新开发语言Swift.经过三年多的发展, 这门语言已经发展到3.0版本,预计在今年6月会发布4.0版本,笔者从2.0开始关注它,期间踩过不上坑,不过到现在已经发展相对稳定,...

    Kotlin是什么

    我们知道,Apple在2014年发布了全新开发语言Swift.经过三年多的发展, 这门语言已经发展到3.0版本,预计在今年6月会发布4.0版本,笔者从2.0开始关注它,期间踩过不上坑,不过到现在已经发展相对稳定,现在很多公司包括大厂在自家的项目中应用到Swfit进行开发。

    那么Kotlin是什么鬼?它也是一种开源的编程语言,早就存在了,只不过大家对它不是很熟悉,哪怕做Android开发的程序员,知道的也很少。Google 2017 IO 大会上,Kotlin正式被选为作为Android开发的官方语言,Kotlin是一们基于JVM的语言,可以被编译成java的字节码, 跟java有很好的兼容性,而且相比于java更安全。

    Kotlin和Swift在语法上的比较

    自从Kotlin正式拿到门票后,大家应该对这门语言比较好奇,我也一样,刚好就看到了这篇国外人撰写的文章,国内热心人翻译了过来,简单的比较了一下Kotlin和Swift 的语言比较。作为学习和交流,我就转载过来了。

    原文链接
    本文只简单列出3个地方的相似性。具体大家参考原文,非常容易看懂。

    • Hello World
      Swift
    print("Hello,world!")

    Kotlin

    println("Hello,world!")
    • 常量和变量
      Swift
      常量用let
    var myVariable = 42
    myVariable = 50
    let myConstant = 42

    kotlin
    常量用val

    var myVariable = 42
    myVariable = 50
    val myConstant = 42
    
    • 数组

    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"
    展开全文
  • 百度发音:kotlin——科特林 前言: 2017年5月18日 - 今天的I/O大会上谷歌宣布Kotlin正式成为Android的官方语言。 其实在去年我就开发在了解Kotlin,只是由于项目的原因,还有一些人根本不知道他的存在...

    百度发音:kotlin——科特林


    前言:

    2017年5月18日 - 今天的I/O大会上谷歌宣布Kotlin正式成为Android的官方语言。


    其实在去年我就开发在了解Kotlin,只是由于项目的原因,还有一些人根本不知道他的存在,然后推荐给了不少人,都被否决了!

    kotlin要火了,昨晚的Google I/O大会,Google宣布正式其实kotlin。

    这个小时对几乎所有Android的猿类来说,应该是最震惊的,为什么呢?

    因为你又有一门新的语言可以学习了,就像Swift对iOS程序员的意义意义!

    当然这个消息不仅对Android程序员比较震惊,对几乎所有做iOS开发的程序也是一个值得关注的消息?为什么呢?

    那你的问问Swift为什么和他长得这么像!


    所以,Let`s Go


    首先有任何想了解kotlin的,建议最好先看官方教程:http://kotlinlang.org/

    Kotlin是什么

    Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。
    Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
    JetBrains,作为目前广受欢迎的Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。

    众所周知Android程序是运行在Java虚拟机之上的,因此从技术上来说,可以运行在JVM之上的一切都可用于开发Android应用。现在已经有很多可以生成JVM能够执行的字节码的语言,其中一些语言开始崭露头角并逐步流行起来。 现存的计算机编程语言有好几千种,JVM上的语言也有十几种(比如NBJL/Clojure/Groovy/Scala/Fantom),所以大可不必为没听说过的编程语言感到惊奇,我也就听过Groovy/Scala/Kotlin,scala比较和C语言接近,而Groovy和java很相似你肯定对gradle不陌生吧,但是Kotlin就是其中的佼佼者。

    近日召开的 Google IO 2017 , Google 将 Kotlin 列为 Android 官方开发语言了,
    Android Studio 3.0 也默认集成了 Kotlin plugin

    kotlin的历史

    历史2011 年 7 月,JetBrains 推出 Kotlin 项目,这是一个面向 JVM 的新语言,它已被开发一年之久。JetBrains 负责人Dmitry Jemerov 说,大多数语言没有他们正在寻找的特性,Scala 除外,他指出了 Scala 的编译时间慢这一明显缺陷。Kotlin 的既定目标之一是像 Java 一样快速编译。

    2012 年 2 月,JetBrains 以 Apache 2 许可证开源此项目,Jetbrains 希望这个新语言能够推动 IntelliJ IDEA 的销售。

    Kotlin v1.0 于 2016 年 2 月 15 日发布。这被认为是第一个官方稳定版本,并且 JetBrains 已准备从该版本开始的长期向后兼容性。

    在 Google I/O 2017 中,Google 宣布在 Android 上为 Kotlin 提供支持。

    Kotlin设计的目的

    创建一种兼容Java的语言
    让它比Java更安全,能够静态检测常见的陷阱。如:引用空指针
    让它比Java更简洁,通过支持variable type inference,higher-order functions (closures),extension functions,mixins and first-class delegation等实现。
    让它比最成熟的竞争对手Scala语言更加简单

    java的缺陷:

    对象可以赋值null造成NPE
    受检异常(checked exception)
    属性getter,setter太烦
    接口不能有实现(java8 fixed)
    缺乏Lambda(java8 fixed)
    方法Overloading对可读性和动态调用造成伤害。
    语言层缺乏模块化支持
    并发支持很糟糕
    原始类型不是对象>

    Kotlin优势:

    创建一种兼容Java的语言
    让它比Java更安全,能够静态检测常见的陷阱。如:引用空指针
    让 它比Java更简洁,通过支持variable type inference,higher-order functions (closures),extension functions,mixins and first-class delegation等实现。

    语言特性

    轻量级:

    这一点对于Android来说非常重要。项目所需要的库应该尽可能的小。Android对于方法数量有严格的限制,Kotlin只额外增加了大约6000个方法。

    互操作:

    Kotlin可与Java语言无缝通信。这意味着我们可以在Kotlin代码中使用任何已有的Java库;因此,即便这门语言还很年轻,但却已经可以使用成百上千的库了。除此之外,Kotlin代码还可以为Java代码所用,这意味着我们可以使用这两种语言来构建软件。你可以使用Kotlin开发新特性,同时使用Java实现代码基的其他部分。

    强类型:

    我们很少需要在代码中指定类型,因为编译器可以在绝大多数情况下推断出变量或是函数返回值的类型。这样就能获得两个好处:简洁与安全。

    Null安全:

    Java最大的一个问题就是null。如果没有对变量或是参数进行null判断,那么程序当中就有可能抛出大量的NullPointerException,然而在编码时这些又是难以检测到的。Kotlin使用了显式的null,这会强制我们在必要时进行null检查。

    适用平台

    只要能用Java的地方就能用Kotlin, Kotlin支持所有主要的开发工具以及服务,比如:
    * IntelliJ IDEA、Android Studio和Eclipse;
    * Maven、Gradle和Ant;
    * spring Boot(Kotlin 支持今天正式发布!);
    * GitHub,Slack,甚至Minecraft。 


    Kotlin VS Java


    语法简单不啰嗦

    Kotlin的一个主要优点是它的简洁。 你用更少的代码获得更多的功能。

    ① Kotlin 支持类型推断,没有 Java 那样的啰嗦。
    
    ② 用 var 表示变量,val 表示常量更加的简洁
    
    ③ 方法也很简单,连 function 都缩写成了 fun
    
    ④ 类的继承和实现很简单,使用:即可
    
    ⑤ Kotlin 每个句子都不需要加分号 (;)

    避免空指针异常

    在许多编程语言中最大的痛苦 - 空指针异常。 但是使用Kotlin,这个问题得到了很好的解决

    ① 在类型上的处理,即在类型后面加上?,即表示这个变量或参数以及返回值可以为 null,否则不允许为变量参数赋值为 null 或者返回 null
    
    ② 对于一个可能是 null 的变量或者参数,在调用对象方法或者属性之前,需要加上?,否则编译无法通过。

    支持方法拓展

    Kotlin有一个聪明的解决方案 - 扩展功能 ,帮助你摆脱所有的util类一劳永逸。扩展函数几乎是一个通常的Kotlin函数。 但是当你声明它,你需要指定的实例将具有扩展功能的类。
    
    注意:Kotlin 的方法扩展并不是真正修改了对应的类文件,而是在编译器和 IDE 方面做得处理。使我们看起来像是扩展了方法。

    高阶函数, 函数式编程支持

    所谓的高阶函数就是:可以接受函数作为参数,也可以返回函数作为结果。
    
    Kotlin 支持了 Streams API 和方法引用,这样函数式编程更加方便。比如下面的代码就是我们结合 Jsoup,来抓取某个 proxy 网站的数据,代码更加简单,实现起来也快速。

    关于性能

    Kotlin 的执行效率和 Java 代码的执行效率理论上一致的。有时候 Kotlin 可能会显得高一些。比如 Kotlin 提供了方法的 inline 设置,可以设置某些高频方法进行 inline 操作,减少了运行时的进栈出栈和保存状态的开销。

    与Java互操作

    Kotlin 在设计时就考虑了 Java 互操作性。可以从 Kotlin 中自然地调用现存的 Java 代码,并且在 Java 代码中也可以 很顺利地调用 Kotlin 代码。

    总结

    Kotlin的特性有很多,总的来说, Kotlin这门语言简化了Java , 完全是从一个是实用派的角度,而不是学院派的角度。
    
    相比于JRuby , Jython这些一移植到JVM上的语言, Kotlin 和Java 和互操作感觉更加自然。
    
    
    每个语言的流行都需要一个引爆点,就像Ruby on Rails 引爆了Ruby 一样, Android 也许就是之前不那么流行的Kotlin的引爆点。

    这里有一篇不错的入门实战教程,非常简单:http://www.jianshu.com/p/cf1f96c56150

    Kotlin这里就不说了,太乏味了,最后一句话总结一下kotlin

    Android届的Swift(请深刻理解其中的含义)


    Kotlin VS Swift


    下面是一些关于Swift和Kotlin语法和细节上的区别,出自网络!

    Hello World

    Swift

    print("Hello, world!")

    kotlin

    println("Hello, world!")

    Variables And Constants

    Swift

    var myVariable = 42
    myVariable = 50
    let myConstant = 42

    kotlin

    var myVariable = 42
    myVariable = 50
    val myConstant = 42

    Explicit Types

    Swift

    let explicitDouble: Double = 70

    kotlin

    val explicitDouble: Double = 70.0

    Type Coercion

    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

    String Interpolation

    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."

    Range Operator

    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

    Arrays

    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"

    Maps

    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"

    Empty Collections

    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")

    Tuple Return

    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()

    Function Type

    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

    Map

    Swift

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

    kotlin

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

    Sort

    Swift

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

    kotlin

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

    Named Arguments

    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)

    Declaration

    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."
    }

    Usage

    Swift

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

    kotlin

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

    Subclass

    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()

    Checking Type

    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
    }
    }

    Pattern Matching

    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")
    }

    Downcasting

    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}")
    }
    }

    Protocol

    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())
    }

    Extensions

     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"


    结尾:

    各位Android的同仁们,是时候了,不管是为了喜好还是为了以后的规划,你都应该停下手上的活,抽出一切空余时间进攻kotlin,相信我,不学你会后悔的,哈哈!





    展开全文
  • Swift 的语法与 Kotlin 有很多相似之处,整理了一些 SwiftKotlin 的对比,下面是一些例子,大家不妨来看看。可以说掌握了kotlin 再去看swift简直爽的不要不要的。学习成本大大降低。 Hello World 变量和常量 ...

    Swift 的语法与 Kotlin 有很多相似之处,整理了一些 Swift 和 Kotlin 的对比,下面是一些例子,大家不妨来看看。可以说掌握了kotlin 再去看swift简直爽的不要不要的。学习成本大大降低。


    Hello World

    变量和常量

    显式类型

    强制类型转换

    字符串插值

    范围操作符

    区域操作符(for while等)

    数组

    map

    空集合

    函数

    返回值

    参数的变量数目

    函数类型

    遍历

    排序

    命名参数

    类的声明

    类的用法

    子类

    类型检查

    模式匹配

    类型向下转换

    协议

    扩展


    最后放一张完整的图

    展开全文
  • 圆栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAI苹果的Swift和安卓开发者喜欢的Kotlin,是近年来增长最快的两种编程语言。据分析公司RedMonk统计,...
        
    圆栗子 发自 凹非寺 
    量子位 出品 | 公众号 QbitAI

    苹果的Swift和安卓开发者喜欢的Kotlin,是近年来增长最快的两种编程语言。

    640?wx_fmt=png

    据分析公司RedMonk统计,2014年诞生的Swift,跻身热度榜单Top 15,是所有语言中用时最短的。最好成绩是第10名。

    而2016年发布的Kotlin,转年1月便从65名飞到50名,如今已经进入Top 30

    640?wx_fmt=jpeg

    不过,RedMonk发现最近几个月,两者的排名没有继续加速向前,反而出现了回落

    扶摇直上模式:已停用

    从2011年起,RedMonk便一直追踪程序猿对各种语言的兴趣。

    热度榜单是依据GitHub (表示使用度) 和Stack Overflow (表示讨论度) 来排列的,每年发布两次。

    640?wx_fmt=jpeg

    今年的6月榜终于在8月姗姗迟来:

    1 JavaScript
    2 Java
    3 Python
    4 PHP
    5 C#
    6 C++
    7 CSS
    8 Ruby
    9 C
    9 Objective-C
    11 Swift
    12 Scala
    12 Shell
    14 Go
    14 R
    16 TypeScript
    17 PowerShell
    18 Perl
    19 Haskell
    20 Lua

    Swift从1月的10名下降到6月的11名;Kotlin则从27名下降到28名

    也就是说,这些语言的用户增长,可能开始放缓了。

    虽然,RedMonk提醒看榜观众,一名两名的波动并不足以说明“开始下滑”的趋势。但至少,当初的扶摇直上已经不再。

    640?wx_fmt=png

    一个合理解释是,每一种语言在诞生初期,通常涨势迅猛,一阵风过之后,便趋于平稳 (上图只是举栗,并非基于榜单真实数据) 。

    世界是平稳的

    事实上,RedMonk语言榜单,也并没有出现过非常激烈的变化,且约接近顶端就越平稳。

    1 JavaScript
    2 Java
    3 PHP
    4 Python
    5 C#

    这是稳坐Top 5的五种语言,自2016年开始就没有变过。

    WIRED记者Klint Finley写到,十年为期。面对一种新生的编程语言,程序猿需要时间来感受。10年过后,大家的决定基本都做好了。

    他说,开发者的世界会有激荡,但每次不会超过这个期限。

    世界是你们的

    新的语言削弱老的语言,即便前辈稳固的地位无法撼动,新的语言还是会改变开发者的世界。

    640?wx_fmt=jpeg

    2017年,得到谷歌鼎力支持的Kotlin一跃而起,虽然没有进入Top 20,也依然让大量安卓开发者,转投了它的怀抱。

    未来,大概也是在年轻人的手上吧。

    活动推荐

    640?wx_fmt=jpeg

    加入社群

    量子位AI社群19群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;


    此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


    进专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)

    诚挚招聘

    量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

    640?wx_fmt=jpeg

    量子位 QbitAI · 头条号签约作者

    վ'ᴗ' ի 追踪AI技术和产品新动态

    展开全文
  • KotlinSwift的一些异同点
  • Kotlin VS Swift

    2017-10-24 09:26:07
    对比KotlinSwift
  • 行业分析公司Redmonk发布了2018年第一季度编程语言排行榜。排名靠前的编程语言应该不会让人吃惊,前5名分别是...排名4到9的编程语言分别是C++、CSS、Ruby和C,Swift和Objective-C排名第10。Swift的位次值得一提,特...
  • 一位国外的程序员认为 Swift 的语法与 Kotlin 相似,并整理了一些 SwiftKotlin 的对比,下面是一些例子,大家不妨也看看。 http://www.oschina.net/news/85013/swift-is-like-kotlin
  • Kotlin, Android的Swift

    2016-02-27 16:55:32
    Kotlin, Android的Swift苹果已经用Swift代替Objective-C,一种古老的语言,来进行iOS的开发了。明显Android开发也有这个趋势。虽然现在已经可以选择Scala或者Groovy等基于JVM的语言开发Android应用来尝尝鲜,但是...
  • SwiftKotlin:将Swift代码转换为Kotlin的工具非常简单快捷
  • 说到Android开发领域,现在最火的话题莫过于Kotlin和Flutter。从百度搜索指数也可以看到I/O大会之后,这两个关键词搜索热度直线上升。虽说Kotlin早已被...
  • swift-is-like-kotlin, 比较Swift语法与 Kotlin Swift就像 Kotlin页面:http://nilhcem.github.io/swift-is-like-kotlin/以编程方式灵感来自于 swift-is-like-go,并从 swiftislikescala 视觉灵感灵感
  • 现在开发 App 的方式非常多,原生、ReactNative、Flutter 都是不错的选择。那你有没有关注过,使用不同的方式,编译生成的 Apk ,大小是否会有什么影响呢?本文就以一个最简单的 Hello World App,来看看不同的框架...
  • 今天在CSDN首页偶然看到一个贴子JetBrains正式发布Kotlin 1.0:JVM和Android上更好用的语言 看完后,感觉Kotlin语法很简洁,有一系列动态语言的特点,Lambda表达式,高阶函数,闭包,甚至有静态语言的类型检查,最...
  • Swift vs. Kotlin 漫谈之扩展篇转载自公众号 KotlinThree 里的一篇文章:...
  • Kotlin 君和 Swift 君在一个团队一起开发已经很久了,由于平台的差异性,他们经常会进行一些技术上的交流(PK),「Kotlin vs. Swift」系列就是他们在互相切磋时的语录。内容会由简及深,慢慢深入。 技术漫谈 Swift:...
  • Kotlin-Android的Swift

    2015-12-02 23:52:39
    Kotlin-Android的SwiftKotlin介绍最近在学习一门新的语言Kotlin, Google拟用Kotlin取代Java进行Android开发。众所周知,苹果用swift取代Objective-C进行Swift开发,Kotlin对于Android就好比swfit对于iOS一样。不过...
1 2 3 4 5 ... 20
收藏数 3,534
精华内容 1,413