第一天

2019-07-20  本文已影响0人  Anwfly

概述:

Kotlin基础
面向过程
面向对象
接口、扩展、泛型

为什么学习Kotlin

1.Google官方指定
2.简介、现代、安全
3.无缝兼容Java

基础(base)

  1. IDE安装
  2. 常量、变量、赋值、常量与变量的关系、代码注释
val str1 = "常量";
val π = 3.141592
//1. 定义变量,自动推到类型,不需要自己指明,也可以自己指明,类型一旦确定即定
var str = "变量";
//?表示可为空空,必须指明类型
var str2: String? = "变量";
  1. 整数型、浮点型、类型安全、布尔型、元组、可空类型
    //二元
    val(name,age) = Pair("大飞", 12)
    
    //三元
    val (name, age, sex) = Triple("大飞", 12, "男")
    println("${name}")
    
    //只用一个变量名称
    val fly = Pair("大飞", 12)
    println("${fly.first}")

操作符和类型(Operator & Type)

  1. 操作符:一个符号或者一个单词,用于运算或者操作。同时操作的对象的数目,被称作几元操作符。
var a = 1
var b = -a
var c = a + b
var d = a
var add += 1000
  1. String(处理文字和字符):字符串(string)和字符(char)
var title : String = "小白"
//判空
println(title.isEmpty())
//计数
println(title.count())
//使用字符串的toCharArray()方法,把字符串转换为字符数组
val toCharArray = title.toCharArray()
for (word in toCharArray) {
    println(word)
}
//字符串获或者字符使用+拼接
//字符串模板:可以把各种变量组合成一个动态的字符串
val endTime = Triple(6,2,4)
    val company1 = "顺丰"
    val company2 = "菜鸟"
    val company3 = "邮局"
    val newTile = "${endTime.first}月${endTime.second}日,${company1}大战${company2}正酣,${endTime.third}${company3}日紧急叫停"
    print(newTile)
 var title : Char ='a'
    //是否是数字
    println(title.isDigit())
    //是否是字母或者汉字
    println(title.isLetter())
  1. Collection(一次处理多个类型的元素):数组、map、集合
    //创建大小固定数组:arrayOf("", "")
    //特点:大小固定,元素类型不可变
    var nollStations = arrayOf("北京站", "北京南站")

    //创建一个有默认值的数组:Array<String>(计数, { 默认值 })
    var nollStations1 = Array<String>(2, { "吃饭" })

    for (nollStation in nollStations1) {
        println(nollStation)
    }

    //创建0-10的数组,
    var oneToTen = Array(10, { i -> i })

    for (i in oneToTen) {
        print("$i ")
    }

    //元素计数,判空
    print(oneToTen.size)
    print(oneToTen.isEmpty())

    //获取数组中的元素
    print(oneToTen[0])
    print(oneToTen.first())
    println(oneToTen.last())
    print("${oneToTen.component1()},${oneToTen.component5()}")

    //获取筛选重复元素后的数组:.distinct()或者用
    var citys = arrayOf("北京", "天津", "北京", "上海")
    val distinct = citys.distinct()
    val toSet = citys.toSet()
    for (s in distinct) {
        println(s)
    }
    for (s in toSet) {
        println(s)
    }

    //切割数组:sliceArray,全是闭区间
    //特点:大小可变,类型不可变
    val sliceArray = citys.sliceArray(0..2)
    println(sliceArray.size)

    //mutableListOf
    var countries = mutableListOf("中国", "美国", "英国")
    //在末尾添加元素
    countries.add("日本")
    //在任意位置添加元素
    countries.add(1, "韩国")
    //移除元素
    countries.remove("美国")
    //移除指定位置元素
    countries.removeAt(2)

②无序不可重复:集合类型Set:Set<类型>或者setOf(元素1,元素2)
特点:大小固定,类型不可变
方法:交差并补

    //集合
    val oneLine = setOf("天通苑", "北京站", "立水桥")
    val twoLine = setOf("朱辛庄", "沙河", "高教园")
    val threeLine = setOf("朱辛庄", "沙河", "高教园", "天通苑", "北京站", "立水桥", "昌平站")

    //集合计数及判空
    println("oneLine是否为空:" + oneLine.isEmpty() + "数量为:" + oneLine.size)

    //是否包含一个元素或一个集合
    println(threeLine.contains("北京站"))
    println(threeLine.containsAll(oneLine))

    //转化为数组
    val toTypedArray = oneLine.toTypedArray()
    for (s in toTypedArray) {
        println(s)
    }

    //集合之间的运算:交差互补
    //交集:intersect
    val intersect = oneLine.intersect(threeLine)
    for (s in intersect) {
        print("$s ")
    }

    //差集:subtract,结果是
    val subtract = oneLine.subtract(twoLine)
    for (s in subtract) {
        println(s)
    }

    //并集:union
    val unionLines = oneLine.union(twoLine)
    for (unionLine in unionLines) {
        print("${unionLine} ")
    }
     //补集:
    val minus = oneLine.minus(twoLine)
    for (m in minus) {
        println(m)
    }

     //转变为可变集合:
    val mutableSet = oneLine.toMutableSet()
    mutableSet.add("八达岭站")
    mutableSet.addAll(twoLine)
    mutableSet.remove("北京站")

    for (s in mutableSet) {
        println(s)
    }

③无序可重复:Map,但值有唯一的键
主要属性:keys(一个set,不可重复),values(可重复的)

    //Map
    //mapOf<Key,Values>{Pair(key,value)...}
    //注意:显示指定类型,防止初始化值类型错误
    val countries = mapOf<String, String>(Pair("cn", "中国"), Pair("hk", "香港"), Pair("ac", "美国"))

    //元素计数,判空
    println(countries.size)
    println(countries.isEmpty())

    //获取某个key对应的value值
    println(countries.get("cn"))
    println(countries.getOrDefault("cn", "不存在此国家代码"))

    //获取所有的keys,获取所有的values
    println(countries.keys)
    println(countries.values)

    //转化为可变,默认是不可变的
    val newCountries = countries.toMutableMap()

    //更新
    newCountries["cn"] = "中国北京"
    println(newCountries.get("cn"))
    //添加
    newCountries["bj"] = "北京"
    println(newCountries.values)
    //移除
    newCountries.remove("hk")
    println(newCountries.values)
  1. 控制流:根据逻辑条件控制程序运行流向
val lists = listOf(1, 2, 3)
    for (list in lists) {
        println(list)
    }
    for (a in 1..39) println(a)

var times = 2
    while (times >= 0) {
        println(times)
        times--
    }
 //整个if语句可以作为一个返回值
    if (true) {
    }
    if (true) {
    } else {
    }
when (3) {
        in 1..5 -> {
            println("在1到5之间")
        }

        1, 3, 5 -> {
            println("1,3,5")
        }
        (9 - 6) -> {
            println("值是3")
        }

        is Int -> {
            println("是整型")
        }

        else -> {
            println("什么都不是")
        }

函数和Lambda

1.函数
2.Lambda
3.行内函数
4.高阶函数

上一篇下一篇

猜你喜欢

热点阅读