久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【100 種語(yǔ)言速成】第 5 節(jié):Kotlin

 海擁 2022-05-12
  • 💂 個(gè)人網(wǎng)站:【 海擁 】【 摸魚小游戲
  • 🤟 風(fēng)趣幽默的人工智能學(xué)習(xí)網(wǎng)站:👉人工智能
  • 💅 想尋找共同學(xué)習(xí)交流的小伙伴,請(qǐng)點(diǎn)擊【全棧技術(shù)交流群
  • 💬 免費(fèi)且實(shí)用的計(jì)算機(jī)相關(guān)知識(shí)題庫(kù):👉進(jìn)來(lái)逛逛

給大家安利一個(gè)免費(fèi)且實(shí)用的計(jì)算機(jī)知識(shí)刷題(面經(jīng)大全)網(wǎng)站,👉點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站,。

Kotlin 之于 Java 就像 ES6 之于舊式 JavaScript。很多人都被 JavaScript 引擎(如瀏覽器)或 JVM(如 Android)所困,。他們的母語(yǔ)很糟糕,但是使用完全非母語(yǔ)的語(yǔ)言會(huì)導(dǎo)致與本地 API 交互的巨大復(fù)雜性,。于是就創(chuàng)建了折衷的解決方案,比如用于 JavaScript 的 ES6 和用于 Java 的 Kotlin。Kotlin 在 Android 開發(fā)人員中特別受歡迎,但你可以在任何可以使用 JVM 的地方使用它,而且現(xiàn)在真的很難找到使用“純 Java”的正當(dāng)理由,。

Hello, World

我們可以從最基本的程序開始!這沒什么不尋常的,除非你記得它在普通 Java 中有多糟糕:

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

對(duì)于一個(gè)合理的 hello world,整個(gè)事件花費(fèi)的時(shí)間太長(zhǎng)了:

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

Kotlin 有某種“腳本模式”和 REPL,它可以與你的 IDE 集成,所以對(duì)于每天編寫它的人來(lái)說(shuō),這可能不是問(wèn)題,。

我在代碼庫(kù)中包含了一個(gè)允許 ./run file.kt 的簡(jiǎn)短腳本。

斐波那契

我們需要一些類型注釋,感覺它們應(yīng)該是可推斷的,但它們都是完全合理的代碼,。范圍循環(huán)語(yǔ)法是完全可讀的,總體而言,考慮到它基本上是 Java 底層,它的可讀性和簡(jiǎn)潔的代碼令人震驚,。

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 風(fēng)格 switch,引入了 when 語(yǔ)法,這有點(diǎn)類似于 Haskell 風(fēng)格的模式匹配。

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

統(tǒng)一碼

由于 Kotlin 在底層基本上就是 Java,它仍然不能在基本平面之外正確處理 Unicode,所以最后一個(gè)答案是錯(cuò)誤的:

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

輸出

5
4
2

數(shù)據(jù)類

Java 使得處理幾乎任何類型的數(shù)據(jù)都變得非常乏味,。每個(gè)簡(jiǎn)單的數(shù)據(jù)類都需要顯式的構(gòu)造函數(shù),、getter、setter,、hashcode 和 equals,。你甚至不能使用==, 你需要運(yùn)行.equals(),但如果其中一方為空,那將真的崩潰,所以你需要先對(duì)雙方進(jìn)行空檢查,然后.equals()?;緮?shù)據(jù)操作的樣板數(shù)量太荒謬了,。

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

我們?nèi)匀恍枰褂?code>listOf(1, 2, 3)而不是[1, 2, 3],如果我們嘗試了它會(huì)抱 Point(30, 40),但這還不錯(cuò)。

函數(shù)式編程

我們?nèi)绾卧?Kotlin 中執(zhí)行 map,、filterreduce ?它看起來(lái)像帶有{ arguments -> ... }塊的 Ruby,。有趣的是,如果您傳遞一個(gè)不帶任何參數(shù)的塊,它會(huì)將其視為具有默認(rèn)值 { it -> ... }。 這是一個(gè)罕見的特性,在 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

你應(yīng)該使用 Java 嗎

通常我會(huì)問(wèn)“你應(yīng)該使用 Kotlin 嗎”,但那是在向后看,。真正的問(wèn)題是“你應(yīng)該使用 Java”嗎?答案是明確而明確的 NO!如果你需要在 JVM 上運(yùn)行某些東西并與“Java”生態(tài)系統(tǒng)交互,那么你可以做到這一點(diǎn),而無(wú)需觸及語(yǔ)言的那個(gè)可悲的借口。Kotlin 之于 Java 就像 ES6 之于舊式 JavaScript 一樣,但這里的改進(jìn)要大得多,。舊式 JavaScript 已經(jīng)死了,完全被 ES6+ JavaScript 取代,這也是 Java 的命運(yùn),。

還有其他 JVM 語(yǔ)言,如 JRuby、Clojure,、Scala 等,但它們本質(zhì)上是不同的語(yǔ)言,具有不同的語(yǔ)義和不同的互操作性故事,。Kotlin 只是固定 Java,僅此而已。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多