函数
Kotlin中定义函数的关键字是fun(function的缩写),无论你想定义什么函数,都必须用fun进行声明
紧跟在fun后面的是函数名,函数名后括号里面放的是接收的参数。参数的格式名是“参数名:参数类型”
若是有返回值的话,就将返回值类型以冒号隔开,写在函数名括号的后面;若是没有返回值,可以省略不写,或者写关键字为 Unit,类似与java的void
实例:接收两个不同类型参数,且返回值为String的函数
fun functionDemo(parm1 : Int, parm2 : String) : String{
return parm2
}
实例:当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码用等号连接,直接写在函数定义的后面
//改写前
fun sum(parm1: Int, parm2: Int): Int {
return a + b
}
//改写后
fun sum(parm1: Int, parm2: Int) = a + b //返回值类似也省略了,由编译器自动推断类型
匿名函数
Kotlin支持lambda表达式。并非每个函数都需要一个名称。某些函数通过输入和输出更直接地进行标识。这些函数称为“匿名函数”。
lambda表达式的写法为:(type1,type*) -> type_return = { }
使用实例:
fun main(args: Array) {
val sumLambda: (Int, Int) -> Int = {x,y -> x+y} //(Int, Int) -> Int = {x,y -> x+y}就是一个匿名函数
println(sumLambda(1,2)) // 输出 3
}
字符串模板
字符串可以包含模板表达式,即可求值的代码片段,并将它的结果连接到字符串里面。
字符串模板表达式可以是 $变量名 ${变量名}
实例:
val a = 10
val s1 = “a = $a” // 结果为 “a = 10”
val s = “abc”
val str = “$s.length is ${s.length}” // 结果为 “abc.length is 3”
a = 2
// 模板中的任意表达式:
val s2 = “${s1.replace(“is”, “was”)}, but now is $a”
//结果为“a was 10 , but now is 2 ”
var name = “张三”
var sex = true
var date = “2021年1月2日”
var time = “11点59分”
var work =“该睡觉了”
val orderInfo = “你好,${name} i f ( s e x ) " c o o l b o y " e l s e " c o o l g i r l " , " + " 现在已经是 {if(sex)"cool boy" else "cool girl" },"+"现在已经是 if(sex)"coolboy"else"coolgirl","+"现在已经是{date}\t t i m e 了 , " + " 你 {time}了,"+"你 time了,"+"你{cacke}”
//结果为"你好,张三 cool boy,现在已经是2021年1月2日 11点59分了,你该睡觉了"
注释
Kotlin 支持单行(或行末)与多行(块)注释。
// 这是一个行注释
/* 这是一个多行的
块注释。 */
Kotlin 中的块注释可以嵌套
/* 注释从这里开始
/* 这是嵌套的注释 */
并且在这里结束。 */
Null 安全
在某些语言中,可以声明引用类型变量而不明确提供初始值。在这类情况下,变量通常包含 null 值。默认情况下,Kotlin 变量不能持有 null 值。这意味着以下代码段无效:
// 赋值失败
val languageName: String = null
要使变量持有 null 值,它必须是可为 null 类型。可以在变量类型后面加上 ? 后缀,将变量指定为可为 null,如以下示例所示:
val languageName: String? = null
当使用可以可返回Null的函数时,要注意Null安全,应该先做判断处理
fun printProduct(arg1: String, arg2: String) {
val x = parseInt(arg1)
val y = parseInt(arg2)
// 直接使用 “x * y” 会导致编译错误,因为它们可能为 null
if (x != null && y != null) {
// 在Null检测之后,x 与 y 会自动转换为非空值(non-nullable)
println(x * y)
}
else {
println(“‘ a r g 1 ′ o r ′ arg1' or ' arg1′or′arg2’ is not a number”)
}
}
类型检测和自动类型转换
我们可以使用 is运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。 如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换
示例:
//写法一
fun getStringLength(parm: Any): Int? {
if (parm is String) {
// 做过类型判断以后,"parm"会被系统自动转换为String类型
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
新的开始
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
如果有需要进阶Android高级工程师系统学习资料的,我可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。
《系列学习视频》
《系列学习文档》
《我的大厂面试之旅》
担的使命。
如果有需要进阶Android高级工程师系统学习资料的,我可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。
《系列学习视频》
[外链图片转存中…(img-wPpNxHXM-1711133819991)]
《系列学习文档》
[外链图片转存中…(img-n1u3NNbc-1711133819991)]
《我的大厂面试之旅》
[外链图片转存中…(img-XwrZl0SD-1711133819992)]