Kotlin语言学习笔记(1)
fun main(args: Array<String>) {
println("Hello, World!")
}
基本语法
- 声明常量用val,声明变量用var,声明函数用fun。
类型修饰采用后置语法,省略时由编译器根据上下文自行推导:
声明常量和变量时用冒号指示类型,自带初值时类型修饰可省略。
声明函数时用冒号指示返回类型。
若函数体采用代码块形式,则没有返回值时返回类型可省略,有返回值时返回类型不能省略。
若函数体采用表达式形式,则无论有没有返回值返回类型均可省略。常量 变量 函数(有返回值) 函数(无返回值) Kotlin val i = 10
val i: Int = 10var i = 10
var i: Int = 10fun f(n: Int): Int {return n + 1}
fun f(n: Int): Int = n + 1
fun f(n: Int) = n + 1fun f(n: Int): Unit {println(n)}
fun f(n: Int) {println(n)}
fun f(n: Int): Unit = println(n)
fun f(n: Int) = println(n)Swift let i = 10
let i: Int = 10var i = 10
var i: Int = 10func f(n: Int) -> Int {return n + 1} func f(n: Int) -> () {print(n)}
func f(n: Int) -> Void {print(n)}
func f(n: Int) {print(n)} - 字符串模板(string template)/ 字符串插值(string interpolation)的语法形式为 $变量 以及 ${表达式}。
字符串中如果需要表示 $ 字符,可使用 ${'$'} 这种转义形式。
多行字符串使用三引号"""。
字符串模板/字符串插值 多行字符串 Kotlin val x = 10; val y = 20
val s = "x=$x, y=${y + 1}"val price = """
${'$'}9.99
"""Swift let x = 10, y = 20
let s = "x=\(x), y=\(y + 1)"var price = """
$9.99
"""C# int x = 10, y = 20;
var s = $"x={x}, y={y + 1}";var price = @"
$9.99
"字符串的值 x=10, y=21 <空行>
$9.99
<空行> - 区间
Kotlin Swift 输出 for (i in 1..4) print(i) for i in 1...4 {print(i, terminator: "")} 1234 for (i in 4..1) print(i) // for i in 4...1 {print(i, terminator: "")} // error 空字符串 for (i in (1..4).reversed()) print(i) for i in (1...4).reversed() {print(i, terminator: "")} 4321 for (i in 4 downTo 1) print(i) for i in stride(from: 4, through: 1, by: -1) {print(i, terminator: "")}
for i in stride(from: 4, to: 0, by: -1) {print(i, terminator: "")}4321 for (i in 1..4 step 2) print(i) for i in stride(from: 1, through: 4, by: 2) {print(i, terminator: "")}
for i in stride(from: 1, to: 4, by: 2) {print(i, terminator: "")}13 for (i in 4 downTo 1 step 2) print(i) for i in stride(from: 4, through: 1, by: -2) {print(i, terminator: "")}
for i in stride(from: 4, to: 1, by: -2) {print(i, terminator: "")}42 for (i in 1 until 10) print(i) for i in 1..<10 {print(i, terminator: "")} 123456789 val x = 3
if (x in 1..10) println(x)
if (x !in 1..10) println(x)let x = 3
if case 1...10 = x {print(x)}
if 1...10 ~= x {print(x)}
if (1...10).contains(x) {print(x)}
if !(1...10).contains(x) {print(x)}3 - 相等
结构相等/值相等 引用相等 Kotlin a == b
a != ba === b
a !== bSwift a == b
a != ba === b
a !== b
控制流
Kotlin语言中的控制流语句有:
- if...else...语句(表达式):用于处理双分支
val a = 3; val b = 4
val m1: Int
if (a < b) m1 = a else m1 = b
val m2 = if (a < b) a else b
val m3 = if (a < b) {println("a"); a} else {println("b"); b} - 不带参数的when表达式:用于处理多分支
fun Int.isOdd() = this % 2 == 1
fun Int.isEven() = this % 2 == 0
val x = 3
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
} - 带参数的when表达式:用于处理值匹配
单个值,多个值,表达式,在与不在某个区间,是与不是某个类型,以上所有情况之外fun describe(obj: Any): String =
when (obj) {
1 -> "One"
2, 3 -> "Two or Three"
in 4..6 -> "Four to Six"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
println(describe(1)); // One
println(describe(2)); // Two or Three
println(describe(4)); // Four to Six
println(describe(7)); // Not a string
println(describe(9L)); // Long
println(describe(10.0)); // Not a string
println(describe("abc")); // Unknown - for...in...语句,while语句,do...while语句:用于处理循环
函数
- 函数体有代码块以及表达式两种形式。使用表达式形式时可省略返回类型。
- 没有返回值的函数可以被视为返回类型为 Unit 的函数。
- 函数可以嵌套。局部函数可使用外部函数的变量。
fun outside() {
var a = 1
fun inside() {
a++;
}
inside(); // a==2
} - 函数可以带缺省参数。
- 调用函数时可以使用参数名。
fun add(a: Int = 1, b: Int = 2) = a + b
println(add()); // 3
println(add(3)); // 5
println(add(b = 3)); // 4 - 变长参数:只能有一个,使用 vararg 修饰符,在函数内部被视为数组。
变长参数 Kotlin fun avg(vararg numbers: Double): Double {} Swift func avg(numbers: Double...) -> Double {} C# double Avg(params double[] numbers) {} Java double avg(double... numbers) {} - 函数是一等公民。可以作为函数的参数,也可以成为函数的返回值。
函数的类型(有返回值) 函数的类型(没有返回值) Kotlin (Int, Int) -> Boolean (Int, Int) -> Unit Swift (Int, Int) -> Bool (Int, Int) -> Void C# Func<int, int, bool> Action<int, int> - 类的方法被称为成员函数。
- 可以使用扩展函数来为既有的类添加功能。
- 中缀形式:仅有一个参数的成员函数以及扩展函数在使用 infix 修饰符修饰的情况下,调用方可使用中缀形式。
Kotlin语言学习笔记(1)的更多相关文章
- Kotlin语言学习笔记(2)
类(classes) // 类声明 class Invoice { } // 空的类 class Empty // 主体构造器(primary constructor) class Person co ...
- Kotlin语言学习笔记(6)
运算符重载(Operator overloading) 一元运算符 Expression Translated to +a a.unaryPlus() -a a.unaryMinus() !a a.n ...
- Kotlin语言学习笔记(5)
委托模式(Delegation) 类的委托 interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fu ...
- Kotlin语言学习笔记(3)
数据类(Data Classes) data class User(val name: String, val age: Int) 编译器自动生成的有: equals()/hashCode() toS ...
- Kotlin语言学习笔记(7)
反射 // 反射 val c = MyClass::class val c2 = MyClass::class.java // 获取KClass的引用 val widget: Widget = ... ...
- Kotlin语言学习笔记(4)
函数 // 函数定义及调用 fun double(x: Int): Int { return 2*x } val result = double(2) // 调用方法 Sample().foo() / ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
随机推荐
- [UE4]模拟物理子弹
模拟物理子弹有时候会穿透对象,所以不建议使用
- android 将项目下的数据库拷贝到sd卡中
/** * 将项目下的数据库拷贝到sd卡中 */ public static boolean copyDbToSdCard() { FileInputStream fis = null; FileOu ...
- [UE4][Canvas]用C++代码绘制血条(HealthBar)
转自:http://aigo.iteye.com/blog/2275110 参考自Epic官方项目StrategyGame 血条效果: StrategyHUD.h StrategyHUD.cpp
- BCGcontrolBar(二) 改变RIBBON字体
在xp系统下 BCGcontrolBar字体会发虚 这时候重新设置下字体就行了 在单文档的MainFram的onCreate中加入 CFont *font=m_wndRibbonBar.GetFont ...
- BZOJ3812主旋律
/* 这道题其实没有看懂 所以整理一下吧 首先思想转化成所有方案减去不强联通的方案 不强联通的方案相当于很多强联通分量缩点后的dag 转化成子问题, 问很多点的dag方案数 然后枚举作为出度为0的点集 ...
- python函数的创建和函数参数
[1]#函数的作用:1.减少重复代码 2.方便修改,更容易扩展3.保持代码的一致性 [2]#函数简单的定义规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须 ...
- TableStore:创建SyncClient+getRow读取一行数据
1.通过控制台或者客户端,在TableStore中新建了实例owlforest,在实例详情中获取到实例访问地址endPoint 2.新建表user,确定主键为userid(Interger)类型,因为 ...
- 1-scala基础
1.scala ①定义:Scala设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. ②特点:优雅.简洁.一行代码抵得上多 ...
- 安全测试4_客户端的安全漏洞(XSS、CSRF、点击劫持、URL跳转)
那个fanh前面学习的都是基础,现在开始正式学习下安全的知识,这一章主要讲解客户端常见的安全漏洞. 看到这个不错,给大家记一下: 1.常见的安全事件: 2.XSS(跨站脚本),英文全称:Cross S ...
- [python] pyCharm 右击出现run unittest 解决办法
最近在使用 pyCharm 的时候发现一个情况,右击时出现 "unittests for ...",这时候如果继续点击 run ,可能会出现错误. 看到网上的介绍说,原因是程序方法 ...