当前位置: 首页 > news >正文

Android --- Kotlin学习之路:基础语法学习笔记

------>可读可写变量

var name: String = "Hello World";

------>只读变量

val name: String = "Hello World"

------>类型推断

val name: String = "Hello World" 可以写成 val name = "Hello World"

------>基本数据类型

1.String,Double,Int,Float,Long,Short,Byte,Char,Boolean
2.Kotlin对于小数的默认推断是Double类型,默认63.and(bits)or(bits), inv()

------>编译时常量

const val PI = 3.1415 需要定义在全局变量范围内,不能定义到函数内部,这才叫编译时常量

------>range 表达式

val number = 148if (number in 0 .. 59) {println("不及格")} else if (number in 60 .. 100) {println("及格")} else if (number !in 0 .. 100) {println("成绩无效")}

------>when 表达式

 val month = "January"val result = when(month) {"January" -> "一月""February" -> "二月""March" -> "三月""April" -> "四月""May" -> "五月""June" -> "六月""July" -> "七月""August" -> "八月""September" -> "九月""October" -> "十月""November" -> "十一月""Devember" -> "十二月"else -> "错误的月份"}println(result)

------>String 模板

 val isLogin = trueprintln("server respose result : ${if (isLogin) "登录成功" else "登录失败"}")

------>具名函数参数
具名函数的意义是:假如一个函数有多个参数,传递参数的时候为了避免一个一个对,可以直接用名字赋值

loginAction(name = "Derr", age =90)private fun loginAction(name: String, age: Int) {println("name is : ${name}, age is : ${age}")}

------>Nothing 类型会终止程序

TODO("not implement")  

------>双等号相当于Java中的equals(),三哥等号是引用的比较,也就是地址的比较

------>类型转换相关

val number1 : Int? = "666.6".toIntOrNull() // 能转换成功就转换,不成功就返回Null
val r = "%3.f".format(65.38344) // r 的类型是String
println(65.683.roundToInt()) // 会四舍五入,结果是66

------>apply 内置函数

apply 函数会返回对象本身
val file = File("D:\\a.txt")
// 普通写法
file.setExecutable(true)
file.setReadable(true)
println(file.readLines())//apply写法
file.apply {setExecutable(true) // 这里面会有this引用,可以省略不写
}.apply {setReadable(true)
}.apply {println(readLines())
}.ll

------>let 内置函数

fun main() {println(getMethod(null))
}
fun getMethod(value: String?): String {// 判空用法,当value为空的时候将不会执行闭包里面的逻辑return value?.let {"值是非空的"} ?: "值是空的"
}

------->run 扩展函数
最后一行当作函数的返回值,在run函数中可以直接访问实例的公有属性和方法

fun main() {println(testRun(Jump()))
}class Jump {fun test():String {return "111"}
}
fun testRun(jump: Jump) : String {jump.run {test() // 直接调用return jump.test()}
}

------>数组的创建

 val array: Array<Any> = arrayOf(1, 2, 3, 4)println(array[0])val arrayOfNulls = arrayOfNulls<Any>(5)arrayOfNulls[0] = "1"arrayOfNulls[1] = 'A'arrayOfNulls[2] = 1arrayOfNulls.forEachIndexed(action = {index, item ->println("$index$item")})

------>可变的集合,不可变的集合

 // 可变集合val array = mutableListOf<Any>()array.add("1")array.add(2)// 不可变集合val arrayInt = listOf(1,2,3)// 可变Mapval arrayMap = mutableMapOf<String, Int>()arrayMap["1"] = 1arrayMap["2"] = 1// 不可变Map,通过Pair指定集合里面的元素val arrayMap2 = mapOf<String, Int>(Pair("1",1))for (item in arrayMap2) {println(item)}

------>

Person().test()
Person.test2()
println(NumUtil.double(4))// 普通类
class Person {fun test() {println("猪头")}// 半生类companion object{fun test2() {println("半生类")}}
}// 静态类
object NumUtil {fun double(num: Int): Int {return num * num}
}

------>泛型类和泛型接口

fun main() {val drinkFruits = DrinkFruits()drinkFruits.drinks("apple juice")val eat = EatEgg("blue")eat.prints()
}
// 泛型接口
interface Drink<T> {fun drinks(t: T)
}
class DrinkFruits: Drink<String> {override fun drinks(t: String) {println("Drink:$t")}
}
// 泛型类
abstract class Eat<T> {abstract fun prints()
}class EatEgg(val color: String) : Eat<String>() {override fun prints() {println("eat:${color}'s egg")}
}

------->扩展方法

扩展方法在什么时候使用呢?
当一个jar包中的方法不满足我们的需求时,
我们可以给jar包中的某个类添加方法,因为jar包中的那个方法本身是不可以修改的

fun main() {println(Jump().doubleJump())
}class Jump {
}fun Jump.doubleJump(): String {val result = "此方法为扩展方法"return result
}

----------->延迟初始化

private lateinit var _binding: FragmentFirstBinding

-----------------------------------------基础知识学习完之后训练的例子-------------------------------------------------

package com.example.kotlindemo// 一次2位数四则运算
fun main() {while(true) {// 控制台输入println("请输入一个2位数的加减乘除")val input = readLine()input?.let {val result = calculate(input)println(result)println("是否继续使用程序,继续使用请输入Y,不使用请输入N")val inputContinue = readLine()inputContinue?.let {if (it != "Y") {System.exit(-1)}}}}}fun calculate(input: String): String {if (input.contains("+")) {val strings = input.trim().split("+")return operate(strings[0].toDouble(), strings[1].toDouble(), "+").toString()} else if (input.contains("-")) {val strings = input.trim().split("-")return  operate(strings[0].toDouble(), strings[1].toDouble(), "-").toString()} else if (input.contains("*")) {val strings = input.trim().split("*")return  operate(strings[0].toDouble(), strings[1].toDouble(), "*").toString()} else if (input.contains("/")) {val strings = input.trim().split("/")return  operate(strings[0].toDouble(), strings[1].toDouble(), "/").toString()} else {return "you input is error!"}
}fun operate(num1: Double, num2: Double, operateChar: String): Double {return when(operateChar) {"+" -> num1 + num2"-" -> num1 - num2"*" -> num1 * num2"/" -> num1 / num2else -> 0.0}
}
http://www.lryc.cn/news/400088.html

相关文章:

  • 嵌入式智能手表项目实现分享
  • `nmap`模块是一个用于与Nmap安全扫描器交互的库
  • JVM系列 | 对象的创建与存储
  • 【JavaScript 算法】快速排序:高效的排序算法
  • Excel如何才能忽略隐藏行进行复制粘贴?
  • 行人越界检测 越线 越界区域 多边形IOU越界判断
  • 「UCD」浅谈蓝湖Figma交互设计对齐
  • VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)
  • [PaddlePaddle飞桨] PaddleOCR-光学字符识别-小模型部署
  • Python应用开发——30天学习Streamlit Python包进行APP的构建(15):优化性能并为应用程序添加状态
  • python实现openssl的EVP_BytesToKey及AES_256_CBC加解密算法
  • 基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现
  • 【css】image 使用 transform:scale 放大后显示不全的问题
  • 损失函数简介
  • 2023睿抗CAIP-编程技能赛-本科组省赛(c++)
  • 现在国内的ddos攻击趋势怎么样?想了解现在ddos的情况该去哪看?
  • 微服务到底是个什么东东?
  • C++笔试强训5
  • 初学51单片机之UART串口通信
  • 数据结构——查找(线性表的查找与树表的查找)
  • MySQL入门学习-深入索引.组合索引
  • RABBITMQ的本地测试证书生成脚本
  • 记录些Redis题集(4)
  • JVM:垃圾回收器
  • Golang | Leetcode Golang题解之第228题汇总区间
  • 单目3D和bev综述
  • 每日Attention学习11——Lightweight Dilated Bottleneck
  • EM32DX-E4 IO 扩展模块
  • 【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序【图文讲解】
  • SpringBoot实战:多表联查