亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

分分鐘學會Kotlin語言(Learn kotlin in Y Minutes)

2024-07-21 23:03:36
字體:
來源:轉載
供稿:網友
谷歌宣布kotlin成安卓開發一級語言以后,kotlin大熱,Kotlin是JVM上的靜態類型的編程語言,它是100%兼容的java。

廢話少說,上代碼,由于代碼太長,分兩段:

  1. //這是單行注釋 // 
  2. /* 
  3. 這是多行注釋 
  4. */ 
  5. // 這和Java的 "package" 差不多. 
  6. package com.learnxinyminutes.kotlin 
  7.  
  8. /* 
  9. Kotlin程序入口函數是名為"main". 
  10. 這個函數的入參是包含命令行參數的數組 
  11. */ 
  12. fun main(args: Array<String>) { 
  13.     /* 
  14.     聲明值是使用"var" 或 "val". 
  15.     "val"是一旦分配值后就不能變,不變量,相反"vars" 是聲明變量 
  16.     */ 
  17.     val fooVal = 10 // 之后就不能再給fooVal分配其他值了 
  18.     var fooVar = 10 
  19.     fooVar = 20 // fooVar是變量,能夠再次分配值 
  20.  
  21.     /* 
  22.     大多數情況, Kotlin能夠決定一個變量的類型是什么。 
  23.     這樣我們不必顯式明確每次去指定變量類型了。 
  24.     我們可以通過如下方式明確定義變量類型: 
  25.     */ 
  26.     val foo : Int = 7 
  27.  
  28.     /* 
  29.     Kotlin包含兩種類型的字符串:與Java字符串相同的escaped strings和新的raw strings, 
  30.     escaped strings中的換行符是/n字符串和Java中一樣定義, 
  31.     反斜杠是換行符 
  32.     */ 
  33.     val fooString = "My String Is Here!" 
  34.     val barString = "Printing on a new line?/nNo Problem!" 
  35.     val bazString = "Do you want to add a tab?/tNo Problem!" 
  36.     println(fooString) 
  37.     println(barString) 
  38.     println(bazString) 
  39.  
  40.     /* 
  41.     行字符串(raw strings)由三個引號分隔 ("""). 
  42.     顧名思義能包含新的一行和其他任何字符。 
  43.    下面是給fooRawString賦值的是一個函數helloWorld,直至第四行的三個引號才表示賦值結束 
  44.     */ 
  45.     val fooRawString = ""
  46. fun helloWorld(val name : String) { 
  47.    println("Hello, world!"
  48. ""
  49.     println(fooRawString) 
  50.  
  51.     /* 
  52.     字符串能保護模板表達式 
  53.     模板表達式是以美元符號開始($). 
  54.     */ 
  55.     val fooTemplateString = "$fooString has ${fooString.length} characters" 
  56.     println(fooTemplateString) 
  57.  
  58.     /* 
  59.     對于一個變量是空必須明確指定其是nullable. 
  60.     變量可以在其類型后面追加問號?指定其是nullable, 
  61.     然后使用?.操作符訪問這個nullable的變量 
  62.     也可以使用?: 操作符在其為null時為其分配一種值。 
  63.     */ 
  64.     var fooNullable: String? = "abc" 
  65.     println(fooNullable?.length) // => 3 
  66.     println(fooNullable?.length ?: -1) // => 3 
  67.     fooNullable = null 
  68.     println(fooNullable?.length) // => null 
  69.     println(fooNullable?.length ?: -1) // => -1 
  70.  
  71.     /* 
  72.     函數是使用"fun" 定義 
  73.     函數參數在函數名后面的括號中指定。函數參數可以有默認值。如果需要,函數返回類型在參數之后指定。 
  74.     */ 
  75.     fun hello(name: String = "world"): String { 
  76.         return "Hello, $name!" 
  77.     } 
  78.     println(hello("foo")) // => Hello, foo! 
  79.     println(hello(name = "bar")) // => Hello, bar! 
  80.     println(hello()) // => Hello, world! 
  81.  
  82.     /* 
  83.     一個函數參數可以使用"vararg" 標注, 
  84.     能夠讓許多參數傳遞進入函數。 
  85.     */ 
  86.     fun varargExample(vararg names: Int) { 
  87.         println("Argument has ${names.size} elements"
  88.     } 
  89.     varargExample() // => Argument has 0 elements 
  90.     varargExample(1) // => Argument has 1 elements 
  91.     varargExample(1, 2, 3) // => Argument has 3 elements 
  92.  
  93.     /* 
  94.     當一個函數由單個表達式組成時,那么這個卷括號可以被省略。函數內容體是在等于號=之后指定。 
  95.     */ 
  96.     fun odd(x: Int): Boolean = x % 2 == 1 
  97.     println(odd(6)) // => false 
  98.     println(odd(7)) // => true 
  99.  
  100.     // 如果返回類型能被推斷,我們就不必指定了。 
  101.     fun even(x: Int) = x % 2 == 0 
  102.     println(even(6)) // => true 
  103.     println(even(7)) // => false 
  104.  
  105.     // 函數能用函數作為參數,返回頁首函數。 
  106.     fun not(f: (Int) -> Boolean): (Int) -> Boolean { 
  107.         return {n -> !f.invoke(n)} 
  108.     } 
  109.     // Named函數能使用 :: 作為參數指定. 
  110.     val notOdd = not(::odd) 
  111.     val notEven = not(::even) 
  112.     // Lambda 表達式能指定為參數 
  113.     val notZero = not {n -> n == 0} 
  114.     /* 
  115.     如果一個lambda僅有一個參數,它的聲明可以被忽視(隨著 ->一起). 
  116.     單個參數名將是"it". 
  117.     */ 
  118.     val notPositive = not {it > 0} 
  119.     for (i in 0..4) { 
  120.         println("${notOdd(i)} ${notEven(i)} ${notZero(i)} ${notPositive(i)}"
  121.     } 
  122.  
  123.     //  "class" 是用來聲明類 
  124.     class ExampleClass(val x: Int) { 
  125.         fun memberFunction(y: Int): Int { 
  126.             return x + y 
  127.         } 
  128.  
  129.         infix fun infixMemberFunction(y: Int): Int { 
  130.             return x * y 
  131.         } 
  132.     } 
  133.     /* 
  134.     創建新的實例使用構造器 
  135.     Kotlin沒有 "new"  
  136.     */ 
  137.     val fooExampleClass = ExampleClass(7) 
  138.     // 成員函數能使用點符號調用 
  139.     println(fooExampleClass.memberFunction(4)) // => 11 
  140.  
  141.     /* 
  142.     如果一個函數被"infix"標注,能使用infix notation調用 
  143.     下面fooExampleClass infixMemberFunction 4等同于 
  144. fooExampleClass.memberFunction(4) 
  145.     */ 
  146.     println(fooExampleClass infixMemberFunction 4) // => 28 
  147.  
  148.     /* 
  149.    數據類是創建只包含數據的精確方式. 
  150.      "hashCode"/"equals" 和 "toString" 等方法會自動產生。 
  151.     */ 
  152.     data class DataClassExample (val x: Int, val y: Int, val z: Int) 
  153.     val fooData = DataClassExample(1, 2, 4) 
  154.     println(fooData) // => DataClassExample(x=1, y=2, z=4) 
  155.  
  156.     // 數據類沒有 "copy" 函數 
  157.     val fooCopy = fooData.copy(y = 100) 
  158.     println(fooCopy) // => DataClassExample(x=1, y=100, z=4) 
  159.  
  160.     // 對象能被解構入多個變量。 
  161.     val (a, b, c) = fooCopy 
  162.     println("$a $b $c"// => 1 100 4 
  163.  
  164.     // 解構 "for" 循環 
  165.     for ((a, b, c) in listOf(fooData)) { 
  166.         println("$a $b $c"// => 1 100 4 
  167.     } 
  168.  
  169.     val mapData = mapOf("a" to 1, "b" to 2) 
  170.     // Map.Entry 也能解構 
  171.     for ((key, value) in mapData) { 
  172.         println("$key -> $value"
  173.     } 
  174.  
  175.     //  "with" 函數類似JavaScript "with" 語句. 
  176.     data class MutableDataClassExample (var x: Int, var y: Int, var z: Int) 
  177.     val fooMutableData = MutableDataClassExample(7, 4, 9) 
  178.     with (fooMutableData) { 
  179.         x -= 2 
  180.         y += 2 
  181.         z-- 
  182.     } 
  183.     println(fooMutableData) // => MutableDataClassExample(x=5, y=6, z=8) 
  184.  
  185.     /* 
  186.     使用 "listOf" 函數創建集合 
  187.     集合是不可變的,元素不能增加和移走 
  188.     */ 
  189.     val fooList = listOf("a""b""c"
  190.     println(fooList.size) // => 3 
  191.     println(fooList.first()) // => a 
  192.     println(fooList.last()) // => c 
  193.     // list元素可通過索引訪問。 
  194.     println(fooList[1]) // => b 
  195.  
  196.     // 一個可變的 list能使用 "mutableListOf" 函數創建 
  197.     val fooMutableList = mutableListOf("a""b""c"
  198.     fooMutableList.add("d"
  199.     println(fooMutableList.last()) // => d 
  200.     println(fooMutableList.size) // => 4 
  201.  
  202.     // 使用 "setOf"  創建set 
  203.     val fooSet = setOf("a""b""c"
  204.     println(fooSet.contains("a")) // => true 
  205.     println(fooSet.contains("z")) // => false 
  206.  
  207.     // 使用 "mapOf" f創建map 
  208.     val fooMap = mapOf("a" to 8, "b" to 7, "c" to 9) 
  209.     // Map values can be accessed by their key. 
  210.     println(fooMap["a"]) // => 8 
  211.  
  212.      //待續 
  213. /* 
  214.     使用 "generateSequence" f函數創建序列號,它是懶賦值的集合,只有使用時才真正賦值。 
  215.     */ 
  216.     val fooSequence = generateSequence(1, { it + 1 }) 
  217.     val x = fooSequence.take(10).toList() 
  218.     println(x) // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
  219.  
  220.     // 產生 斐波納契案例 
  221.     fun fibonacciSequence(): Sequence<Long> { 
  222.         var a = 0L 
  223.         var b = 1L 
  224.  
  225.         fun next(): Long { 
  226.             val result = a + b 
  227.             a = b 
  228.             b = result 
  229.             return a 
  230.         } 
  231.  
  232.         return generateSequence(::next) 
  233.     } 
  234.     val y = fibonacciSequence().take(10).toList() 
  235.     println(y) // => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 
  236.  
  237.     // Kotlin提供colletion的高階函數。 
  238.     val z = (1..9).map {it * 3} 
  239.                   .filter {it < 20} 
  240.                   .groupBy {it % 2 == 0} 
  241.                   .mapKeys {if (it.key) "even" else "odd"
  242.     println(z) // => {odd=[3, 9, 15], even=[6, 12, 18]} 
  243.  
  244.     // "for" 循環 
  245.     for (c in "hello") { 
  246.         println(c) 
  247.     } 
  248.  
  249.     // "while" 循環是和其他語言一樣 
  250.     var ctr = 0 
  251.     while (ctr < 5) { 
  252.         println(ctr) 
  253.         ctr++ 
  254.     } 
  255.     do { 
  256.         println(ctr) 
  257.         ctr++ 
  258.     } while (ctr < 10) 
  259.  
  260.     /* 
  261.     "if" 能表達返回一個值的表達式 
  262.     */ 
  263.     val num = 5 
  264.     val message = if (num % 2 == 0) "even" else "odd" 
  265.     println("$num is $message"// => 5 is odd 
  266.  
  267.     // "when" 能作為"if-else if" 替換 
  268.     val i = 10 
  269.     when { 
  270.         i < 7 -> println("first block"
  271.         fooString.startsWith("hello") -> println("second block"
  272.         else -> println("else block"
  273.     } 
  274.  
  275.     // "when" 能帶一個參數 
  276.     when (i) { 
  277.         0, 21 -> println("0 or 21"
  278.         in 1..20 -> println("in the range 1 to 20"
  279.         else -> println("none of the above"
  280.     } 
  281.  
  282.     // "when" 能用在返回一個值的函數can be used as a function that returns a value. 
  283.     var result = when (i) { 
  284.         0, 21 -> "0 or 21" 
  285.         in 1..20 -> "in the range 1 to 20" 
  286.         else -> "none of the above" 
  287.     } 
  288.     println(result) 
  289.  
  290.     /* 
  291.     使用"is" 操作符檢查類型,如果一個對象傳入類型檢查,就無需再次明確casting 它了 
  292.     */ 
  293.     fun smartCastExample(x: Any) : Boolean { 
  294.         if (x is Boolean) { 
  295.             // x is automatically cast to Boolean 
  296.             return x 
  297.         } else if (x is Int) { 
  298.             // x is automatically cast to Int 
  299.             return x > 0 
  300.         } else if (x is String) { 
  301.             // x is automatically cast to String 
  302.             return x.isNotEmpty() 
  303.         } else { 
  304.             return false 
  305.         } 
  306.     } 
  307.     println(smartCastExample("Hello, world!")) // => true 
  308.     println(smartCastExample("")) // => false 
  309.     println(smartCastExample(5)) // => true 
  310.     println(smartCastExample(0)) // => false 
  311.     println(smartCastExample(true)) // => true 
  312.  
  313.     // Smartcast also works with when block 
  314.     fun smartCastWhenExample(x: Any) = when (x) { 
  315.         is Boolean -> x 
  316.         is Int -> x > 0 
  317.         is String -> x.isNotEmpty() 
  318.         else -> false 
  319.     } 
  320.  
  321.     /* 
  322.     Extensions是一個增加新函數到類的方式,類似 C# extension 方法 
  323.     */ 
  324.     fun String.remove(c: Char): String { 
  325.         return this.filter {it != c} 
  326.     } 
  327.     println("Hello, world!".remove('l')) // => Heo, word! 
  328.  
  329.     println(EnumExample.A) // => A 
  330.     println(ObjectExample.hello()) // => hello 
  331.  
  332. // Enum類似Java enum類型 
  333. enum class EnumExample { 
  334.     A, B, C 
  335.  
  336. /* 
  337. "object"能被用于創建單例對象,不能初始化它,但是能使用名稱引向它。類似 Scala singleton objects. 
  338. */ 
  339. object ObjectExample { 
  340.     fun hello(): String { 
  341.         return "hello" 
  342.     } 
  343.  
  344. fun useObject() { 
  345.     ObjectExample.hello() 
  346.     val someRef: Any = ObjectExample // we use objects name just as is 


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲人电影| 日本久久久久久久久| 国产精品亚洲аv天堂网| 2019中文字幕在线免费观看| 久久伊人精品天天| 午夜精品一区二区三区在线播放| 欧美一级视频免费在线观看| 亚洲视频精品在线| 欧美日本高清视频| 成人黄色av网站| 欧美精品在线看| 黄网站色欧美视频| 91久久久久久| 日韩电影免费观看中文字幕| 成人深夜直播免费观看| 亚洲精品久久久久国产| 亚洲情综合五月天| 亚洲天堂网站在线观看视频| www国产精品com| 久久影院在线观看| 久久国产精品久久国产精品| 国产精品国产自产拍高清av水多| 中文字幕日韩欧美精品在线观看| 国产精品亚洲自拍| 色无极亚洲影院| 国产精品久久久久久久天堂| 在线观看91久久久久久| 日本免费久久高清视频| 久久久精品中文字幕| 久久影视电视剧免费网站清宫辞电视| 亚洲成色999久久网站| 亚洲成人aaa| 国产91热爆ts人妖在线| 97久久久久久| 亚洲精品色婷婷福利天堂| 91色在线视频| 亚洲精品自产拍| 日韩精品极品视频| 亚洲欧洲美洲在线综合| 久久久久久av| 91久久在线视频| 91亚洲一区精品| 欧美激情一二三| 91免费人成网站在线观看18| 亚洲一区二区三区香蕉| 亚洲女同性videos| 国产精品国产三级国产aⅴ浪潮| 日韩中文av在线| 久久久精品影院| 国产精品一区二区三区毛片淫片| 青青在线视频一区二区三区| 夜夜嗨av色综合久久久综合网| 久久久久久国产三级电影| 日韩成人久久久| 国产91对白在线播放| 欧美美女15p| 亚洲欧美视频在线| 色综合色综合久久综合频道88| 午夜精品久久久99热福利| 久热精品视频在线| 综合久久五月天| 国产91精品视频在线观看| 欧美综合在线第二页| 91在线中文字幕| 日本三级韩国三级久久| 亚洲精品国产精品久久清纯直播| 国产视频精品一区二区三区| 在线精品视频视频中文字幕| 奇米4444一区二区三区| 国产精品影院在线观看| 大胆欧美人体视频| 国产黑人绿帽在线第一区| 欧美国产日韩一区| 亚洲国产精品一区二区三区| 欧美一级在线亚洲天堂| 日韩免费视频在线观看| 成人免费看吃奶视频网站| 91高清在线免费观看| 欧美激情在线狂野欧美精品| 日韩一区二区久久久| 国产精品国模在线| 欧美日韩一区二区在线播放| 日本欧美一级片| 欧美性猛交xxxx免费看漫画| 亚洲大尺度美女在线| 亚洲第一精品夜夜躁人人爽| 欧美日韩亚洲视频| 精品国产91久久久久久| 欧美激情手机在线视频| 亚洲精品一区二区三区不| 欧美成在线视频| 精品久久久国产精品999| 欧美精品在线免费观看| 成人精品在线观看| 大桥未久av一区二区三区| 91国内免费在线视频| 91老司机在线| 欧美一区三区三区高中清蜜桃| 日本高清视频一区| 国产午夜精品美女视频明星a级| 黑人狂躁日本妞一区二区三区| 91久久国产婷婷一区二区| 国产va免费精品高清在线观看| 在线观看免费高清视频97| 国产精品一区电影| 136fldh精品导航福利| 日韩电影中文字幕在线观看| 国产精品91久久久| 国产成人一区二区| 国产成人高清激情视频在线观看| 日韩电影在线观看中文字幕| 欧美日韩在线视频观看| 亚洲精品电影网在线观看| 亚洲精品久久久一区二区三区| 成人久久18免费网站图片| 亚洲电影成人av99爱色| 成人在线激情视频| 欧美性xxxxx极品娇小| 国产成人av在线播放| 毛片精品免费在线观看| 日韩亚洲欧美中文在线| 国产精品一二三在线| 2019中文在线观看| 亚洲精品www久久久久久广东| 国产激情999| 国产精品天天狠天天看| 97精品在线视频| 日韩不卡中文字幕| 亚洲va欧美va国产综合久久| 伊人久久综合97精品| 成人羞羞国产免费| 亚洲日本欧美日韩高观看| 亚洲国产精品专区久久| 久久亚洲私人国产精品va| 亚洲国产精品999| 欧美午夜美女看片| 九九热在线精品视频| 国产成人中文字幕| 久久天天躁狠狠躁夜夜躁2014| 亚洲欧美中文字幕在线一区| 国产精品99久久久久久人| 久久久久久久久久久久av| 亚洲性xxxx| 精品久久中文字幕| 欧美性黄网官网| 日韩在线观看免费高清完整版| 亚洲色图18p| 国产成人久久久| 久久天天躁狠狠躁老女人| 亚洲高清久久网| 日韩av在线资源| 色噜噜狠狠狠综合曰曰曰88av| 亚洲精品一区二区三区不| 一区二区三区四区在线观看视频| 亚洲三级黄色在线观看| 日韩欧美主播在线| 日本国产精品视频| 91精品免费久久久久久久久| 欧美猛交ⅹxxx乱大交视频| 久久精品国产一区二区电影| 久久久www成人免费精品| 日韩av网址在线观看| 精品视频在线导航| 国产精自产拍久久久久久蜜|