初识kotlin(初用kotlin一时爽、一直用一直爽)

news/2024/5/1 19:51:49/文章来源:https://blog.csdn.net/mid120/article/details/126919342

kotlin历程

  1. 2011年7月,JetBrains推出Kotlin项目,这是一个面向JVM的新语言
  2. 2012年2月,JetBrains以Apache 2许可证开源此项目
  3. 2016年2月15日,Kotlin v1.0发布。这被认为是第一个官方稳定版本,并且JetBrains已准备从该版本开始的长期向后兼容性
  4. 2017年,Google宣布在Android上为Kotlin提供一等支持

kotlin的优势

  1. 比java 更快

如下:创建1000000 个对象

public class JPerson {public JPerson(String name, Integer age, Integer sex) {this.name = name;this.age = age;this.sex = sex;}private String name ;private Integer age;private Integer sex ;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}}

执行结果
在这里插入图片描述

public class ReflectDemo {public static void main(String[] args) throws InterruptedException {int i =0;long start = System.currentTimeMillis();while (i<1000000){JPerson jPerson = new JPerson("zhangsan",1,1);i++ ;}long end = System.currentTimeMillis();System.out.println("java本次耗时:"+(end-start));}}
data class KPerson(val name: String, val age: Int, val sex: Int)fun main(args: Array<String>) {var i = 0val start = System.currentTimeMillis()while (i < 1000000) {val kPerson = KPerson("张三", 1, 1)i = i.inc()}val end = System.currentTimeMillis()println("kotlin本次耗时:${(end - start)}")}

执行结果


3. 比java 语法更简洁、下面是一些简单示例,对kotlin 语法不太理解没关系、后续会对kotlin有详细讲解文章

//Java
System.out.print("hello world"); 
System.out.println("hello world");
//Kotlin 省略 System.out
print("hello world") 
println("hello world")//Java
String name = "hello world"; 
final String name = "hello world";
//Kotlin 自动类型推断
var name = "hello world" 
val name = "hello world"//Java
if (text != null) {int length = text.length();
}
//Kotlin 省略if 判断以及括号,可以使用it代替text
text?.let {val length = it.length
}//Java
String firstName = "Android"; 
String lastName = "Architect"; 
String message = "My name is: " + firstName + " " + lastName;
//Kotlin 直接使用插值运算符
val firstName = "Android" 
val lastName = "Architect" 
val message = "My name is: $firstName $lastName"//Java
String text = "First Line\n" +"Second Line\n" +"Third Line";//Kotlin 写法更加优雅
val text = """|First Line|Second Line|Third Line""".trimMargin()//Java
Car car = (Car) object;
//Kotlin 使用as 转换 而且转换后后续无需再次转换
var car = object as Car
car.name  // 可以直接使用car 属性//Java
int score = // some score;
String grade;
switch (score) {case 10:case 9:grade = "Excellent";break;case 8:case 7:case 6:grade = "Good";break;case 5:case 4:grade = "OK";break;case 3:case 2:case 1:grade = "Fail";break;default:grade = "Fail";
}//Kotlin
var score = // some score
var grade = when (score) {9, 10 -> "Excellent"in 6..8 -> "Good"4, 5 -> "OK"in 1..3 -> "Fail"else -> "Fail"
}// labamda表达式 Java 8+
cars.stream().filter(car -> car.speed > 100).forEach(car -> System.out.println(car.speed));//Kotlin
cars.forEach {println(it.speed)
}cars.filter { it.speed > 100 }.forEach { println(it.speed)}//Java  静态方法,私有构造比较
public class Utils {private Utils() {// This utility class is not publicly instantiable}public static int getScore(int value) {return 2 * value;}}//Kotlin
class Utils private constructor() {companion object {fun getScore(value: Int): Int {return 2 * value}}
} 
// java 对象声明
public class JPerson {public JPerson(String name, Integer age, Integer sex) {this.name = name;this.age = age;this.sex = sex;}private String name ;private Integer age;private Integer sex ;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}}// kotlin
data class KPerson(val name: String, val age: Int, val sex: Int)
  1. 让它比Java更安全,能够静态检测常见的陷阱。如:引用空指针
    在这里插入图片描述

  2. 更高级特性,比如运算符重载,扩展函数

运算符重载 对象可以-加减乘除了

data class Point(val x: Int, val y: Int) {operator fun plus(other: Point) = Point(x + other.x, y + other.y)operator fun plus(value: Int) = "toString: ${Point(x + value, y + value)}"
}fun main(args: Array<String>) {val p1 = Point(1, 2)val p2 = Point(3, 4)println(p1 + p2)println(p1 + 3)
}/*
Point(x=4, y=6)
toString: Point(x=4, y=5)
*/

扩展函数,person 类没有order 这个函数,却可以在类的外部给其声明方法
在这里插入图片描述

在这里插入图片描述
6. 支持协程.让开发更简单
下面并行代码、如果串行执行需要5s,实际执行结果只需要2s、也就是单个任务最大耗时,并行代码比java 简单

    @Testfun checkRunBlocking() {val start = System.currentTimeMillis()runBlocking {launch {println("launch1")delay(1000)
//                Thread.sleep(1000)println("launch1 finished")}launch {println("launch2")delay(1000)
//                Thread.sleep(1000)println("launch2 finished")}launch {println("launch2")delay(1000)
//                Thread.sleep(1000)println("launch2 finished")}launch {println("launch2")delay(1000)
//                Thread.sleep(1000)println("launch2 finished")}launch {println("launch2")delay(2000)
//                Thread.sleep(1000)println("launch2 finished")}}
//        Thread.sleep(1000)val end = System.currentTimeMillis()println("本次耗时:${end - start}")}

在这里插入图片描述

  1. Kotlin可以编译成Java字节码,也可以编译成JavaScript,前后端可公用一套模型 、后面会单独创建一个项目来讲解这块内容

仓库

 https://gitcode.net/mid120/kotlin

在这里插入图片描述

总结

从java 转kotlin 刚开始觉得kotlin语法很怪异,比如每行最后不需要加分号,但总是莫名的加上,结果idea 提示是灰色,然后又把分号干掉。然后就是简单写法、很容易让代码看起来是声明方法,实际是调用方法。再加上项目压力,很容易写出一半是kotlin 一半是java 代码。但是时间长久之后,慢慢发现kotlin的简单写法,会干掉大部分java代码,公司项目重构就是用kotlin 替换java ,代码直接少了75%,相当给力。所以,kotlin还是非常优秀的语言,抓紧时间学习吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9838.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】zookeeper + kafka on k8s 环境部署

文章目录一、概述二、Zookeeper on k8s 部署1&#xff09;添加源2&#xff09;修改配置3&#xff09;开始安装4&#xff09;测试验证5&#xff09;Prometheus监控6&#xff09;卸载三、Kafka on k8s 部署1&#xff09;添加源2&#xff09;修改配置3&#xff09;开始安装4&#…

pytorch线性代数的基本操作

线性代数的基本操作 标量由只有一个元素的张量表示 import torch xtorch.tensor([3.0]) ytorch.tensor([2.0]) xy,x*y,x/y,x**y向量视为标量值的组成 通过张量的索引来访问任一元素 xtorch.arange(4) x,x[3] #张量的长度 len(x) #张量的形状 x.shape对称矩阵 AAT Btorch.ten…

一文看懂线性回归(保姆级别 含源码)

来源: AINLPer 微信公众号&#xff08;每日论文干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2022- 9 -18 引言 最近作者网上看了很多关于线性回归的帖子&#xff0c;个人感觉比较乱&#xff0c;所以打算自己整理一版&#xff0c;希望能把…

(41)STM32——外部SRAM实验笔记

目录 学习目标 成果展示 硬件知识 特点 功能框图 读时序 ​编辑写时序 FSMC驱动 寄存器 闪存片选控制寄存器 硬件 配置 代码 总结 学习目标 今天我们要学习的是有关外部SRAM实验&#xff0c;其实F&#xff14;内部也是有一个&#xff11;&#xff19;&#x…

本周大新闻|索尼PS VR2体验首次公开;Meta Quest Pro开箱视频曝光

本周大新闻&#xff0c;AR方面&#xff0c;沃尔玛App加入AR试穿功能&#xff1b;谷歌搜索AR新增60个行星、卫星模型&#xff1b;Niantic宣布与漫威娱乐合作打造新款LBS AR游戏&#xff1b;AR眼镜ActiveLook打通Apple Watch。 VR方面&#xff0c;索尼PS VR2体验首次公开&#x…

2022年笔试知识总结展望

应届生的笔试知识总结&#xff0c;温故而知新&#xff0c;看看知识加深印象&#xff0c;希望学得更好&#xff0c;有个好结果。 目录 1. TCP的拥塞控制 2. position属性 3. [‘1‘, ‘2‘, ‘3‘].map(parseInt) 输出结果 4. 排序算法的稳定性分析 1&#xff09;稳定的排…

事件研究法与其应用(2)---Excel实操步骤

我们借着学习事件研究法的应用,可以用Excel和Stata等软件进行操作。 今天这主要是利用EXCEL计算累积异常收益率。 在正式开展实操之前,我们先回顾一下事件研究法的步骤(尤其是我们写作论文的时候): 事件研究法计算步骤: 1. 获取数据,定义事件期 2.计算估计期间个股与市…

npm yarn 报错

目录npm yarn报错yarn: 无法加载文件 npm yarn报错 yarn: 无法加载文件 win10系统,yarn : 无法加载文件 C:\Users\丽丽小可爱\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 ... 导致此错误的原因是,PowerShell 执行策略,默认设置为Rest…

JSON 数据类型转换工具

简介 本文介绍一款数据类型转换工具&#xff0c;可以将JSON格式数据转换成YAML、MYSQL、XML、TOML、JavaScript等数据类型。 背景 在日常的开发工程中&#xff0c;我们经常使用JSON表达数据&#xff0c;但有些时候我们需要使用YAML、JavaScript等语言表达数据。因此&#xf…

HTML + HTTP请求 +CSS知识点

文章目录HTML1.HTML元素2.HTML页面3.常见元素1&#xff09;文本2&#xff09;多媒体3&#xff09;表单作用与语法常见表单项案例体验4.HTTP请求1&#xff09;请求组成2&#xff09; 请求方式与数据格式get 请求示例post 请求&#xff08;默认格式&#xff09;示例json 请求&…

Python必知必会 os 模块详解

文章目录Python os 模块os模块的常用操作os.path模块os.open()模块Python os 模块 os是“operating system”的缩写&#xff0c;os模块提供各种 Python 程序与操作系统进行交互的接口&#xff0c;使用os模块&#xff0c;一方面可以方便地与操作系统进行交互&#xff0c;另一方…

【SLAM】4李群李代数

文章目录4.1.基础群李代数的引出李代数李代数so(3)\mathfrak{so}(3)so(3)李代数se(3)\mathfrak{se}(3)se(3)4.2.指数与对数映射4.2.1.SO(3)SO(3)SO(3)指数映射4.2.2.SE(3)SE(3)SE(3)的指数映射4.3.李代数求导与扰动模型4.3.1.BCH公式&近似形式4.3.2.李代数求导4.3.4.扰动模…

redis下载与安装(Linux环境下)

用的是阿里云的深度os Linux系统 一&#xff0c;下载 键入命令&#xff1a; wget http://download.redis.io/releases/redis-6.2.1.tar.gz 检查时候有gcc环境 gcc --version 若有gcc环境会有类似于下图的提示 没有则执行&#xff1a; yum install gcc 下载完毕之后&…

JavaEE基础知识

文章目录前言计算机的基本组成CPUCPU运行程序的过程CPU的构造操作系统操作系统功能常见的操作系统操作系统的具体组成操作系统的进程管理(重点)操作系统安排程序进程PCB(进程管理块)进程调度关于进程的几个属性虚拟地址空间线程(thread [θred] )前言 之前已经学过很多的知识,…

企业薪资系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

PostgreSQL - 基于pg_basebackup实现主从流复制

PostgreSQL - 基于pg_basebackup实现主从流复制1 数据库节点2 安装PostgreSQL2.1 创建postgres用户2.2 安装PostgreSQL3 配置主节点4 配置从节点5 验证主从同步1 数据库节点 节点ip节点角色192.168.163.133主节点192.168.163.134从节点 2 安装PostgreSQL 2.1 创建postgres用户…

计算机网络——数据链路层(滑动窗口协议: 选择重传)(点对点协议 PPP)

目录 滑动窗口协议: 选择重传 选择重传协议 选择重传协议 点对点协议 PPP PPP 的主要特点 PPP 协议有三个组成部分 PPP 协议的帧格式 PPP 有一个 2 个字节的协议字段 透明传输问题 PPP 的字符填充 PPP 的工作状态 滑动窗口协议: 选择重传 选择重传协议 GBN相对简单&a…

【周末闲谈】谈谈数学转码这一年来的体会与反思

——我们走了太远&#xff0c;以至于忘了为何出发 前言 笔者本科读的是数学专业&#xff0c;就是每天和数学分析、高等代数、概率论、随机过程等等这些理论打交道的专业&#xff0c;这个专业出来工作好像一般有两个方向就是金融和计算机&#xff0c;我选择了计算机方向。主要…

2022 第五届 浙江省大学生网络与信息安全竞赛技能赛 预赛 Writeup,5题

文章目录1、Web&#xff1a;nisc_easyweb2、Web&#xff1a;nisc_学校门户网站3、Web&#xff1a;吃豆人吃豆魂4、MISC&#xff1a;好怪哦5、RE&#xff1a;ManyCheck1、Web&#xff1a;nisc_easyweb 题目描述&#xff1a; 打开网站&#xff0c;是一个php的初始页面。 思路…

springboot+微信小程序的点餐系统(开题报告+论文+答辩PPT+源码)

技术架构 SprongBootMysql微信小程序 简介 本点餐小程序是使用Java/JavaScript编程语言开发的&#xff0c;存储数据方面则用到了MySQL数据库。顾客可以使用小程序扫码功能扫描餐厅桌角的二维码就座&#xff0c;也可以点击排号等位由后台工作人员安排就座&#xff1b;通过首页…