函数

  • 函数定义使用fun关键字,参数格式为:参数:类型,需要声明返回类型
fun sum(a:Int, b:Int): Int{
return a+b
}
  • 表达式作为函数体,返回值类型自动推断
fun sum(a:Int, b:Int) = a+b

public fun sum(a:Int, b:Int): Int = a+b   // public 方法则必须明确写出返回类型

fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
} // Unit 返回类型可以省略

public 的含义,以及与其他可见性修饰符的区别见《kotlin -- 可见性修饰符》


变量

  • 定义只读局部变量使用关键字val。只能为其赋值一次。
val a: Int = 2  // 立即赋值
val b = 2 // 自动推断类型
val c: Int // 如果没有赋初值,类型不能省略
c = 3
  • 可重新赋值的变量用var关键字
var x = 2  //  自动推断类型
x+=1
  • 顶层变量
val PI = 3.14  // 常量用大写字母(约定俗成)
var x = 0 fun incrementX() {
x += 1
}

字符串模板

  • '$'表示
val a = 1
// 简单字符模板
val b = "a is $a"
// 表达式字符串模板
val c = "${b.replace("is", "was")}, but now is $a"

空值与null检测

当某个变量的值可能为null的时候,必须在声明处的类型后添加?来标识该引用可空

fun parseInt(str: String): Int? {  // 表示可能返回空值
// ……
}

为保证程序安全,需要对程序进行非空检查:


fun parseInt(str: String): Int? {
return str.toIntOrNull()
} 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("'$arg1' or '$arg2' is not a number")
}
} fun main() {
printProduct("6", "7")
printProduct("a", "7")
printProduct("a", "b")
}

如果你确定这个值一定是非空的,可以用非空断言符!!,将任何值转换成非空的,告诉程序,你放心,我确定不是空值,你运行吧。例如:

// 抛出空指针异常
val res = b!!.length
val ages = age!!.toInt() //age为空返回-1
val ages2 = age?.toInt() ?: -1
  • 类型检测及自动类型转换
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// 做过类型判断以后,obj会被系统自动转换为String类型
return obj.length
} // 这里的obj仍然是Any类型的引用
return null
}

区间

区间表达式具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。

for(i in 1...4) print(i) // 输出 "1,2,3,4"

for (i in 4..1) print(i) // 什么都不输出

// 使用 until 函数排除结束元素
for (i in 1 until 10) { // i in [1, 10) 排除了 10
println(i)
}

kotlin系列文章 --- 2.基本语法的更多相关文章

  1. kotlin系列文章 --- 1.初识kotlin

    简介 Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由Jetbrains设计开发,现在是Android官方开发语言,和Java具有互操作性,可以共存. 为什么选择kotlin? 简 ...

  2. kotlin系列文章 --- 3.条件控制

    if表达式 一个if语句包含一个布尔表达式和一条或多条语句 // 基础用法 var max = a if (a<b) max = b // 加上else var max: Int if(a> ...

  3. [转]T4系列文章之3:T4语法的介绍

    本文转自:http://www.cnblogs.com/damonlan/archive/2012/03/06/2382724.html 因为这段时间一直都没空,我也不知道有没有对人T4感兴趣,但不管 ...

  4. Kotlin Tutorials系列文章

    Kotlin Tutorials系列文章 想写一个有实用价值的Kotlin笔记, 让一线开发一看就懂, 看完就能上手. 当然官方文档更有参考价值了. 这个系列相对于官方文档的大而全来说, 最主要优势是 ...

  5. EF和MVC系列文章导航:EF Code First、DbContext、MVC

    对于之前一直使用webForm服务器控件.手写ado.net操作数据库的同学,突然来了EF和MVC,好多新概念泉涌而出,的确犹如当头一棒不知所措.本系列文章可以帮助新手入门并熟练使用EF和MVC,有了 ...

  6. 开篇:软件项目的整个流程 - IT软件人员学习系列文章

    这段时间闲来无事,就在总结以前的项目经验,然后写成博客的形式以进行记录.本文就对<IT软件人员学习系列文章>做个开篇吧. 对于IT软件的开发来说,无外乎B/S.C/S和Android.iO ...

  7. IT软件人员的技术学习内容(写给技术迷茫中的你) - 项目管理系列文章

    前面笔者曾经写过一篇关于IT从业者的职业道路文章(见笔者文:IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章).然后有读者提建议说写写技术方面的路线,所以就有了本文.本文从初学者到思想 ...

  8. 1、软件工程师要阅读的书籍 - IT软件人员书籍系列文章

    软件工程师要阅读的书籍估计是项目组内最多的.软件工程师处于项目组中最基础的人员储备阶层,与项目的关系最密切.当然,现在是大数据时代,我们无法全部看完所有相关的书籍,只能够先学习工作需要的知识,然后在项 ...

  9. 1、HTML学习 - IT软件人员学习系列文章

    本文做为<IT软件人员学习系列文章>的第一篇,将从最基本的开始进行描述,了解的人完全可以跳过本文(后面会介绍一些工具). 今天讲讲Web开发中最基础的内容:HTML(超文本标记语言).HT ...

随机推荐

  1. poj2186Popular Cows+tarjan缩点+建图

    传送门: 题意: 给出m条关系,表示n个牛中的崇拜关系,这些关系满足传递性.问被所有牛崇拜的牛有几头: 思路: 先利用tarjan缩点,同一个点中的牛肯定就是等价的了,建立新的图,找出其中出度为0的点 ...

  2. 良许 | 听说,有个同事因为关闭服务器被打进 ICU ……

    提问:你是如何关闭电脑的? 普通青年 文艺青年 二逼青年 你是属于哪一种呢? 实话说, 这三种良许都干过~ 还好我没有对服务器这么做, 否则-- 分分钟被打进 ICU -- 1. 关机命令知多少 对于 ...

  3. [DP]换钱的方法数

    题目三 给定数组arr, arr中所有的值都为整数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求换钱有多少种方法. 解法一 --暴力递归 用0 ...

  4. 【Spring】对持久层技术的整合

    一.持久层技术 二.JdbcTemplate 开发步骤: 1. 导入相关的jar包 2. 配置连接池(数据源) 将参数设置到属性文件中: 3. 创建表 4. 编写实体类 5. Dao层实现 5.1 继 ...

  5. Java验证手机号

    在实际开发中我们需要对手机号格式校验,以下是对中国手机号校验的实现. public class PhoneUtils { /** * 中国手机号码 */ private static Pattern ...

  6. Unity3D_10_文件夹目录架构

    一:几个特殊文件夹介绍 1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor 和 /Editor 是一样的,无论 ...

  7. Winform中使用ZedGraph实现曲线图中字体去掉边框

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  8. rabbitmqctl: Error unable to connect to node 'rabbit@xxxxx' nodedown

    RabbitMQ使用rabbitmqctl add_user的时候报以下错误: Creating user "xxxx" ... Error: unable to connect ...

  9. maven下载jar包源码配置

    两个依赖,就想下mail的源码包,因该怎么 <dependencies> <dependency> <groupId>javax.mail</groupId& ...

  10. ubuntu httpie使用方法

    HTTPie 是用 Python 写的,所以你可以在几乎所有地方(Linux,MacOSX,Windows)安装它.而且,在大多数的 Linux 发行版中都有编译好的安装包. Debian,Ubunt ...