【移动应用开发技术】30分钟了解Kotlin基本语法_第1页
【移动应用开发技术】30分钟了解Kotlin基本语法_第2页
【移动应用开发技术】30分钟了解Kotlin基本语法_第3页
【移动应用开发技术】30分钟了解Kotlin基本语法_第4页
【移动应用开发技术】30分钟了解Kotlin基本语法_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论