1、kotlin(肯棱鳞) 开发区块链 基于jvm的开发语言
2、kotlin 语言特点
集合各种语言的优点:java scala c# groovy python c c++
简介 ---主要针对java
安全 ---通过编译可以规避空指针安全
互操作 ---可以配合java
oop+FP ---支持面向对象和函数编程
协程 ---和异步操作相同,相当于线程,但比java结束空间
DSL(领域特定语言)
3、kotlin的前景
kotlin script(gradle)
java 虚拟机应用
web kotlinee
javafx
前端开发 kotlinjs
android开发
ios开发
kotlin Native程序(完全抛弃jvm虚拟机)
全栈工程师
4、基本语法:HelloWrold
fun main(args : Array<String>):Unit{ //函数 Unit 相当与void 无返回值
println("HelloWorld");
}
(1)基本数据类型 8中基本类型,都是大写 ---类似于java
var a:Boolean =true
var b:Byte=10
var c:Short=20
var d:Char='a'
var e:int=10
var f:Float =10.1234567
var g :Double=1.1234567
var h:Long =10L
(2)智能类型推断
var a=true ---如果有赋值,可以不用写数据类型,可以自己判断出他是Boolean类型
var b=10
(3)原样输出字符串
Java
String s="中国\n广东省\n深圳市"
Kotlin 也可以同上写法
var s="""
中国
广东省
深圳市
""".trimIndent()
(4) 区间
定义1到100
var range=1..100
定义‘a’到‘Z’
val charRange1=‘a’..'z'
(5)空安全处理
Java
string s=null;
s.length(); ---空指针异常
Kotlin
var s:String=null ---错误
var s:String?=null
s?.length ---空安全调用 当s!=null时,才会调用。length
(6)常见Exception有哪些
JAVA
if(data!=null&&data.value!=null){
data.value.toString();
}
Kotlin
data?.value?.toString()
(7)apply表达式
Java
List<String> list=null;
if(list!=null){
list.add("张三");
list.add("李四");
list.add("王五");
}
Kotlin
list?.add("张三");
list?.add("李四");
list?.add("王五");
或 apply函数
2、kotlin 语言特点
集合各种语言的优点:java scala c# groovy python c c++
简介 ---主要针对java
安全 ---通过编译可以规避空指针安全
互操作 ---可以配合java
oop+FP ---支持面向对象和函数编程
协程 ---和异步操作相同,相当于线程,但比java结束空间
DSL(领域特定语言)
3、kotlin的前景
kotlin script(gradle)
java 虚拟机应用
web kotlinee
javafx
前端开发 kotlinjs
android开发
ios开发
kotlin Native程序(完全抛弃jvm虚拟机)
全栈工程师
4、基本语法:HelloWrold
fun main(args : Array<String>):Unit{ //函数 Unit 相当与void 无返回值
println("HelloWorld");
}
(1)基本数据类型 8中基本类型,都是大写 ---类似于java
var a:Boolean =true
var b:Byte=10
var c:Short=20
var d:Char='a'
var e:int=10
var f:Float =10.1234567
var g :Double=1.1234567
var h:Long =10L
(2)智能类型推断
var a=true ---如果有赋值,可以不用写数据类型,可以自己判断出他是Boolean类型
var b=10
(3)原样输出字符串
Java
String s="中国\n广东省\n深圳市"
Kotlin 也可以同上写法
var s="""
中国
广东省
深圳市
""".trimIndent()
(4) 区间
定义1到100
var range=1..100
定义‘a’到‘Z’
val charRange1=‘a’..'z'
(5)空安全处理
Java
string s=null;
s.length(); ---空指针异常
Kotlin
var s:String=null ---错误
var s:String?=null
s?.length ---空安全调用 当s!=null时,才会调用。length
(6)常见Exception有哪些
JAVA
if(data!=null&&data.value!=null){
data.value.toString();
}
Kotlin
data?.value?.toString()
(7)apply表达式
Java
List<String> list=null;
if(list!=null){
list.add("张三");
list.add("李四");
list.add("王五");
}
Kotlin
list?.add("张三");
list?.add("李四");
list?.add("王五");
或 apply函数
list?.apply{
add("张三");
add("李四");
add("王五");
}
(8)标签处返回
loop@for (c1 in s1){
for(c2 in s3){
if(c1=='b1'&& c2=='2'){
break@loop ---直接可以跳出外层for 跳出打标签出
}
}
}
(9) statement & Exception
java 声明式语法:
声明 no return value
public int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
kotlin 表达式语法
表达式 return value
fun max(a:Int,b:Int):Int{---函数 函数名 参数 返回值
return if(a>b){
a
} else{
b
}
}
只有一个时
fun max(a:Int,b:Int){
return if(a>b) a else b
}
Java
public String todo(){
if(age>=1|| age<=6){
return "没有上学";
}else if(age==7){
return "开始上学";
}else if (age==12){
return "开始上中学";
} else if(age==15){
return "开始上高中";
}else{
return "开始上社会大学";
}
}
Kotlin
fun rodo():String{
return when(age){ ---相当于switch
in 1..6->"没有上学" --in 相当于in
7->"开始上小学"
12->"开始上中学"
15->"开始上高中"
18->"开始上大学"
else->"在上社会大学"
}
}
add("张三");
add("李四");
add("王五");
}
(8)标签处返回
loop@for (c1 in s1){
for(c2 in s3){
if(c1=='b1'&& c2=='2'){
break@loop ---直接可以跳出外层for 跳出打标签出
}
}
}
(9) statement & Exception
java 声明式语法:
声明 no return value
public int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
kotlin 表达式语法
表达式 return value
fun max(a:Int,b:Int):Int{---函数 函数名 参数 返回值
return if(a>b){
a
} else{
b
}
}
只有一个时
fun max(a:Int,b:Int){
return if(a>b) a else b
}
Java
public String todo(){
if(age>=1|| age<=6){
return "没有上学";
}else if(age==7){
return "开始上学";
}else if (age==12){
return "开始上中学";
} else if(age==15){
return "开始上高中";
}else{
return "开始上社会大学";
}
}
Kotlin
fun rodo():String{
return when(age){ ---相当于switch
in 1..6->"没有上学" --in 相当于in
7->"开始上小学"
12->"开始上中学"
15->"开始上高中"
18->"开始上大学"
else->"在上社会大学"
}
}
(10)默认参数和具名参数
Java
public void send(String path,String method){
Java
public void send(String path,String method){
//网络请求
}
public void send(String path){//默认method是GET
//GET网络请求
}
Kotlin
fun send(path:String,method:String="GET"){
}
public void send(String path){//默认method是GET
//GET网络请求
}
Kotlin
fun send(path:String,method:String="GET"){
}
调用
send(path,method)
send(path,"www.baidu.com")
智能类型转换
Java
Animal animal =new Dao();
if(animal istanceof Dog){
Dog dog=(Dog) animal;
dog.wangwang();
}
Kotlin
if(animal is Dog){---is 相当于instanceof
animal.wangwang()
}
(11)by lazy
class person{
val name byLazy{"张三"} ---惰性加载,线程安全 val只能初始化一次
}
(12)扩展函数
Java
public class StringUtils{
public static boolean isEmpty(String str){
return str==null||str.length()==0;
}
}
Kotlin
fun String.isEmpty():Boolean{
return this=null || this.length==0
}
fun main(args:Array<String>):Unit{
val str="张三"
str.isEmpty()
}
(13)Object 单例
Java
调用
send(path,method)
send(path,"www.baidu.com")
智能类型转换
Java
Animal animal =new Dao();
if(animal istanceof Dog){
Dog dog=(Dog) animal;
dog.wangwang();
}
Kotlin
if(animal is Dog){---is 相当于instanceof
animal.wangwang()
}
(11)by lazy
class person{
val name byLazy{"张三"} ---惰性加载,线程安全 val只能初始化一次
}
(12)扩展函数
Java
public class StringUtils{
public static boolean isEmpty(String str){
return str==null||str.length()==0;
}
}
Kotlin
fun String.isEmpty():Boolean{
return this=null || this.length==0
}
fun main(args:Array<String>):Unit{
val str="张三"
str.isEmpty()
}
(13)Object 单例
Java
public class NetManager{
private static NetManager netManager=new Netmanager();
private Netmanager();
public static NetManager getInstance(){
return netManager;
}
}
Kotlin
object NetManager{ ---前面加Object就是单例模式,以后不能在new出来
}
(14)data class
java 的bean类
Kotlin数据类
data class Person(var name:String,var age:Int);
(15)函数式编程
高级函数 可以作为参数或返回值
fun test():()->Unit{--返回值是函数 没有返回值
var a=10
return {
println(a++)
}
}
fun cacl(a:Int,b:Int,block:(Int,Int)->Int):Int{
return block(a,b)
}
Lambda表达式
sum =cacl(a,b,{a,b-> ---匿名函数
a+b
})
(16)接口回调和函数回调
Java 接口回调
private static NetManager netManager=new Netmanager();
private Netmanager();
public static NetManager getInstance(){
return netManager;
}
}
Kotlin
object NetManager{ ---前面加Object就是单例模式,以后不能在new出来
}
(14)data class
java 的bean类
Kotlin数据类
data class Person(var name:String,var age:Int);
(15)函数式编程
高级函数 可以作为参数或返回值
fun test():()->Unit{--返回值是函数 没有返回值
var a=10
return {
println(a++)
}
}
fun cacl(a:Int,b:Int,block:(Int,Int)->Int):Int{
return block(a,b)
}
Lambda表达式
sum =cacl(a,b,{a,b-> ---匿名函数
a+b
})
(16)接口回调和函数回调
Java 接口回调
Kotlin 函数回调
private Lateinit var callBack:(String)->Unit ----Lateinit 延迟初始化
fun setCallBack(callBack:(String)->Unit){
this.callBack=callBack
}
fun execute(){
//业务逻辑满足回调
callback("张三");
}
(17)DSL 领域特定语言
html{
head{
title{+"XML encoding with Rotlin"}
}
body{
h1{+"XML encoding with Rotlin"}
}
}
(18)用于android
(19)js应用 编写kotlin代码 js自动生成
1、获取canvas 画布
val canvas =document.getElementById("canvas") as HTMLcanvsElement
2、代码中不能直接操作canvas 需要通过context
val ctx=canvas.getContext("2d") as canvasRenderingContext2D
//宽度和高度
val width=window.innerwidth
val heigth=window.innerHeight
(20)java fx
private Lateinit var callBack:(String)->Unit ----Lateinit 延迟初始化
fun setCallBack(callBack:(String)->Unit){
this.callBack=callBack
}
fun execute(){
//业务逻辑满足回调
callback("张三");
}
(17)DSL 领域特定语言
html{
head{
title{+"XML encoding with Rotlin"}
}
body{
h1{+"XML encoding with Rotlin"}
}
}
(18)用于android
(19)js应用 编写kotlin代码 js自动生成
1、获取canvas 画布
val canvas =document.getElementById("canvas") as HTMLcanvsElement
2、代码中不能直接操作canvas 需要通过context
val ctx=canvas.getContext("2d") as canvasRenderingContext2D
//宽度和高度
val width=window.innerwidth
val heigth=window.innerHeight
(20)java fx