![【移动应用开发技术】30分钟了解Kotlin基本语法_第1页](http://file4.renrendoc.com/view/81c22b9f0ce6ddcc63d2cadbd38b1f8e/81c22b9f0ce6ddcc63d2cadbd38b1f8e1.gif)
![【移动应用开发技术】30分钟了解Kotlin基本语法_第2页](http://file4.renrendoc.com/view/81c22b9f0ce6ddcc63d2cadbd38b1f8e/81c22b9f0ce6ddcc63d2cadbd38b1f8e2.gif)
![【移动应用开发技术】30分钟了解Kotlin基本语法_第3页](http://file4.renrendoc.com/view/81c22b9f0ce6ddcc63d2cadbd38b1f8e/81c22b9f0ce6ddcc63d2cadbd38b1f8e3.gif)
![【移动应用开发技术】30分钟了解Kotlin基本语法_第4页](http://file4.renrendoc.com/view/81c22b9f0ce6ddcc63d2cadbd38b1f8e/81c22b9f0ce6ddcc63d2cadbd38b1f8e4.gif)
![【移动应用开发技术】30分钟了解Kotlin基本语法_第5页](http://file4.renrendoc.com/view/81c22b9f0ce6ddcc63d2cadbd38b1f8e/81c22b9f0ce6ddcc63d2cadbd38b1f8e5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】30分钟了解Kotlin基本语法
本文来源:你我学习网,转载请备注出处:/blog/kotlin/article/236.html一、定义包包的声明应处于源文件顶部:package
my.demo
import
java.util.*
//
……目录与包的结构无需匹配:源代码可以在文件系统的任意位置。注:更多关于包的内容请参考
包。二、定义函数1,带有两个
Int
参数、返回<code>Int的函数://函数
fun
sum(a:
Int,
b:
Int):
Int
{
return
a
+
b
}
//测试
fun
main(args:
Array<String>)
{
print("sum
of
3
and
5
is
")
println(sum(3,
5))
}运行结果:sumof3and5is82,将表达式作为函数体、返回值类型自动推断的函数://函数
fun
sum(a:
Int,
b:
Int)
=
a
+
b
//测试
fun
main(args:
Array<String>)
{
println("sum
of
19
and
23
is
${sum(19,
23)}")
}运行结果:sumof19and23is423,函数返回无意义的值://函数
fun
printSum(a:
Int,
b:
Int):
Unit
{
println("sum
of
$a
and
$b
is
${a
+
b}")
}
//测试
fun
main(args:
Array<String>)
{
printSum(-1,
8)
}运行结果:sumof-1and8is74,Unit
返回类型可以省略://函数
fun
printSum(a:
Int,
b:
Int)
{
println("sum
of
$a
and
$b
is
${a
+
b}")
}
//测试
fun
main(args:
Array<String>)
{
printSum(-1,
8)
}运行结果:sumof-1and8is7注:更多关于包的内容请参考
函数三、定义局部变量1,一次赋值(只读)的局部变量:fun
main(args:
Array<String>)
{
val
a:
Int
=
1
//
立即赋值
val
b
=
2
//
自动推断出
`Int`
类型
val
c:
Int
//
如果没有初始值类型不能省略
c
=
3
//
明确赋值
println("a
=
$a,
b
=
$b,
c
=
$c")
}运行结果:a=1,b=2,c=32,可变变量:fun
main(args:
Array<String>)
{
var
x
=
5
//
自动推断出
`Int`
类型
x
+=
1
println("x
=
$x")
}运行结果:a=6注:更多关于包的内容请参考
属性和字段。四、注释正如Java和JavaScript,Kotlin支持行注释及块注释。//
这是一个行注释
/*
这是一个多行的
块注释。
*/与Java不同的是,Kotlin的块注释可以嵌套。注:参考编写Kotlin代码文档
查看关于文档注释语法的信息。五、使用字符串模板fun
main(args:
Array<String>)
{
var
a
=
1
//
模板中的简单名称:
val
s1
=
"a
is
$a"
a
=
2
//
模板中的任意表达式:
val
s2
=
"${s1.replace("is",
"was")},
but
now
is
$a"
println(s2)
}运行结果:awas1,butnowis2注:参考
字符串模板
查看更多字符串模板的信息。六、使用条件表达式fun
maxOf(a:
Int,
b:
Int):
Int
{
if
(a
>
b)
{
return
a
}
else
{
return
b
}
}
fun
main(args:
Array<String>)
{
println("max
of
0
and
42
is
${maxOf(0,
42)}")
}运行结果:maxof0and42is42使用
if
作为表达式:fun
maxOf(a:
Int,
b:
Int)
=
if
(a
>
b)
a
else
b
fun
main(args:
Array<String>)
{
println("max
of
0
and
42
is
${maxOf(0,
42)}")
}运行结果:maxof0and42is42注:了解更多请参考
if表达式。七、使用可空值及
null
检测当某个变量的值可以为
null
的时候,必须在声明处的类型后添加
?
来标识该引用可为空。</p><p>如果<code>str的内容不是数字返回
null:fun
parseInt(str:
String):
Int?
{
//
……
}使用返回可空值的函数:fun
parseInt(str:
String):
Int?
{
return
str.toIntOrNull()
}<span
class="redactor-invisible-space">
</span>
fun
printProduct(arg1:
String,
arg2:
String)
{
val
x
=
parseInt(arg1)
val
y
=
parseInt(arg2)
//
直接使用
`x
*
y`
可能会报错,因为他们可能为
null
if
(x
!=
null
&&
y
!=
null)
{
//
在空检测后,x
和
y
会自动转换为非空值(non-nullable)
println(x
*
y)
}
else
{
println("either
'$arg1'
or
'$arg2'
is
not
a
number")
}
}
<span
class="redactor-invisible-space">fun
main(args:
Array<String>)
{
printProduct("6",
"7")
printProduct("a",
"7")
printProduct("a",
"b")
}</span>运行结果:42either'a'or'7'isnotanumbereither'a'or'b'isnotanumber或者fun
parseInt(str:
String):
Int?
{
return
str.toIntOrNull()
}
fun
printProduct(arg1:
String,
arg2:
String)
{
val
x
=
parseInt(arg1)
val
y
=
parseInt(arg2)
//
……
if
(x
==
null)
{
println("Wrong
number
format
in
arg1:
'${arg1}'")
return
}
if
(y
==
null)
{
println("Wrong
number
format
in
arg2:
'${arg2}'")
return
}
//
在空检测后,x
和
y
会自动转换为非空值
println(x
*
y)
}
fun
main(args:
Array<String>)
{
printProduct("6",
"7")
printProduct("a",
"7")
printProduct("99",
"b")
}运行结果:42Wrongnumberformatinarg1:'a'Wrongnumberformatinarg2:'b'注:了解更多请参考
空安全。八、使用类型检测及自动类型转换is
运算符检测一个表达式是否某类型的一个实例。如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换:fun
getStringLength(obj:
Any):
Int?
{
if
(obj
is
String)
{
//
`obj`
在该条件分支内自动转换成
`String`
return
obj.length
}
//
在离开类型检测分支后,`obj`
仍然是
`Any`
类型
return
null
}
fun
main(args:
Array<String>)
{
fun
printLength(obj:
Any)
{
println("'$obj'
string
length
is
${getStringLength(obj)
?:
"...
err,
not
a
string"}
")
}
printLength("Incomprehensibilities")
printLength(1000)
printLength(listOf(Any()))
}运行结果:'Incomprehensibilities'stringlengthis21'1000'stringlengthis...err,notastring'[java.lang.Object@77459877]'stringlengthis...err,notastring或者fun
getStringLength(obj:
Any):
Int?
{
if
(obj
!is
String)
return
null
//
`obj`
在这一分支自动转换为
`String`
return
obj.length
}
fun
main(args:
Array<String>)
{
fun
printLength(obj:
Any)
{
println("'$obj'
string
length
is
${getStringLength(obj)
?:
"...
err,
not
a
string"}
")
}
printLength("Incomprehensibilities")
printLength(1000)
printLength(listOf(Any()))
}运行结果:'Incomprehensibilities'stringlengthis21'1000'stringlengthis...err,notastring'[java.lang.Object@77459877]'stringlengthis...err,notastring甚至fun
getStringLength(obj:
Any):
Int?
{
//
`obj`
在
`&&`
右边自动转换成
`String`
类型
if
(obj
is
String
&&
obj.length
>
0)
{
return
obj.length
}
return
null
}
fun
main(args:
Array<String>)
{
fun
printLength(obj:
Any)
{
println("'$obj'
string
length
is
${getStringLength(obj)
?:
"...
err,
is
empty
or
not
a
string
at
all"}
")
}
printLength("Incomprehensibilities")
printLength("")
printLength(1000)
}运行结果:'Incomprehensibilities'stringlengthis21''stringlengthis...err,isemptyornotastringatall'1000'stringlengthis...err,isemptyornotastringatall注:了解更多请参考类
和
类型转换。九、使用
for
循环fun
main(args:
Array<String>)
{
val
items
=
listOf("apple",
"banana",
"kiwi")
for
(item
in
items)
{
println(item)
}
}运行结果:applebananakiwi或者fun
main(args:
Array<String>)
{
val
items
=
listOf("apple",
"banana",
"kiwi")
for
(index
in
items.indices)
{
println("item
at
$index
is
${items[index]}")
}
}运行结果:itemat0isappleitemat1isbananaitemat2iskiwi注:了解更多内容请参考for循环。十、
while
循环fun
main(args:
Array<String>)
{
val
items
=
listOf("apple",
"banana",
"kiwi")
var
index
=
0
while
(index
<
items.size)
{
println("item
at
$index
is
${items[index]}")
index++
}
}运行结果:itemat0isappleitemat1isbananaitemat2iskiwi注:了解更多内容请参考
while循环。十一、
When
循环fun
describe(obj:
Any):
String
=
when
(obj)
{
1
->
"One"
"Hello"
->
"Greeting"
is
Long
->
"Long"
!is
String
->
"Not
a
string"
else
->
"Unknown"
}
fun
main(args:
Array<String>)
{
println(describe(1))
println(describe("Hello"))
println(describe(1000L))
println(describe(2))
println(describe("other"))
}运行结果:OneGreetingLongNotastringUnknown注:了解更多内容请参考
when表达式。十二、使用区间(range)1,使用
in
运算符来检测某个数字是否在指定区间内:fun
main(args:
Array<String>)
{
val
x
=
10
val
y
=
9
if
(x
in
1..y+1)
{
println("fits
in
range")
}
}运行结果:fitsinrange2,检测某个数字是否在指定区间外:fun
main(args:
Array<String>)
{
val
list
=
listOf("a",
"b",
"c")
if
(-1
!in
0..list.lastIndex)
{
println("-1
is
out
of
range")
}
if
(list.size
!in
list.indices)
{
println("list
size
is
out
of
valid
list
indices
range
too")
}
}运行结果:-1isoutofrangelistsizeisoutofvalidlistindicesrangetoo3,区间迭代:fun
main(args:
Array<String>)
{
for
(x
in
1..5)
{
print(x)
}
}运行结果:123453,或数列迭代:fun
main(args:
Array<String>)
{
for
(x
in
1..10
step
2)
{
print(x)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玻璃抛光行业营销策略方案
- 班主任心理健康培训心得
- 户外广告行业发展趋势及前景展望分析报告
- 小学生感恩演讲稿集锦六篇
- 寄宿处行业相关项目现状分析及对策
- 合规性法律服务行业市场调研分析报告
- 在线数据存储服务行业研究报告
- 初中三年的学习心得范文(18篇)
- 生物-湖南省邵阳市2023-2024学年高二下学期7月期末联考试题和答案
- 2024年共同投资开发项目合同
- 儿童中医药健康教育培训总结
- 扩口机设备安全操作规程
- 医疗机构依法执业档案
- 2022-2023学年云南省昆明市官渡区八年级(下)期末英语试卷(含解析)
- 2023北京海淀区初一期末(下)历史试卷及答案
- 青年教师师徒结对徒弟总结
- 金属材料凝固原理与技术PPT完整版全套教学课件
- 高速铁路发展趋势论文
- 云南省曲靖市会泽县2023年数学六下期末学业质量监测模拟试题含解析
- 初中数学教育教学故事集合3篇
- 山东农业大学形势与政策1(专升本)期末考试复习题
评论
0/150
提交评论