简介
话说俄罗斯的程序员觉得Java语言用起来不牛逼也不方便,于是开始搞事情,发明了即牛逼又方便Kotlin用于提高生产效率,那帮俄罗斯的哥们儿在一个叫科特林的岛上编程,所以语言叫Kotlin。

Eclipse下安装Kotlin插件
help -> Eclipse Marketplace ->find ->Kotlin 安装 重启即可

Kotlin编写第一个程序
fun main(args: Array<String>) {
println("Hello Kotlin")
}
这个没啥分析头。先背下来 背下来
变量和输出
Kotlin的变量类型
Byte
Short
Int
Long
Float
Double
String


Kotlin的自动类型推断
fun main(args: Array<String>) {
var i = 9
i = 9999
//超过了int的范围 编译报错
i = 9999999999999
//Kt推断这是一个长整形
var j = 9999999999999
//Kt推断这是一个字符串
var s = "hahha"
println(i)
}
Kotlin的显示数据声明
fun main(args: Array<String>) {
//Kotlin的显示数据声明
var i: Int = 9
i = 9999
var j:Long = 9999999999999
var s:String = "hahha"
println(i)
println(j)
println(s)
}
常量的定义val(value)
//常量的定义 常量value不能被再次赋值
val number = "NO.8888"
总结:
var声明变量
val声明常量
不同的数据类型用不同的容器保存
Kotlin会通过等号后面的值自动推断数据类型
可以用显示的指定数据类型
常见的容器类型
Byte
Short
Int
Long
Float
Double
String
函数
Kotlin函数编写规则
fun 函数名(参数名:参数类型):返回值类型 {
函数体
}
fun main(args:Array<String>):Unit {
}
Unit表示没有返回值,可以省略不写
fun main(args:Array<String>) {
print1star()
print2star()
print3star()
print2star()
print1star()
}
fun print1star() {
println(" * ")
}
fun print2star() {
println(" *** ")
}
fun print3star() {
println("*****")
}
简易计算器
fun main() {
val add = add(2,2)
val jian = jian(2,2)
val cheng = cheng(2,2)
val chu = chu(2,2)
println("add = " + add)
println("jian = " + jian)
println("cheng = " + cheng)
println("chu = " + chu)
}
fun add(a: Int, b: Int): Int {
return a + b
}
fun jian(a: Int, b: Int): Int {
return a - b
}
fun cheng(a: Int, b: Int): Int {
return a * b
}
fun chu(a: Int, b: Int): Int {
return a / b
}
kotlin1.3的main()函数可以不传参数
Kotlin环境配置(仿照JDK的安装配置)
1,在GitHub上下载kotlin-compiler
2,配置环境:Kotlinc的安装目录
KOTLIN_HOME
D:\work\Kotlin\kotlinc
在path中添加:
%KOTLIN_HOME%\bin
3,在CMD终端下输入kotlinc命令

Kotlin命令交互式终端编程
C:\Users\zhang>KOTLINC
Welcome to Kotlin version 1.1.2 (JRE 1.8.0_121-b13)
Type :help for help, :quit for quit
>>> 4>6
false
>>> Math.pow(2.0,2.0)
4.0
>>> Math.sqrt(6.0)
Kotlin字符串模板 ${XXX}
fun main() {
var one = createDayliLife("春熙路")
println(one)
}
fun createDayliLife(placeName: String): String {
var temple = """
今天天气晴朗,我去${placeName}玩,
首先映入眼帘的是${placeName} ${placeName.length}个大字
"""
return temple
}
程序运行结果
今天天气晴朗,我去春熙路玩,
首先映入眼帘的是春熙路 3个大字
Kotlin条件控制语句if else
fun shuai(score: Int): String {
if (score > 80) {
return "这是一个帅哥"
} else {
return "这不是一个帅哥"
}
}
调用
var score = 79
println(shuai(score))
比较两个数中的最大数
fun max(a: Int,b: Int): Int{
if (a > b) {
return a
} else {
return b
}
}
调用:
var a = 5
var b = 10
println("${a}和${b}中最大的数是${max(a,b)}")
Kotlin中字符串比较
var name1 = "andy"
var name2 = "Andy"
println(name1 == name2)
println(name1.equals(name2))
println(name1.equals(name2,true))
println(name1.equals(name2,false))
结果哦
false
false
true
false
Kotlin空值处理
默认参数是非空,在编译时不能够传null,加上?号表示参数可以为空,可以传null
//默认参数是非空,在编译时不能够传null,加上?号表示参数可以为空,可以传null
fun heat(str: String?): String {
return "热${str}"
}
调用
println(heat(null))
!!表示不为空
println("请输入第一个数字:")
val num1 = readLine()
println("请输入第二个数字:")
val num2 = readLine()
//!!表示不为空
var numm1: Int = num1!!.toInt()
var numm2:Int = num2!!.toInt()
println("${num1}+${num2}的和为${numm1 + numm2}")
结果
请输入第一个数字:
2
请输入第二个数字:
3
2+3的和为5
Kotlin的when表达式
有点像Java的switch case但又更加简洁强大
//10分 满分 9干得不错 8还可以 7分还需要努力 6分刚及格 其他 需要加油哦
fun gradeStu(score: Int) {
when(score) {
10 -> println("10分 满分")
9 -> println("9干得不错")
8 -> println("8还可以")
7 -> println("7分还需要努力")
6 -> println("6分刚及格")
else -> println("需要加油哦")
}
}
调用
gradeStu(9)
结果
9干得不错
Kotlin中的loop和range
计算从1到100的和
//定义了一个1到100的数组
var nums = 1 .. 100
var result = 0
for (num in nums) {
print("${num},")
result = result + num
}
println("结果是${result}")
两边都是闭区间
var nums = 1 .. 100 //[1,100]
左闭右开
var nums2 = 1 until 5
var nums2 = 1 until 5
for (num in nums2) {
print("${num},") //1,2,3,4,
}
step
var num3 = 1 .. 16
for (num in num3 step 2) {
print("${num},") //1,3,5,7,9,11,13,15,
}
list和map
list
var list = listOf("买鸡蛋","买大米","买水果","买杜蕾斯")
for ((i,e) in list.withIndex()) {
println("${i} ${e}")
}
结果
0 买鸡蛋
1 买大米
2 买水果
3 买杜蕾斯
map
var map = TreeMap<String,String>()
map["good"] = "好好"
map["study"] = "学习"
map["day"] = "天天"
map["up"] = "向上"
println(map["study"]) //学习
函数和函数式表达式
fun main() {
var x = 2
var y = 3
println(add1(x, y)) //5
println(add2(x, y)) //5
//把函数表达式赋值给i
var i = { x: Int, y: Int -> x + y }
var result = i(x, y)
println(result)
var j: (Int, Int) -> Int = { x, y -> x + y }
var result2 = j(x,y)
println(result2)
}
fun add2(x: Int, y: Int): Int = x + y
fun add1(x: Int, y: Int): Int {
return x + y
}
默认参数和具名参数
求圆的面积
val PI = 3.14f
fun getArea(pi: Float, r: Float):Float {
return pi * r * r
}
fun getArea2(pi: Float = PI, r: Float):Float {
return pi * r * r
}
调用
var r = 2.0f
println(getArea(PI,r))//默认参数
println(getArea2(r = r))//具名参数
字符串和整形转换
var a = "13"
var b = 13
a = b.toString() //字符串转整形
b = a.toInt() //整形转字符串
异常处理
println("请输入第一个数字:")
val num1 = readLine()
println("请输入第二个数字:")
val num2 = readLine()
try {
//!!表示不为空
var numm1: Int = num1!!.toInt()
var numm2:Int = num2!!.toInt()
println("${num1}+${num2}的和为${numm1 + numm2}")
} catch (e:Exception) {
println("请输入正确的数据")
}
结果
请输入第一个数字:
1
请输入第二个数字:
a
请输入正确的数据
递归
计算5的阶乘
fun fac(num: Int): Int {
if (num == 1) {
return 1
} else {
return num * fac(num - 1)
}
}
println(fac(5))
计算100的阶乘,它的结果已经超过了Int和Long的范围,用BigInteger来解决
fun facBig(num:BigInteger):BigInteger {
if (num == BigInteger.ONE) {
return BigInteger.ONE
} else {
return num * facBig(num - BigInteger.ONE)
}
}
var bigNum = BigInteger("100")
println(facBig(bigNum))
结果:
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
累加的操作:从1加到100
fun oldAdd(num: Int): Int {
if (num == 1) {
return 1
} else {
return num + oldAdd(num - 1)
}
}
println(oldAdd(100)) //5050
如果递归算100000的累加和,Java是做不到的报错StackOverflowError
解决方案:
Kotlin的尾递归优化tailrec
告诉计算机 让它计算100000次
//尾递归优化
tailrec fun oldAdd(num: Int,result: Int): Int {
println("这是倒数第${num}次运算----结果为${result}")
if (num == 0) {
return 1
} else {
return oldAdd(num - 1,result + num)
}
}
var res = 0
println(oldAdd(100000,res)) //
// 这是第1次运算----结果为705082703
// 这是第0次运算----结果为705082704
网友评论