IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【100 种语言速成】第 5 节:Kotlin -> 正文阅读

[移动开发]【100 种语言速成】第 5 节:Kotlin

给大家安利一个免费且实用的计算机知识刷题(面经大全)网站,👉点击跳转到网站

Kotlin 之于 Java 就像 ES6 之于旧式 JavaScript。很多人都被 JavaScript 引擎(如浏览器)或 JVM(如 Android)所困。他们的母语很糟糕,但是使用完全非母语的语言会导致与本地 API 交互的巨大复杂性。于是就创建了折衷的解决方案,比如用于 JavaScript 的 ES6 和用于 Java 的 Kotlin。Kotlin 在 Android 开发人员中特别受欢迎,但你可以在任何可以使用 JVM 的地方使用它,而且现在真的很难找到使用“纯 Java”的正当理由。

Hello, World

我们可以从最基本的程序开始!这没什么不寻常的,除非你记得它在普通 Java 中有多糟糕:

fun main() {
  println("Hello, World!")
}

对于一个合理的 hello world,整个事件花费的时间太长了:

$ kotlinc hello.kt -include-runtime -d hello.jar && java -jar hello.jar

Kotlin 有某种“脚本模式”和 REPL,它可以与你的 IDE 集成,所以对于每天编写它的人来说,这可能不是问题。

我在代码库中包含了一个允许 ./run file.kt 的简短脚本。

斐波那契

我们需要一些类型注释,感觉它们应该是可推断的,但它们都是完全合理的代码。范围循环语法是完全可读的,总体而言,考虑到它基本上是 Java 底层,它的可读性和简洁的代码令人震惊。

fun fib(n: Int): Int {
  if (n < 3) {
    return 1
  } else {
    return fib(n - 1) + fib(n - 2)
  }
}

fun main() {
  for (i in 1..30) {
    println(fib(i))
  }
}

FizzBuzz

Kotlin 抛弃了 C 风格 switch,引入了 when 语法,这有点类似于 Haskell 风格的模式匹配。

fun fizzbuzz(n: Int): String {
  return when {
    n % 15 == 0 -> "FizzBuzz"
    n % 3 == 0 -> "Fizz"
    n % 5 == 0 -> "Buzz"
    else -> n.toString()
  }
}

fun main() {
  for (i in 1..100) {
    println(fizzbuzz(i))
  }
}

统一码

由于 Kotlin 在底层基本上就是 Java,它仍然不能在基本平面之外正确处理 Unicode,所以最后一个答案是错误的:

fun main() {
  println("Hello".length)
  println("?ó?w".length)
  println("💩".length)
}

输出

5
4
2

数据类

Java 使得处理几乎任何类型的数据都变得非常乏味。每个简单的数据类都需要显式的构造函数、getter、setter、hashcode 和 equals。你甚至不能使用==, 你需要运行.equals(),但如果其中一方为空,那将真的崩溃,所以你需要先对双方进行空检查,然后.equals()。基本数据操作的样板数量太荒谬了。

Kotlin 避免了几乎所有这些废话:

data class Point(val x: Double, val y: Double) {
  fun length() = Math.sqrt(x * x + y * y)
}

fun main() {
  val a = listOf(1, 2, 3)
  val b = listOf(1, 2, 3)
  val c = Point(30.0, 40.0)
  val d = Point(30.0, 40.0)

  println(a == b)
  println(c == d)
  println(null == d)
  println("len of ${c} is ${c.length()}")
}

输出

true
true
false
len of Point(x=30.0, y=40.0) is 50.0

我们仍然需要使用listOf(1, 2, 3)而不是[1, 2, 3],如果我们尝试了它会抱 Point(30, 40),但这还不错。

函数式编程

我们如何在 Kotlin 中执行 mapfilterreduce ?它看起来像带有{ arguments -> ... }块的 Ruby。有趣的是,如果您传递一个不带任何参数的块,它会将其视为具有默认值 { it -> ... }。 这是一个罕见的特性,在 Perl 中最为显着,它被称为更神秘的 $_

fun main() {
  val alist = listOf(1, 2, 3, 4, 5)

  println(alist.map{ x -> x * 2 })
  println(alist.map{ it * 2 })
  println(alist.filter{ it % 2 == 1 })
  println(alist.reduce{ a, b -> a + b })
}

输出

[2, 4, 6, 8, 10]
[2, 4, 6, 8, 10]
[1, 3, 5]
15

你应该使用 Java 吗

通常我会问“你应该使用 Kotlin 吗”,但那是在向后看。真正的问题是“你应该使用 Java”吗?答案是明确而明确的 NO!如果你需要在 JVM 上运行某些东西并与“Java”生态系统交互,那么你可以做到这一点,而无需触及语言的那个可悲的借口。Kotlin 之于 Java 就像 ES6 之于旧式 JavaScript 一样,但这里的改进要大得多。旧式 JavaScript 已经死了,完全被 ES6+ JavaScript 取代,这也是 Java 的命运。

还有其他 JVM 语言,如 JRuby、Clojure、Scala 等,但它们本质上是不同的语言,具有不同的语义和不同的互操作性故事。Kotlin 只是固定 Java,仅此而已。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 10:04:11  更:2022-05-14 10:04:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 1:50:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码