Kotlin入门教程史上最全最易于理解最全面的文章

Posted William_Tao(攻城狮)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin入门教程史上最全最易于理解最全面的文章相关的知识,希望对你有一定的参考价值。

这里写自定义目录标题

前言

由于在自己面试过程中,经常被问到有没有学过kotlin,总感觉自己少了点东西,于是就花了一个多星期将最基本的kotlin知识点给学了一遍,本篇文章仅仅含有一点点android的知识,并不是学习Android的好文章,但是是最快入门kotlin的一篇全面的文章,当然,我也希望大家与我共同学习进步,如果有什么疑问,或者经验交流,都可以加群QQ:1098392728与我们交流。
更多好文章可以去浏览我的个人博客WilliamTao的博客

Kotlin学习笔记

1.val和var区别

val 可以理解为java中的final关键字,只能在声明的时候赋值

var 在任何时候都可以赋值

2.简单变量之间的转换

//Float --->Int
    val orgin:Float = 65.0f
    print(orgin.toInt())

3.数组变量的声明

kotlin中没有Stringarray,而是使用Array ,具体看下面的例子

fun main() 
  var int_arrary:IntArray = intArrayOf(1,2,3)
  print(int_arrary)
 var string_array:Array<String>=arrayListOf("hello","world")
    

其实,上面图片的内容都可以不用,直接使用Array 《》括起来就可以了

数组的获取,可以通过java的中括号,也可以使用get来获取

 var string_array:Array<String>=arrayOf("hello","world")
    Btn_test.setOnClickListener
            var str :String=""
            var i:Int = 0
            while(i<string_array.size)
              str=str+string_array.get(i)+","
                i++
               // str=str+string_array[i]+","
            
            textView.text=str
            println(str)
        

4.字符串

字符串与基本类型的转换

kotlin方便一点,便于记忆

var test:String="1"
println(test.toInt())

字符串常用方法

  • indexOf
  • substring
  • split:在Java里返回的是String[],而在kotlin中返回的是List
  • 通过下标获取某个位置的字符
 var orgin:String ="he.llo.wor.ld"
         var list:List<String> =orgin.split(".")
        for(item in list)
            print("----"+item+"*----")
        

var orgin:String ="hello,world"
var orgin_trim:String=orgin
if(orgin_trim.indexOf(",")>0)
    orgin_trim = orgin_trim.substring(0,orgin_trim.indexOf(","))

println("orgin_trim--"+orgin_trim)

println(orgin[1].toString())
println(orgin.get(1).toString())

字符串模板及其拼接

$加变量,如果变量先需要进行计算,则需要加大括号

var name="William_Tao"
print("My name is $name ,and age is $name.length")

5.容器

Set

List

Map

公共方法

kotlin允许对容器进行初始化,而java不可以

集合Set/MutableSet

  1. 循环的方法:
  2. for
  3. 迭代器

//方法一
var setList: Set<String> = setOf("test", "second", "thrid")
for (item in setList) 

    println("名称: $item")

//方法二
var iterator = setList.iterator()
        while(iterator.hasNext())
            val item=iterator.next()
            println("名称: $item")
        
//方法三
 setList.forEach    println("名称: $it") 

缺点所在:

队列List/MutableList

var ListList: List<String> = listOf("test", "second", "thrid")
for (i in ListList.indices) 
    var item =ListList[i]
    println("名称: $item")

list中还提供了两种排序的函数 分别为:

  • sortBy
  • sortedByDescending
   ListList.sortedBy  it.length 
//        ListList.sortedByDescending  it.length 
        for (i in ListList.indices) 

            var item =ListList[i]
            println("名称: $item")
        

映射Map/MutableMap

两种初始化的方法:

键值 to 键名

Pair(值 ,名)

var godMap:Map<String,String> = mapOf("苹果" to "Iphone 12","Android" to "VIVO") 
        var godMap2:MutableMap<String,String> = mutableMapOf(Pair("苹果" , "Iphone 12"), Pair("Android" , "VIVO"))
        


遍历(同前面那有三种一样,不过有点点区别),见下方

foreach需要 API 24 版本以上才行

//1
for(item in godMap)
    println("键名:$item.key键值:$item.value")

//2
  var iterator=godMap.iterator()
        while(iterator.hasNext())
            var item = iterator.next()
            println("键名:$item.key键值:$item.value")
        
//3
godMap.forEach  key, value ->   "键名:$key键值:$value"

6.条件分支语句

简单分支

在kotlin中,对分支语句做了优化,

允许分支语句返回字符串

另外,kotlin没有三元运算

//方法一 
var flag:Boolean=false
        Btn_test.setOnClickListener 
            textView.text = if(flag==true)"flag is true"
            else 
                "flag is false"

            
            flag = !flag
        
//方法二,再一的基础上去掉{} 
var flag:Boolean=false
        Btn_test.setOnClickListener 
            textView.text = if(flag==true)"flag is true"
            else
                "flag is false"

            
            flag = !flag
        	

多路分支

注意与switch case之间的区别

  • when 替代了 switch
  • 数值 -> 代替了case
  • else替代了default
  • kotlin中每一个 分支自动跳出
  • when -> 同样允许有返回值
  • 在java中case后面只能引入常量,但是kotlin允许引入变量判断。
  • 在java中case后面只能引入一个常量,如果有多个常量的话,就需要并列写多个,很麻烦,在kotlin中就对此进行了优化,具体见代码
  • kotlin中的when ->也支持类型判断(is 变量类型)
//版本一  
var count:Int =0;
        Btn_test.setOnClickListener 
          when(count)
              0 -> textView.text="你现在的数值为:0"
              1 -> textView.text="你现在的数值为:1"
//             else -> textView.text="你现在的数值为:default"
          
            count = (count+1)%3
         
//最简化版本
var count:Int =0;
        Btn_test.setOnClickListener 
            textView.text=
          when(count)
              0 -> "你现在的数值为:0"
              1 -> "你现在的数值为:1"
        else -> "你现在的数值为:default"
          
            count = (count+1)%3
        
//引入变量可以通过
var count:Int=0
        var one:Int =1
        var tow:Int =2
        Btn_test.setOnClickListener 
          when(count)
              one -> textView.text="你现在的数值为:0"
              tow -> textView.text="你现在的数值为:1"
//             else -> textView.text="你现在的数值为:default"
          
            count = (count+1)%3
        

koltin对于多个常量并列的优化

	 var count:Int=0

        Btn_test.setOnClickListener 
          when(count)
              1,3,5,7,9 -> textView.text="你现在的数值为:1,3,5,7,9当中的某个值"
              in 10..15 -> textView.text="你现在的数值为:10..15当中的某个值"
              else -> textView.text="你现在的数值为:default"
          
            count = (count+1)%20
        

kotlin中的when ->也支持类型判断(is 变量类型)

 var countType:Number;
        var countNumb:Int=0
        Btn_test.setOnClickListener 

            countNumb = (countNumb+1)%3
            countType = when(countNumb)
                0->countNumb.toLong()
                1->countNumb.toFloat()
                else ->countNumb.toDouble()
            

            //when ->使用类型的判断
            textView.text=when(countType)
                //重点关注此段
                is Long ->"is long"
                is Float ->"is Float"
                is Double ->"is Double"
                else -> "is error"
            
        

7.循环处理

循环遍历

kotlin废除了for( int i=0;i<n;i++) 这种形式,并且kotlin提供了两种方式

  1. 变量 in …
  2. for(i in 容器.indices)
//方法一   
var list:Array<String> = arrayOf<String>("朝辞白帝彩云间","千里江陵一日还","两岸猿声啼不住","轻舟已过万重山")

        Btn_test.setOnClickListener 
            var poem:String=""
            for(item in list)
            poem = "$poem$item,\\n "
         
            textView.text = poem
        
//方法二
    var list:Array<String> = arrayOf<String>("朝辞白帝彩云间","千里江陵一日还","两岸猿声啼不住","轻舟已过万重山")

        Btn_test.setOnClickListener 
            var poem:String=""
            for(i in list.indices)
                if(i%2==0)
                    poem = "$poem$list[i],\\n "
                else
                    poem = "$poem$list[i]。\\n "
                

         
            textView.text = poem
        


方法二所带来的问题

解决办法

kotlin引入了一些关键字,具体见下面代码(当然是用Java中的while,do —while都行)

//左闭右开,不包括2 16 ---65
  for(i in 16 until 66)
     println(i)
  
  println("**********")
  //每一步走4
  for(i in 23..89 step 4)
      println(i)
  
  println("**********")
  //从50开始递减到7
  for(i in 50 downTo 7)
      println(i)
  

//使用while
 var list:Array<String> = arrayOf<String>("朝辞白帝彩云间","千里江陵一日还","两岸猿声啼不住","轻舟已过万重山")
        var i:Int=0
        while(i<list.size)
            println(list[i]+"--")
            i++
        
        println("-----------")
        i=0
        do
            println(list[i]+"**")
            i++
        while (i<list.size)

跳出多重循环

低配版本

  //这里有空语句所以注意时Array<String?> 而非Array<String>
        var list:Array<String?> = arrayOf("朝辞白帝彩云间",null,"千里江陵一日还","","   ","两岸猿声啼不住","轻舟已过万重山")

        Btn_test.setOnClickListener 
            var poem:String=""
            var pos:Int=-1
            var count:Int=0
            while(pos<=list.size)
                pos++;
                //判断是否为空或者是否是有空串或者空格串
                if(list[pos].isNullOrBlank())
                    continue
                
                if(pos%2==0)
                    poem = "$poem$list[pos],\\n "
                else
                    poem = "$poem$list[pos]。\\n "
                
                count++
                //若合法行数达到4行,则跳出循环
                if(count==4)
                    break
                
            



            textView.text = poem
        

高配版 outside@

//这里有空语句所以注意时Array<String?> 而非Array<String>
var list:Array<String?> = arrayOf("朝辞白帝彩云间",null,"千里江陵一日还","","   ","两岸猿声啼不住","轻舟已过万重山")

Btn_test.setOnClickListener 
    var i:Int=0
    var is_found =false
    //给外循环加一个名叫outside的标记
    outside@ while (i<list.size)
        var j:Int=0
        var item=list[i];

        if (item != null) 
            while(j<item.length)
                if(item[j] == '一')
                    is_found=true
                    break@outside
                
                j++;
            
        
    i++
    

8.空安全

字符串的有效性判断

声明可空变量

正常默认的变量都是非空的

可以为空的变量,可以在声明前在类型后面加问号

//能调用上面6中方法中的任意一个  
var strNotNull:String=""
//只能调用 isNullOrEmpty 和 isNullOrBlank方法,因为其与方法需要求其长度,但可能为空,所以不可以调用后面4种方法
  var strCanNull:String?=null

检验空值的运算符

var length_null:Int?
var A:String="123"

Btn_test.setOnClickListener 
    //表示为空时返回null,所以返回的变量必须被声明为可空类型
    length_null = A?.length
    //length_null = A?.length?:-1
    //length_null = A!!.length
  

textView.text = length_null.toString()

9.等式判断

结构相等

凡是在Java中实现了equals函数的类,其变量均可在Kotlin中通过运算符“==”和“!=”进行等式判断

这种比较变量结构内部值的行为,kotlin称为结构相等,即模样相等

var helloHe:String="你好"
var helloShe:String="哈喽"
var flag:Boolean=false
var resultCont:Boolean=false
Btn_test.setOnClickListener 
    titile.text = "$helloHe$helloShe 的对比结果为:"
    if(flag)
        resultCont=helloHe==helloShe
        content.text = "最后的对比结果为:$resultCont"
    else
        resultCont=<

以上是关于Kotlin入门教程史上最全最易于理解最全面的文章的主要内容,如果未能解决你的问题,请参考以下文章

史上最详细最全面的Hadoop环境搭建

android之一篇史上最适合最全面的JNI入门教程

android之一篇史上最适合最全面的JNI入门教程

史上最全面的SignalR系列教程-目录汇总

Android事件分发机制详解:史上最全面最易懂

史上最全面的Docker构建工具教程