kotlin基本語法

<pre>

classMainTestActivity : Activity() {
? ?  //當某個變量的值可以為null的時候,必須在聲明處的類型后添加?來標識該引用可為空。
? ?  override fun onCreate(savedInstanceState: Bundle?) {
? ? ? ?  super.onCreate(savedInstanceState)
? ? ? ?  setContentView(R.layout.main_test_activity)
? ? ? ?  kotlin_test.setText("kotlin測試")
? ? ? ?  
? ? ? ?  valtestButton= findViewById(R.id.kotlin_test_btn) as Button
? ? ? ?  testButton.setText("進行kotlin測試")
? ? ? ?  testButton.setOnClickListener {
? ? ? ? ? ?  Toast.makeText(this,"kotlin點擊事件",Toast.LENGTH_LONG).show()
? ? ? ?  }

? ? ? ?  //變量聲明:
? ? ? ?  //可以用關鍵字var聲明為可變的,否則使用只讀關鍵字val 
? ? ? ?  //一次賦值(只讀)的局部變量:
? ? ? ?  //int類型常量定義
? ? ? ?  val aConstant: Int =1000
? ? ? ?  val bConstant: Int =200
? ? ? ?  val cConstant: Int =300
? ? ? ?  
? ? ? ?  //可變變量:
? ? ? ?  var dVariable: Int
? ? ? ?  dVariable=5

? ? ? ?  Log.d("alen","sum is " + sum(aConstant,bConstant))
? ? ? ?  Log.d("alen","printSum is " + printSum(aConstant,bConstant,cConstant))

? ? ? ?  stringTemplate()
         printValue("4","6")
         printValue("4","")
         val length= getStringLength("nihao")
         Log.d("alen","length is " +length)
         loopForTest1()
         loopForTest2()
         whileForTest()
         Log.d("alen","msg is " + whenForTest("hello"))
         Log.d("alen","msg is " + whenForTest(1))
         mapForTest()
         setForDataClassTest()}?  
? ?  }
}
//使用字符串模板
fun stringTemplate(): Unit {
? ? var arg: Int =1
    val s1= "arg is$arg"
    Log.d("alen","s1 is " +s1)

    arg=2
    //模板中的任意表達式:
    var s2= "${s1.replace("is","was")}, but now arg is$arg"
    Log.d("alen","s2 is " +s2)
}
// 帶有兩個Int參數、返回Int的函數
funsum(arg1: Int,arg2: Int): Int {
? ? returnarg1 + arg2
}
// 函數返回無意義的值,Unit返回類型可以省略
funprintSum(arg1: Int,arg2: Int,arg3: Int): Unit {
? ? Log.d("alen","sum is " + (arg1 + arg2 + arg3))
}
// 把字符串轉為Int
fun parseInt(str: String): Int? {
? ? // try表達式
? ? try{
? ? ?  if(str !=null) {
? ? ? ? ?  returnstr.toInt()
? ? ?  }
? ? } catch (e: NumberFormatException) {
? ? ?  return null}return null
? ? }
}

funprintValue(str1: String,str2: String) {
? ? val result1: Int? = parseInt(str1)
? ? valr esult2: Int? = parseInt(str2)
? ? if(result1!=null&&result2!=null) {
? ? ?  Log.d("alen","value is " +result1*result2)
? ? } else {
? ? ?  Log.d("alen"," '$result1' or '$result2' is null")
? ? }
}
// 打印字符串的長度
fun getStringLength(obj: Any): Int? {
? ? if(obj is String) {
? ? ? ? return obj.length
? ? }
? ? return null
}
// 迭代
fun loopForTest1() {
? ? val items=listOf("item1","item2","item3")
? ? for(item in items) {
? ? ? ? Log.d("alen","item is " +item);
? ? }
}
// 通過索引值進行循環
fun loopForTest2() {
? ? val items=listOf("item1","item2","item3")
? ? //使用in運算符來檢測某個數字是否在指定區間內:
? ? for(index in items.indices) {
? ? ? ? Log.d("alen","item index is$index,value is${items[index]}")
? ? }
? ? 
? ? if(-1 !in items.indices) {
? ? ?  Log.d("alen","-1 not in range")
? ? }
? ? 
? ? // 從9到0開始迭代,步長為3
? ? // 區間表達式由具有操作符形式..的rangeTo函數輔以in和!in形成。
? ? // downTo()函數 倒序迭代數字
? ? // step()函數 以不等于1的任意步長迭代數字
? ? for(x in 9 downTo 0 step 3) {
? ? ? ? Log.d("alen","x is " +x)
? ? }

? ? //創建一個不包括其結束元素的區間,可以使用until函數:
? ? for(x in 1 until 10) {
? ? ? ? // i in [1, 10)排除了10
? ? ? ? Log.d("alen","until x is " +x)
? ? }
}
// while循環測試
fun whileForTest() {
? ? val items=listOf("apple","item2","banana")
? ? items.isEmpty()
? ? Log.d("alen","items size is " +items.size)
? ? //區間range
? ? Log.d("alen","items indices is " +items.indices)
? ? if(items.size >2) {
? ? ?  Log.d("alen","items index 2 is " +items.get(2))
? ? }

? ? Log.d("alen","items last index is " +items.lastIndex)
? ? //使用in運算符來判斷集合內是否包含某實例:
? ? when {
? ? ? ? "apple"initems-> {
? ? ? ? ? ? ? Log.d("alen","items contain apple")
? ? ? ?  }

? ? ? ? "orange"!initems-> {
? ? ? ? ? ? ? Log.d("alen","items do not contain orange")
? ? ? ? }
? ? }
}
// when條件測試
fun whenForTest(obj: Any): String =
? ? ? when(obj) {
? ? ? ? ? 1-> {
? ? ? ? ? ? ?  Log.d("alen","test one")
? ? ? ? ? ? ?  "one"
? ? ? ? ? }
? ? ? ? ? "hello" -> "Greeting"
? ? ? ? ? isLong -> "Long"
? ? ? ? ? !isString -> "Not a string"
? ? ? ? ? else-> "Unkonwn"
? ? ? }
// map測試
fun mapForTest() {
? ? val map=mapOf("a"to"1","b"to"2","c"to"3")
? ? Log.d("alen","map key is a,value is " +map["a"])
? ? for(item in map) {
? ? ? ? Log.d("alen","map key is " +item.key + ",value is " +item.value)
? ? }
}
// set測試
// set
// 1. Set中沒有重復的對象
// 2. Set中對象不按特定的方式排序
//判斷兩個對象的是否重復標準是hashCode()和equals()兩個參考值,
//也就是說只有兩個對象的hashCode值一樣與equals()為真時,才認為是相同的對象
// fun hashSetOf(vararg elements: T): java.util.HashSet
// fun linkedSetOf(vararg elements: T): java.util.LinkedHashSet
// sortedSetOf(comparator: java.util.Comparator, vararg elements: T): java.util.TreeSet
// fun sortedSetOf(vararg elements: T): java.util.TreeSet
funsetForDataClassTest() {
    // Book是一個data class,用來做data model使用
? ? val bookA= Book("A",20,"AA")
? ? val bookB= Book("B",30,"BB")
? ? val bookC= Book("C",20,"CC")
? ? val bookD= Book("D",50,"DD")
? ? val bookE= Book("B",30,"EE")

? ? val set=setOf(bookA,bookB,bookC,bookD)
? ? for(iteminset) {
? ? ? ? Log.d("alen","item$item, hashCode${item.hashCode()}")
? ? }

? ? Log.d("alen","--------------------------")

? ? val mutalbeSet=mutableSetOf(bookA,bookB,bookC,bookD,bookE)

? ? for(item in mutalbeSet) {
? ? ? ? Log.d("alen","item is$item, hashCode is${item.hashCode()}")
? ? }

? ? mutalbeSet.add(Book("甲乙丙丁",50,"EE"))
? ? Log.d("alen","remove B value is " +mutalbeSet.remove(bookB))
? ? Log.d("alen","remove E value is " +mutalbeSet.remove(bookE))

? ? Log.d("alen","--------------------------")

? ? for(item in mutalbeSet) {
? ? ? ? Log.d("alen","item is$item, hashCode is${item.hashCode()}")
? ? }
}

</pre>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容

  • 1.定義函數 帶有兩個 Int 參數、返回 Int 的函數: 將表達式作為函數體、返回值類型自動推斷的函數: 函數...
    正義吖閱讀 611評論 0 2
  • 該文為個人學習筆記,如有錯誤,請各位大佬指導~~~ 針對于一些未具體說明知識點,后續會進行補充。 知識點可能會有點...
    半截鉛筆閱讀 246評論 0 0
  • 包聲明 如: 引入類 與Java沒啥區別 有多個包會默認導入到每個 Kotlin 文件中: 函數定義 一般函數 函...
    郎官人閱讀 410評論 1 0
  • 帶你快速入門,讀懂Kotlin基本語法~ 基本語法 定義包 包應該在源文件的頭部聲明: 不需要匹配目錄和包:源文件...
    AeolusFei閱讀 694評論 0 2
  • 上篇介紹了Kotlin的特點以及其在Android Studio上的配置步驟,下面接著記錄一些Kotlin的基本語...
    ArsenicBing閱讀 626評論 0 2