写在前面:

   因为工作需要,目前转安卓开发,用的IDE是AS3.2版本,语言的话,用的是Kotlin。由于之前是做.NET的,没接触过这方面的东西,所以完全是小白一枚。所以想着开个博客,以此来记录自己的学习进度。光是环境搭建,自己琢磨了一上午,也上网百度,最后在一以前搞安卓开发的同事的帮助下,才完成环境的搭建。  

--------------------------------------------我是分割线----------------------------------------------------------

Kotlin基础语法

0、常量与变量

常量:用val关键字,只能赋值一次的变量

val 标识符:类型 = 初始化值

例如:val b:Int = 1

变量:用var关键字

例如:var a:Int = 1

变量与常量都可以没有初始化值,如果声明的时候不初始化,则必须声明变量类型,但是在引用前必须初始化。

  1. val c:Int
  2. c =

声明的时候也可以不声明类型,编译器支持自动类型判断。

  1. val d = //系统自动判断变量类型为Int

1、函数定义

函数定义使用关键字fun,参数格式为:参数:类型

例如:fun sum(a:Int,b:Int):Int{return a+b}

上面的例子里定义的sum函数是有返回值的,返回值的类为Int。定义有返回值的函数的格式为: fun 函数名(参数一:类型):返回值类型{函数体}。

上一个例子中,函数体是一个表达式,还可以简写成这种:

fun sum(a:Int,b:Int) = a + b

这种写法由于函数体是一个表达式,所以,函数的返回类型会自动推断出来。

但是,如果有public关键字的话,还得加上返回类型,例如:

  1. public fun sum(a:Int,b:Int):Int = a+ b

public方法必须明确给出返回类型。

如果是无返回值的函数,可以这样定义:

  1. fun sum(a:Int,b:Int):Unit{print( a + b)}

其实,对于返回Unit类型的函数,Unit可以省略不写,对于public函数同样,因此上面的例子也可以这样写:

  1. fun printSum(a:Int,b:Int){print( a + b)}
  2.  
  3. public fun printSum(a:Int,b:Int){print( a + b)}

2、可变长参数函数

函数的变长参数可以用vararg关键字来标识。例如:

  1. fun vars(vararg a:Int){
  2. for(b in a){print(b)}
  3. }
  4.  
  5. fun main(args:Array<String>){
  6. vars(,,,,)
  7. }

上面的例子中定义了一个vars可变长参数函数,在调用的时候,该函数的参数为1,2,3,4,5,这个函数输出1,2,3,4,5.

3、匿名函数(lambda)

  1. fun main(args:Array<String>){
  2. val sumLambda: (Int,Int) -> Int = {x,y -> x+y}
  3. printIn(sumLambda(,)) //输出2
  4. }

以上实例中,sumLambda是一个匿名函数,也就是一个lambda表达式,

(Int,Int)是它的参数列表,->后面的Int返回类型,x+y是函数体。

sumLambda还可以这样来定义:

  1. val sumLambda: (Int,Int) -> Int = fun(x:Int,y:Int) = x+y

也可以这样:

  1. val sumLambda = fun(x:Int,y:Int) = x+y

因为匿名函数已经定义好了参数列表和返回类型,所以可以省略sumLambda的类型声明。

4、字符串模板

$表示一个变量名后者变量值,$varName表示变量值,${varName.fun()}表示变量的方法返回

  1. var a =
  2. var s1 = a is $a //s1的值为“a is 1”
  3. a =
  4. val s2 = ${s1.replace(“ is ”, was ”)}, but now is $a //s2的值为“a was 1,but now is 2”

如果要在字符串中包含$符号,需要对其进行转义,转义符号‘\’。

  1. val a =
  2. val name = Mike
  3. println(“$name have $a\$s”) //输出Mike have 5$s

5、Null检查机制

Kotlin的空安全设计对于声明可为空的参数,在使用时需进行空判断处理,有两种处理方式:

字段后加”!!”

  1. val a:String? = ""
  2. val b = a!!.toInt() //这将会抛出空指针异常
  3. print(b)

运行如下:

另一种字段后加?可不做处理,返回值为null或配合?:做空判断处理

  1. val a:String? = "1"
  2. val b = a?.toInt()
  3. println("$b")
    //配合?:做空判断处理
    val c = a?.toInt?:-1
    print(c)  //如果a?.toInt()为null,则输出-1

PS:我这里试过让a的值为空,但是输出的时候还是会抛出空指针异常,网上找过原因,还没找到,不知道有没有大神来指点一下。

7、类型检测及自动类型转换

要检测一个表达式时候某类型可以使用is运算符

  1. fun addition_isCorrect() {
  2. assertEquals(, + )
  3. val b = getStringLength()
  4. println("$b")
  5.  
  6. }
  7.  
  8. fun getStringLength(obj:Any):Int?{
  9. if (obj is String)
  10. {
  11. //做过类型判断之后,obj会被系统自动转换为string类型
  12. return obj.length
  13. }else
  14. {
  15. return null
  16. }
  17. }

上面的实例中,返回值为null。

  1. fun addition_isCorrect() {
  2. assertEquals(, + )
  3. val b = getStringLength("")
  4. println("$b")
  5.  
  6. }
  7.  
  8. fun getStringLength(obj:Any):Int?{
  9. if (obj is String && obj.length > )
  10. {
  11. //做过类型判断之后,obj会被系统自动转换为string类型
  12. return obj.length
  13. }
  14. return null
  15. }

这个实例返回的是1,在&&运算符的右侧,obj的类型会被自动转换为string。

8、区间

区间的表达式由具有操作符的 . . 的rangeTo函数辅以in和!in形成。区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。

  1. for (i in ..) print(i) //输出1234
  2.  
  3. for (i in ..) print(i) //什么都不会输出
  4.  
  5. val i =
  6. if(i in ..){ //同 1<=i && i<=10
  7. println(i)
  8. }
  9. //还有step指定步长
  10. for (i in .. step ) print(i) //输出13
  11.  
  12. //如果要倒序,可以用downTo
  13. for (i in downTo ) print(i) //输出4321
  14.  
  15. //还可以使用until用来排除结束元素
  16. for (i in until ) print(i) //输出123 

==========================================================

插入代码的时候选择编程语言,没有kotlin……

以上都是在菜鸟教程里头学习的,感兴趣的也可以去Kotlin官网了解。

另,对于Kotlin方面,完全是小白一枚,目前自学ing

Kotlin基础篇(一)的更多相关文章

  1. Kotlin——高级篇(四):集合(Array、List、Set、Map)基础

    在实际的项目开发中,集合的运用可以说是多不胜数.不过Kotlin中的集合运用和Java中还是有很大的差别,他们两者之间,除了集合的类型相同以外,还包含集合的初始化的不同,以及Kotlin对于集合封装特 ...

  2. Kotlin——中级篇(二): 属性与字段详解

    在前面的章节中,详细的为大家讲解到了Kotlin中对类的类的定义.使用.初始化.初始化.类继承等内容,但是在一个类中,几乎上是不可能不出现属性与字段(field)的,这一篇文章就为大家奉上Kotlin ...

  3. Kotlin——高级篇(五):集合之常用操作符汇总

    在上一篇文章Kotlin--高级篇(四):集合(Array.List.Set.Map)基础中讲解到了数组Array<T>.集合(List.Set.Map)的定义与初始化.但是由于篇幅的原因 ...

  4. Kotlin——初级篇(八):关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin--初级篇(三):数据类型详解这篇文章. 在 ...

  5. Kotlin——高级篇(二):高阶函数详解与标准的高阶函数使用

    在上面一个章节中,详细的讲解了Kotlin中关于Lambda表达式的语法以及运用,如果还您对其还不甚理解,请参见Kotlin--高级篇(一):Lambda表达式详解.在这篇文章中,多次提到了Kotli ...

  6. Kotlin——初级篇(二):变量、常量、注释

    在Kotlin中的变量.常量以及注释多多少少和Java语言是有着不同之处的.不管是变量.常量的定义方式,还是注释的使用.下面详细的介绍Kotlin中的变量.常量.注释的使用.以及和Java的对比. 如 ...

  7. Kotlin——初级篇(四):控制语句详解

    在前面 的章节中讲解了Kotlin语言中的数据类型.变量与常量的定义.不了解请参见前面的内容: Kotlin--初级篇(三):数据类型详解. Kotlin--初级篇(二)常量.变量.注释. 下面详细为 ...

  8. Kotlin——中级篇(一):类(class)详解

    在任何一门面向对象编程的语言里,类(class)是非常基础.但也是非常重要的一项组成,通俗的说就是万般皆对象,而所说的对象就是我们生成的类.Kotlin也是如此,下面详细为大家介绍Kotlin中的类的 ...

  9. Kotlin——中级篇(三):可见性修饰符详解

    在Kotlin中,不管是类,对象,接口,构造函数,函数,属性及其设置器都具有可见性修饰符.Kotlin中的可见性修饰符共四种.即public.protected.private.internal.在不 ...

随机推荐

  1. mysql的日期函数介绍

    仅供参考 DAYOFWEEK(date)  返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)mysql> select DAYOFWEEK('1998-02-03 ...

  2. 10 tensorflow在循环体中用tf.print输出节点内容

    代码 i=tf.constant(0,dtype=tf.int32) batch_len=tf.constant(10,dtype=tf.int32) loop_cond = lambda a,b: ...

  3. 软工读书笔记 week 9 ——《构建之法》

    软工读书笔记  week 9                 ——<构建之法> 最近的三周我们正式开始我们的项目.然后我也把<构建之法>中的相关章节再拿出来读了一番.以下是一些 ...

  4. 附加到SQL2012的数据库就不能再附加到低于SQL2012的数据库版本

    附加到SQL2012的数据库就不能再附加到低于SQL2012的数据库版本 昨天我只是将数据库附加到SQL2012,然后各个数据库都做了收缩事务日志的操作 兼容级别这些都没有改 再附加回SQL2005的 ...

  5. Sql_从查询的结果集中分组后取最后有效的数据成新的结果集小记(待优化)

    Dim sql As String = " SELECT xp.*, " sql = sql + " xf_owner.ownername, " sql = s ...

  6. 使用Membership,您的登录尝试不成功。请重试"的解决方法

    提示信息是标准Login控件产生的,打开数据库,检查aspnet_Membership表,检查IsLockedOut字段的值是否为False, 如果为True,表示这个用户锁定了,把它改成False即 ...

  7. ARC中block块作为属性的使用笔记

    ARC中block块作为属性的使用笔记 block较难理解,根据在内存中的分布情况就分为3种类型,根据使用的情形又分为很多很多种.虽然用起来容易,但使用不当会造成内存泄露,虽然都是这么说,但你真的研究 ...

  8. 张高兴的 Windows 10 IoT 开发笔记:0.96 寸 I2C OLED

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

  9. 查看oracle数据库版本

    1. 登录sysdba用户 sqlplus / as sysdba 2. 方法一:v$version SQL> select * from v$version; 3.  方法二:product_ ...

  10. 在Ubuntu Desktop中安装软件

    1. 安装好虚拟机后,可以先打开firefox,看是否可以访问外部的网页. 2. 如果在公司内网,可能访问不起,需要添加代理,确保可以访问外部的网页. 3. 更新软件源 sudo apt update ...