Kotlin 实战笔记:第一章 Kotlin:定义和目的

【AI 智能体】Windows 环境 Hermes Agent(爱马仕)安装详细过程 Windows 环境 Hermes Agent(爱马仕)安装详细过程 阅读详情

第一章 Kotlin:定义和目的

一、Kotlin 的主要特征

1,静态类型

Kotlin 和 Java 一样是一种静态类型的编程语言。

  • 静态语言:所有表达式的类型在编译器已经确定了,而编译器就能验证对象是否包含了你想访问的方法或者字段。
  • 动态语言:可以定义存储任何数据类型的变量,在运行时才解析方法和字段引用。

如下 Kotlin 代码:

val x = 1;

既然是静态语言, x 前面为什么不是 int ?
* 与 Java 不同,Kotlin 不需要你在源代码中显示地声明每个变量的类型。因为大多数情况下,变量类型可以根据上下文来自动判断,这样就可以省略类型声明。如上代码,Kotlin 自动判断出它的类型是 Int 。编译器这种从上下文推断变量类型的能力被称为 类型推导 。

由于 Kotlin 对 类型推导 的支持,我们就不再需要显示地声明类型,因此大部分关于静态类型的额外冗长代码就不复存在了。

一些静态语言的好处:
* 性能:方法调用速度更快,因为不需要在运行时才来判断调用的是哪个方法。
* 可靠性:编译器验证了程序的不确定性,因而运行时崩溃的概率更低。
* 可维护性:陌生代码更容易维护,因为你可以看到代码中用到的对象的类型。
* 工具支持:静态类型使 IDE 能提供可靠的重构,精确的代码补全以及其他特性。

2,函数式和面向对象

函数式编程的的核心概念如下:
* 头等函数:把函数(一小段行为)当做值使用,可以用变量保存它,把它当做参数传递,或者当做其他函数的返回值。
* 不可变性:使用不可变对象,这保证了它们的状态在其创建之后不能再变化。
* 无副作用:使用的是纯函数。此类函数在输入相同时会产生同样的结果,并且不会修改其他对象的状态,也不会和外面的世界交互。

函数时变成风格的代码能带来什么好处呢?首先,简洁 ,其次,多线程安全 。

简洁 :把函数当做值可以让你获得更强大的抽象能力,从而避免重复代码。
假设你有两段类似的代码,完成相似的任务(例如,在集合中找到一个匹配的元素),但具体实现不同(如何判断元素是匹配的)。此时你可以将这段逻辑中的公有部分提取到一个函数中,并将其他不同的部分作为参数传递给它。注意,这些参数本身也是函数(判断元素匹配的逻辑),此时可以使用一种简洁的语法来表示这些匿名参数,没错,就是 lambda表达式 。

<!--findAlice和findBob这两个函数封装了寻找一个人的公共逻辑-->
<!--大括号中的代码识别出你要找的人-->
fun findAlice() = findPerson{it.name== "Alice"}
fun findBob() = findPerson{it.name== "Bob"}

多线程安全 :多线程程序中最大的错误来源之一就是,在没有采用适当同步机制的情况下,在不同的线程上修改同一份数据。如果你使用的是不可变数据结构和纯函数,就能保证这样不安全的修改根本不会发生,也就不需要考虑为其设计复杂的同步方案。

另外,函数式编程意味着测试更加容易,没有副作用的函数(完美的单一职责原则)可以独立的进行测试,不需要写大量的设置代码来构造他们所依赖的整个环境。

Java 8 之前的版本并不支持函数式编程。

Kotlin 拥有丰富的特性集从一开始就支持函数式编程风格,包括:
* 函数类型,允许函数接受其他函数作为参数,或者返回其他函数。
* Lambda 表达式,让你用最少的样板代码方便地传递代码块。
* 数据类,提供了创建不可变值对象的简明语法。
* 标准库中包括了丰富的 API 集合,让你用函数式编程风格操作对象和集合。

二、Kotlin 应用

Kotlin 使用的两个领域是服务器端和 Android 开发。下面来看看为什么 Kotlin 非常适合它们。

1,服务端的 Kotlin

服务端编程是一个非常大的概念,它包含了所有下列的应用程序类型甚至更多:
* 返回 HTML 页面给浏览器的 Web 应用程序
* 通过 HTTP 暴露 JSON API 的移动应用后端服务
* 通过 RPC 协议互相通信的微服务

暂时不考虑使用 Kotlin 开发后端,后面的不写了。

2,Android 上的 Kotlin

Kotlin 的语言特性,加上支持 Android 框架的特殊编译插件,让 Android 的开发体验变得高效和愉悦。(很多代码会被简化的很方便)
使用 Kotlin 带来的另一优势就是更好的应用可靠性。此处是由于 Kotlin 的类型系统通过精确地跟踪 Null 值,大大减轻了空指针异常问题带来的压力。
Kotlin 完全兼容 Java 6。
Kotlin 编译器生成的代码执行起来和普通的 Java 代码效率一样。

三、Kotlin的设计哲学

当谈起 Kotlin 的时候,我们喜欢说它是一门务实、简洁和安全的语言,专注于互操作性。
都是什么意思?

1,务实

Kotlin 被设计出来是用于解决问题的,它不是一门研究性语言(为了提升编程语言设计领域目前的技术水平,尝试探索计算机科学的创新概念等待)。
Kotlin 在设计时,被尽可能地依赖已经出现在其他编程语言并被证明是成功的那些特性和解决方案,这降低了语言的复杂性,也使它更容易想学习。

2,简洁

Kotlin 的语法特性,会尽量保证开发者写的代码都具有实际的意义,而不是仅仅为了满足代码结构的需要。( Java 中的 getter、setter 在 Kotlin 中都是隐式的)
另一个导致代码变得不必要冗长的原因是编写显示的代码来完成常见的任务,比如定位集合中的元素,Kotlin 有丰富的标准库来代替这些冗长重复的代码段。

3,安全

Kotlin 对空指针和类型转换异常有更好的处理。

4,互操作性

Kotlin 与 Java 之间可以非常便捷的互相调用。这使得在项目任何地方都可以出现 Kotlin 和 Java 的混用。
IDE 支持 Kotlin 与 Java 的转换器,可以直接将二者代码互相转换。
Kotlin 最大程度上使用现有的 Java 库。
IDE的跨语言工作特性:
* 自由地在 Java 和 Kotlin 源码文件之间切换。
* 调试混合语言的项目,可以在不同语言编写的代码之中单步调试。
* 重构 Java 方法的时候,Kotlin 代码中的对它们的调用也会得到正确的更新,反之亦然。

四、使用 Kotlin 工具

和 Java 一样,Kotlin 也是编译型语言,这意味着你必须先编译,然后才能执行 Kotlin 代码。

1,编译 Kotlin 代码

Kotlin 的源代码存放在 .kt 的文件中( Java 的存放在 .java 的文件中)。Kotlin 编译器会分析源代码并生成 .class 文件,这和 Java 编译器做的没什么不同。

 kotlin 构建过程的简单描述

2,Intellij IDEA 和 Android Studio 插件

Intellij IDEA 的 Kotlin 插件是和语言同步开发的,它是 Kotlin 可用的功能最全面的开发环境。成熟且稳定,提供了 Kotlin 开发所需的全套工具。
Android Studio 可用从 plug-in manager 插件管理器中安装 Kotlin 插件。

3,Java 到 Kotlin 的转换器

刚开始使用 Kotlin 时,如果没有记清楚语法结构,可用先使用 Java 语法编写出相应的代码片段,然后粘贴到 .kt 文件中,转换器会自动地将代码转换成 Kotlin。
在现有的 Java 项目中引入 Kotlin 时,转换器也很好用。若想使用 Kotlin 对原有的 Java 类进行扩展,那么可以先使用转换器将 Java 代码转换成 Kotlin代码。

如何使用
* 复制一段 Java 代码粘贴到 Kotlin 文件中。
* 触发 Convert Java File to Kotlin File 动作来转换整个文件。

复制

粘贴

触发 action 的快捷键: cmd + alt + shift +k
也可以:cmd + shift +a 后再输入框中搜索 Convert Java File to Kotlin File 注意勾选 included disabled actions

五、总结

  • Kotlin 是静态语言并支持类型推导,允许维护正确性与性能的同时保持源代码的简洁。
  • Kotlin 支持面向对象和函数式两种编程风格,通过头等函数使更高级别的抽象称为可能,通过支持不可变值,简化了测试和多线程开发。
  • 在服务端应用程序中可以工作的很好,全面支持所有现存的 Java 框架,为常见的任务提供了新工具,如生成 HTML 和 持久化。
  • 在 Android 上它也可以工作,这得益于紧凑的运行时、对 Android API 特殊的编译器支持以及丰富的库,为常见 Android 开发任务提供了 Kotlin 友好的函数。
  • 免费且开源,全面支持主流的 IDE 和构建系统。(Gradle,Maven,Ant等)
  • Kotlin 是务实的,安全的,简洁的,与 Java 可互操作,意味着它专注于使用已经证明过的解决方案处理常见任务,防止常见的像空指针异常这样的错误,支持紧凑和易读的代码,以及提供与 Java 无限制的集成。
使用pytorch-superpoint与pytorch-superglue项目实现训练自己的数据集 superpoint与superglue的组合可以实现基于深度学习的图像配准,官方发布的superpoint与superglue模型均基于coco数据训练,与业务中的实际数据或许存在差距,为此实现基于开源的pytorch-superpoint与pytorch-superglue项目实现训练自己的数据集。然而,在训练pytorch-superpoint有诸多细节需要优化,特此整理成技术文档。本文档描述了实验pytorch-superpoint与pytorch-superglue项目训练自己的图像配准模型。 阅读详情

相关推荐

RAG项目简历包装指南:从“流水线工人”到“问题解决者”的跃迁(附代码与思路)

本文代码已在Python 3.11 + CUDA 12.3环境测试,部分功能需LangChain 0.2+支持。

Conan_0728的博客 1885

《kotlin实战》阅读笔记(1)

变量 分为 可变的引用(var) 不可变的引用(val) 可变和不可变类似于c++ 中 const 对于指针的限定,而且是顶层const 或者说指正常量。 然后变量是可以进行自动类型推断的,类似于auto,前提是进行了初始化 同时对于val 来说,如果编译器可以保证val只进行唯一一次初始化,则可以根据条件初始化成不同的值。 val message : String if ...

Gin.TaMa的博客 261

Vmware安装windowsServer2022版本

全网最详细的Vmware安装windowsServer2022版本

A乐神的博客 7006

带你简单认识Kotlin

Kotlin到底是什么? Kotlin是一种针对Java平台的新编程语言。Kotlin简洁、安全、务实,并且专注于与Java代码的互操作性。它几乎可以用在现在Java使用的任何地方:服务器端开发、Android应用等。Kotlin可以很好地和所有现存的Java库和框架一起工作,而且性能水平和Java旗鼓相当。与Java的互操作性是kotlin的基石之一,互操作性对于在一个已有的Java代码库中逐步地引入Kotlin非常重要。 据了解,有两个新的目标平台正在开发:Kotlin现在可以在JavaScript虚拟

weixin_41953808的博客 1007

Android 关于佳博和汉印蓝牙热敏打印机开发,Android程序员必经的实践之路

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84149570的博客 1021

【2025最新版】ABAP 开发百科全书专栏文章目录(上)

本文汇总了一系列SAP ABAP技术文章,内容涵盖实用技巧合集、函数式编程实践(如Currying、reduce应用)、设计模式实现(如Visitor、Singleton)、动态代理与Mock技术、性能优化方案(如Lazy Loading)、日期处理与内存管理,以及ABAP与JavaScript的编程范式对比。还涉及CDS视图、Fiori字段追踪、单元测试优化等实战经验,深入剖析了ABAP底层机制(如Internal Session、Function Module实现原理),并提供了多种反模式改进方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2464

函数式编程

什么是函数式编程?     函数式编程(英语:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将计算机运算视为函数运算,并且避免使用程序状态以及易变对象。其中,λ演算(lambda calculus)为该语言最重要的基础。而且,λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。     比起指令式编程,函数式编程更加强调程序执行的结果而非执行...

qq_36414969的博客 222

Python 爬虫实战:全球咖啡期货市场数据采集与分析全攻略

通过本项目,我们实现了对全球咖啡期货市场数据的采集、处理和可视化,为市场分析和决策支持提供了数据基础。未来,可以进一步结合机器学习和深度学习技术,对咖啡期货价格进行预测和建模,提高市场分析的准确性和效率。

2201_76125261的博客 394

Kotlin ? !! ?:含义

Kotlin中: 1. ?代表该值可为空 camera?.stopPreview() 如果camera为空,则不执行后面的程序;若不为空,则执行后面的程序; 2. !!表示该值一定不为空 3. ?: 与java三目运算符?:类似,但写法不同 java: String name= nameUtils!= null ? nameUtils.getName() : "android"...

xiangkezhu的博客 2262

【Proteus仿真】51单片机+DAC0832+数码管制作0-25V电压可调

【Proteus仿真】51单片机+DAC0832+数码管制作0-25V电压可调

perseverance51博客 2117

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

《Kotlin实战》学习笔记之第一章:Kotlin 定义和目的

1、静态类型的编程语言 Kotlin和Java都是静态类型的编程语言,所有的表达式类型在编译期就确定了 编译器能够根据上下文推断变量类型(类型推导) Kotlin对可空类型的支持(使用?声明) eg:val s: String? = null Kotlin有助于避免ClassCastException 在kotlin中,一旦在开始检查过类型后就无需额外的引用就能使用属于该类型...

吃了么没吃回家吃点儿 222

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Kotlin实战【一】Kotlin定义与目的

前言 本系列文章适合有一定java经验的开发者,文章主要内容来自于Dmitry Jemerov的《Kotlin实战》,并加以自己学习过程中的感悟,总结以及实战中的经验。 Kotlin官网 Kotlin中文官网 其他资源(部分需要科学上网): Android快速转战Kotlin教程 Kotlin官方论坛 Stack Overflow上的Kotlin标签 Kotlin Reddit ...

李彬博客专栏 2287

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《Kotlin实战》-第01章:Kotlin的定义和目的

《Kotlin实战》-第01章:Kotlin的定义和目的

crazyf2015的博客 555

字节+谷歌超全Kotlin学习王炸笔记!Kotlin入门到精通+高级Kotlin强化实战(附Demo)(2)

目前已经更新的部分资料:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)[外链图片转存中…(img-aT45fjGA-1712395392007)][外链图片转存中…(img-x0VMNfdQ-1712395392008)][外链图片转存中…(img-KVV5ntsX-1712395392008)]

2301_79985012的博客 950

《Kotlin实战》第一章:定义与目的

概述 Kotlin是一种针对Java平台的新编程语言。Kotlin简洁、安全、务实,并且专注于与Java代码的互操作性。 Kotlin的主要特征 目标平台 服务器、Android以及任何Java运行的地方 特征 静态类型;意味者所有的表达式的类型在编译期就已经确定了(与Java一样) 函数式与面向对象; 函数式的核心概念: 头等函数——把函数当作值使用,可以用变量保存它,把它当作参数传递,或者...

Chrissen's Blog 492

字节+谷歌超全Kotlin学习王炸笔记!Kotlin入门到精通+高级Kotlin强化实战(附Demo)

Android开发者必须要知道的Kotlin Android开发者在语言限制方面面临着一个困境。众所周知,目前Android开发所用的Java语言比较臃肿,这极大地降低了我们的生产力,同时也迫使我们不得不编写大量的样板与脆弱的代码,然而这样的代码是难以阅读和维护的。幸运的是,Android程序是运行在Java虚拟机之上的,因此从技术上来说,可以运行在JVM之上的一切都可用于开发Android应用。现在已经有很多可以生成JVM能够执行的字节码的语言,其中一些语言开始崭露头角并逐步流行起来,Kotlin就..

weixin_44339238的博客 4736

Kotlin系列篇--Kotlin定义和目的介绍

Kotlin学习系列 前言:本系列文章将介绍Kotlin的使用,分为11章进行介绍,以《Kotlin实战》为基础,每章一篇博客,将采用模块化的讲解让读者对Kotlin有深入的了解,适用于有Java开发经验的读者,废话少说,下面就开始介绍Kotlin。 第一部分:Kotlin定义和目的 一、Kotlin概述: Kotlin是对Java语言的新编程语言。具有简洁、安全、务实,并且专注于与Java代码的互操作性。他几乎可以用于现在Java使用的任何地方:服务器开发、Android开发等等。 二、Kotl

居家小男的博客 365

第一章(Kotlin:定义和目的)

实战Kotlin勘误 Kotlin 资源大全 Kotlin主要特征 目标平台 编写服务器端代码(典型的代表是Web应用后端) 创建Android设备上运行的移动应用(Android开发) 其他:可以让Kotlin代码运行在iOS设备上及编译成JavaScript,允许你在浏览器中运行Kotlin代码等 静态类型 Kotlin和Java一样是一种静态类型的编程语言。这意味着所有...

aipaohuai8508的博客 174

Kotlin学习第一章 定义和目的

Kotlin是一种针对于java平台的一种新型语言,简介,安全,高效,并且专注于与java代码的互操作性,,几乎可以用在任何java平台的场景,例如服务端,安卓应用等等,还可以集成其他工具开发IOS和web应用。

JAVA_LDZ的博客 149

【Kotlin】Kotlin基础笔记

定义方式fun 函数名(参数1: 类型, 参数2: 类型, …): 返回类型 {// 函数体return 返回值普通字符串:使用双引号括起来,可以包含转义字符,如换行符\n。// Hello// World原始字符串:使用三重引号"""括起来,支持多行且不会转义特殊字符。第1行第2行// 输出:// 第1行// 第2行Kotlin 的类可以有一个主构造函数和一个或多个次构造函数。如果主构造函数没有任何注解或可见性修饰符,可以省略。

Patrick_yuxuan的博客 1620

第1章Kotlin:定义与目的

第1章Kotlin:定义与目的

yipiziyoudelang的博客 440

Android画布Canvas绘制drawBitmap基于源Rect和目的Rect,Kotlin

文章浏览阅读9.6k次。文章浏览阅读1.8k次。/*Java代码 将Drawable转化为Bitmap */ Bitmap drawableToBitmap(Drawable drawable) { int width = drawable.getIntrinsicWidth();Android Material Design :LinearLayoutCompat添加分割线divider_linearlayout 分割线-优快云博客。

Zhang Phil 2185

Android开发实战:用Kotlin手把手教你自定义View

在Android开发中,当系统提供的原生控件无法满足特定UI需求时,开发者可以通过继承View或其子类(如TextViewImageView)来创建自定义组件,这种技术称为自定义View。实现独特的UI设计效果优化复杂布局的性能封装可复用的UI组件处理特殊的交互逻辑= null,在中定义属性:运行 HTML在View中读取属性:init {attrs,0, 0).apply {try {recycle()通过本文我们学习了:自定义View的基本实现流程。

mnnde的博客 2670

Kotlin学习第一章 定义和目的(4),HarmonyOS鸿蒙中常见的面试题

Kotlin是一种针对于java平台的一种新型语言,简介,安全,高效,并且专注于与java代码的互操作性,,几乎可以用在任何java平台的场景,例如服务端,安卓应用等等,还可以集成其他工具开发IOS和web应用。

2401_84164503的博客 486

Kotlin | 1.定义和目的

本章内容包括: Kotlin 的基本示范 Kotlin 语言的主要特征 Android 和服务端开发的可能性 Kotlin 与其他语言的区别 用 Kotlin 编写并运行代码 Kotlin和Java一样是一种静态类型的编程语言。编译时即可检查代码正确性。动态语言:Groovy,JRuby。 根据上下问判断变量类型: val x=1 性能、可靠性、可维护性、工具支持。 支持函数式编程风...

jingbin_的博客 258
上一篇: 使用 MaterialDialog 自定义View显示不全
下一篇: ojdbc6-11.2.0.2.0免费下载地址
george_zyf
博客等级 码龄11年 132粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值