Kotlin学习
eclipse安装kotlin插件地址http://marketplace.eclipse.org/content/kotlin-p;ugin-eclipse
2.Hello World
// 变量的声明和使用 fun main(args: Array<String>) { var name = "张三"; println(name); }
3.常见数据类型
4.变量和常量声明
fun main(args: Array<String>){ var i:Byte = 125; val number = "No123456"; // 用val声明常量不可修改 }
5.kotlin命令行交互式终端
5.1安装kotlin-command-line
https://github.com/JetBrains/kotlin/releases
5.2配置环境变量
5.3命令行输入
kotlinc
:quit 退出命令行
6.函数编写规则
fun plus(a:Int, b:Int) :Int{ return a+b; }
7.字符串占位符
fun diaryGenerater(placeName:String):String { var temple = "字符串模板${placeName} ${placeName.length}"; return temple; }
8.空值处理
// 加?表示该值可以为空 fun heat(str:String?):String { return "热" + str; } fun main(args:Array<String>){ var mess = heat("gou"); println(mess); }
9.when表达式
// when表达式 fun gradeStudent(score:Int) { when (score) { 10 -> println("考了满分") 9 -> println("干的不错") else -> println("=====") } } fun numToChinese(num:Int):String{ var result = when(num){ 1 -> "一" 2 -> "二" 3 -> "三" 4 -> "四" else -> "====" } return result; }
10.区间
// 区间 // 开区间(a,b) fun main(args: Array<String>) { // 区间 var nums = 1 .. 100 // [1,100] 闭区间 for (num in nums) { //println(num) } var nums1 = 1 until 100 // [1,100) 前闭后开区间 for (num in nums1) { //println(num); } var nums3 = 1 .. 16 for (a in nums3 step 2) { //println(a); } var nums4 = nums3.reversed(); for (a in nums4) { println(a); } }
11.List Map
fun main(args: Array<String>) { var lists = listOf("一","二","三","四") for (list in lists) { println(list) } // 按位打印 for ((i,e) in lists.withIndex()) { println("$i,$e") } } import java.util.TreeMap fun main(args: Array<String>) { var map = TreeMap<String,String>() map["好"] = "good" map["学习"] = "study"; println(map["好"]); }
12.函数和函数表达式
// 函数和函数表达式 fun main(args:Array<String>) { var result = add1(3,5) println(result); var i = {x:Int, y:Int -> x+y} // 函数表达式 var result2 = i(3,5) println(result2) var j:(Int,Int) ->Int = {x,y -> x+y} // 函数表达式另一种写法 var result3 = j(3,5) println(result3); } fun add(x:Int,y:Int):Int{ // 普通函数写法 return x+y } fun add1(x:Int,y:Int):Int = x+y // 简写
13.默认参数和具名参数
// 默认参数和具名参数 val Pi = 3.14f fun getRectArea(width:Int,height:Int):Int{ return width * height } fun getCircleLength(PI:Float = Pi,radius:Float):Float{ // 给参数Pi一个默认值 return 2*PI*radius } fun main(args:Array<String>) { var area = getCircleLength(radius = 2.1f) // 具名参数 println(area) }
14.数字字符串相互转换
// 数字字符串相互转换 fun main(args:Array<String>) { var a = "13" var b = 13 a = b.toString() // 数字转字符串 b = a.toInt(); // 字符串转数字 }
15.人机交互
// 人机交互 fun main(args:Array<String>) { while(true){ println("请输入一个数字:") var num1str = readLine() println("请输入第二个数字:") var num2str = readLine() try { var num1:Int = num1str!!.toInt() //确保输入的数字一定不为空 var num2:Int = num2str!!.toInt() println("${num1} + ${num2} = ${num1+num2}") }catch (e:Exception){ println("请输入数字") } } }
16.递归
import java.math.BigInteger // 递归 fun fact(num:BigInteger):BigInteger{ return if (num ==BigInteger.ONE) BigInteger.ONE else num*fact(num- BigInteger.ONE) } fun main(args:Array<String>) { var num = BigInteger("100"); // 计算阶乘 println(fact(num)) } // 尾递归优化 tailrec fun allAdd(num:Int,result: Int):Int{ return if(num ==0) { 1 } else { num + allAdd(num -1,result) } } fun main(args:Array<String>){ var num = 100000 var result = 0 println(allAdd(num -1,result + num)) }
// 面向对象 class Rect(var height:Int,var width:Int) fun main() { var rect01 = Rect(20,20) println("矩形的宽度:${rect01.width}") println("矩形的高度:${rect01.height}") }
package extend open class Father { var chactor:String = "性格内向" open fun action(){ println("+++++") } }
package extend class Son :Father() { override fun action() { println("==========="); } }
package extend abstract class Human(var name:String) { abstract fun eat() }
package extend class Man(name:String):Human(name) { override fun eat() { println("${name}+++++") } }
package extend class Woman(name:String) :Human(name) { override fun eat() { println("-----") } }
package extend interface IMan { fun hunmanF1() }
package extend class Man1:IMan { override fun hunmanF1() { println("==========="); } }
package agent interface IWashBowl { fun washing() }
package agent class BigHeadSon:IWashBowl { override fun washing() { println("====="); } }
package agent class SmallHeadFather:IWashBowl by BigHeadSon(){ override fun washing() { println("我是大头爸爸"); BigHeadSon().washing(); println("========"); } }
package agent object BigHeadSon:IWashBowl { override fun washing() { println("====="); } }
package agent class SmallHeadFather:IWashBowl by BigHeadSon{ override fun washing() { println("我是大头爸爸"); BigHeadSon.washing(); println("========"); } }
sealed class Son { fun sayHello(){ println("大家好") } class donkey:Son() class mule:Son() }
fun main() { var s1 = Son.donkey(); var s2 = Son.mule(); }