1. 函数

  kotlin中支持顶级函数(文件内直接定义函数),对比JAVA来说,JAVA的程序入口是main方法,kotlin也一样,入口为main函数

  首先看下kotlin中main函数的定义。

fun main(args: Array<String>) {
println("Hello, world!")
}

语法简介:

  fun是关键字,定义函数时使用的,参数args是参数名,冒号后跟参数类型,此处的参数类型为Array(kotlin内置类型)

  通过示例可以看出,kotlin也支持泛型。println()是kotlin内置的控制台打印函数

  这样就完成了main函数的定义,请自行和JAVA的main方法作对比,一个很明显的区别就是main可以直接定义在文件内

  成为顶级函数,不需要依托于类。

  另外从上面的例子中可以看出,kotlin的语句结尾是不需要分号的

1.1 kotlin中定义和使用函数

  函数的常规定义方式:

fun max(a: Int, b:Int): Int {
return if(a > b) a else b
}

此处定义了一个比较两个参数大小的函数,返回大的值,函数定义没什么可说的,在函数的参数列表后跟了一个冒号 : Int,

这个意思表示该函数返回一个Int类型的值

同JAVA一样,if语句后就一行代码时可以省略大括号,另外在kotlin中没有三元运算符,所以此处用if else代替

另外值得一提的是,和JAVA的if语句不一样,kotlin中的if是表达式。表达式会经过计算后产生一个结果值,而语句块不会

这是一个很重要的区别,基于这种区别,我们还可以采用其他方式定义函数,下边你将会看到。

  函数的表达式定义形式:

fun max(a: Int, b: Int): Int = if (a > b) a else b

这里的函数和上边的函数定义实现一样的功能。但是写法不同,直接把if表达式赋值给了函数的返回值,这里

正是利用了表达式会计算产生一个结果值的特性,才可以这样定义函数

  更进一步,省略函数返回值

fun max(a: Int, b: Int) = if (a > b) a else b

这个定义相比上一个更简介,它省略了函数的返回值定义,那么函数返回什么?会不会有返回值,如果有,又返回什么类型?

首先函数会有返回值,而函数的返回值则取决于if表达式计算后产生的值,这里函数参数为两个Int类型,if表达式返回其中一个较大的

很显然返回值还是Int,这些工作编译器已经帮你做了。

2. 变量:

  2.1 类型的自动推断:

  kotlin中定义变量,使用val和var关键字,两者的区别稍后会说明,定义变量示例:

val name = "test"
val age = 27

  上边代码定义了两个变量,使用关键字val声明,没有指定类型,编译器会根据变量值自动推断类型,比如这里的name为String,age为Int

  如果你想代码更清晰,也可以显示指定类型:

val name: String = "test"

  显示指定name为String类型

  上边我们说了定义变量有两种关键字分别为val和var,他们有什么区别?

  val定义的变量对应JAVA中final关键字定义的变量,第一次赋值后不允许改变该值。也就是说val定义的是不可变对象

  var定义的则是可变对象。允许后续赋值更改变量内容。

  那举个简单的例子,在javaBean中如果需要setter赋值的属性,很显然不应该使用val,因为后续调用setter赋值会报错

  而无需赋值,只涉及取值的getter属性,则可以定义成val

3. 函数的调用

  知道了变量的声明和函数的定义,就可以调用函数了。

  依旧拿我们刚才定义的max函数来说,我要调用max得到两个数中较大的,只要在main函数中调用max即可

fun main(args: Array<String>) {
val maxNum = max(1,2)
println(maxNum)
}

这样就可以了。

4. 字符串模板

  在Java中,如果想在打印语句中打印某个变量的值,通常使用字符串拼接的方式,例如:System.out.println("hello " + name + " !");

  kotlin提供了字符串模板,可以使用更优雅的形式解决这类问题,同样的输出在kotlin中的写法:println("hello $name !")

  $符号即为字符串打印模板中的变量引用符号。直接在字符串中采用$+变量名即可引用变量,无需拼接

kotlin学习二:初步认识kotlin的更多相关文章

  1. kotlin学习三:初步认识kotlin(第二篇)

    上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数.本章再来看一些其他有用的东西 包括: 1. kotlin代码组织结构 2. when语法 3. 循环迭代语法 4. try表达式 1 ...

  2. 浅谈Kotlin(二):基本类型、基本语法、代码风格

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 通过上面的文章,在A ...

  3. 000 初步使用Kotlin开发Android应用

    Kotlin是Jetbrians公司开发的一款编程语言,基于jvm兼容Java. 要求 IDE:IDEA或者Android Studio(简称studio)对Kotlin语言有所了解,官方文档:htt ...

  4. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  5. 【Kotlin】初识Kotlin(二)

    [Kotlin]初识Kotlin(二) 1.Kotlin的流程控制 流程控制是一门语言中最重要的部分之一,从最经典的if...else...,到之后的switch,再到循环控制的for循环和while ...

  6. kotlin学习笔记-异常好玩的list集合总结

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...

  7. kotlin 学习感受

    目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...

  8. Kotlin 学习笔记(一)

    (Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...

  9. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

随机推荐

  1. LeetCode OJ:Find Median from Data Stream(找数据流的中数)

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  2. 二进制包形式安装mysql5.7.17

    mysql5.7与mysql5.5的安装方式有些区别,如果按照5.5的方式来安装5.7就会有很多报错信息,下面介绍mysql5.7.17的二进制安装方式. 首先安装依赖包: yum -y instal ...

  3. 20165202 week10课下补做

    相关知识点总结 在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法: 有类的源代码,针对某一成员变量排序,让类实现Comparable接口,调用Collection.sort( ...

  4. linux生成随机密码的十种方法

    Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,并输出结 ...

  5. 初识jQuery(1)

    1.Jquery是对JavaScript对象和函数的封装(JavaScript框架) 2.怎么使用Jquery 第一步:把js文件放入项目中 第二步:在页面引用jquery <script ty ...

  6. 使用微软T4 template进行代码生成

    使得软件工程高效开发的主要方法是复用.复用的宗旨是提高设计的内聚性,主要包括:函数,类,模式,组件,框架等等.而有些应用场景并都是可以直接拿来现成代码使用的,有时代码库的代码不是那么容易修改,或者根本 ...

  7. 记录一下前端ajax实现增删改功能的步骤

    主要依赖三个按钮:新增,删除,编辑 新增:点击时创建新的LI或者TR并append到父级里,此时无需调动后台接口(如果新增需要弹窗输入val则可以调用): 删除:判断this是否有后台传过来的id值, ...

  8. Graham扫描法

    Graham扫描法求凸包的模板 运行之后可以得到存有凸包顶点的栈s和栈顶指针top,n代表总点数 这个模板我当时调了很久,主要难点有两个,一个是正确的极角排序,一个是出栈入栈的细节操作,逆时针扫描,这 ...

  9. Linux 交换eth0和eth1

    一.参考文档: 如何交换eth0和eth1? http://bbs.chinaunix.net/archiver/tid-2026056.html 二.具体操作 #echo `ifconfig -a` ...

  10. vue-cli搭建及项目目录结构

    今天总结一下vue的脚手架的搭建.很简单,今天我们就来说一下 一.vue 脚手架的搭建. 对于脚手架的具体搭建方法,我这里不在很详细的书写,具体方法我推荐菜鸟教程的方法,和具体,你一步一步的来就可以实 ...