kotlin基本语法

Kotlin基础——基础内容 上面属性默认的访问器都是编译器生成的,而如果要实现自己的逻辑,就需要自己自定义访问器get() {Rectangle类定义了一个属性isSquare,该属性用val修饰,只提供getter方法,而这个getter方法没有使用默认的getter,而是使用自定义的getter方法。自定义访问器就是对属性创建一个get函数或者set函数来自定义getter方法和setter方法。首先来看Java,Java中一个类文件可以包含多个类定义,但是只能有一个public定义的,且必须和类文件相同。 阅读详情

1.   入门

1.1.  基本语法

1.1.1.   定义包

包说明应该在源文件的顶部:

1 package my.demo
2 import java.util.*
3 // …

并不要求包与目录匹配:源文件可以在文件系统中的任意地方。

查看:包(2.2)

1.1.2.   定义函数

函数带有Int类型参数,并返回Int类型值:

1 fun sum(a: Int, b: Int): Int {
2     return a+b
3 }

函数体可以是表达式,并可从中推断出返回值类型:

1 fun sum(a: Int, b: Int) = a + b

函数可返回无意义的值:

1 fun pringSum(a: Int, b: Int): Unit {
2     print(a + b)
3 }

Unit 返回值类型可以省略:

1 public fun printSum(a: Int, b: Int) {
2     print(a + b)
3 }

查看:函数(4.1)

1.1.3.   定义局部变量

一次赋值(只读)局部变量:

 

1 val a: Int = 1
2 val b: = 1    // 推测为Int 类型
3 val c: Int    // 没有初始化就要求说明类型
4 c = 1         // 明确赋值

可变变量:

1 var x = 5    // 推测为Int类型
2 x += 1

查看:属性和域(3.2)

1.1.4.   使用字符串模板

 

1 fun main(args: Array<String>) {
2     if (args.size == 0) return
3 
4     print(“First argument: ${args[0]}”)
5 }

查看:串模板(2.1.5.2)

1.1.5.   使用条件表达式

1 fun max(a: Int, b: Int): Int {
2     if (a > b)
3         return a
4     else
5         return b
6 }  

使用if表达式:

1 fun max(a: Int, b: Int) = if (a > b) a else b

查看:if表达式(2.3.1)

1.1.6.   使用nullable值检测空(null)值

当null值可能出现时,引用必须明确标记出可null值。

如果str没有保存一整数,则返回 null:

1 fun parseInt(str: String): Int? {
2     // …
3 }

用函数返回可null值:

 

 1 fun main(args: Array<String>) {
 2   if (args.size < 2) {
 3     print("Two integers expected")
 4     return
 5   }
 6 
 7   val x = parseInt(args[0])
 8   val y = parseInt(args[1])
 9 
10   // 由于x、y是null,所以使用 x * y 将产生错误。
11   if (x != null && y != null) {
12     // 在null检查后,x 和 y 自动地配置(cast)到非可null
13     print(x * y)
14   }
15 }

或

 1 // ...
 2 if (x == null) {
 3     print("Wrong number format in ‘${args[0]}‘")
 4     return
 5 }
 6 if (y == null) {
 7     print("Wrong number format in ‘${args[1]}‘")
 8     return
 9 }
10 
11 // 在null检查后,x 和 y 自动地配置(cast)到非可nul
12 print(x * y)

查看:Null安全(5.7)

1.1.7.   使用类型检查和自动类型转换

is操作符检查表达式是否类型实例。如果对不可变局部的变量或属性进行特定类型检查了,就不需要明确的类型转换。

1 fun getStringLength(obj: Any): Int? {
2   if (obj is String) {
3     // 在这个分支中,`obj`自动转换到`String`
4     return obj.length
5   }
6 
7   // 在类型检查分支之外,`obj`仍然是`Any`类型
8   return null
9 }

或

1 fun getStringLength(obj: Any): Int? {
2   if (obj !is String)
3     return null
4 
5   // 在这个分支上,`obj`自动转换到`String`
6   return obj.length
7 }

甚至

1 fun getStringLength(obj: Any): Int? {
2   // 在`&&`右手边条件成立时,`obj`自动转换到`String`
3   if (obj is String && obj.length > 0)
4     return obj.length
5 
6   return null
7 }

查看:类(3.1.1)和类型转换(5.3)

1.1.8.   使用for循环

1 fun main(args: Array<String>) {
2   for (arg in args)
3     print(arg)
4 }

或

1 for (i in args.indices)
2   print(args[i])

查看:for循环(2.3.3)

1.1.9.   使用while循环

1 fun main(args: Array<String>) {
2   var i = 0
3   while (i < args.size)
4     print(args[i++])
5 }

查看:while循环(2.3.4)

1.1.10.   使用when表达式

1 fun cases(obj: Any) {
2   when (obj) {
3     1          -> print("One")
4     "Hello"    -> print("Greeting")
5     is Long    -> print("Long")
6     !is String -> print("Not a string")
7     else       -> print("Unknown")
8   }
9 }

查看:when表达式(2.3.2)

1.1.11.   使用range(范围)

使用in操作符检查一个数字是否在一个范围内:

1 if (x in 1..y-1)
2   print("OK")

检查一个数字是否超出范围:

1 if (x !in 0..array.lastIndex)
2   print("Out")

遍历整个范围:

1 for (x in 1..5)
2   print(x)

查看:范围(5.2)

1.1.12.   使用集合

遍历一个集合:

1 for (name in names)
2   println(name)

使用in操作符检查一个集合是否一个对象:

1 if (text in names) // 调用names.contains(text)
2   print("Yes")

使用Lambda表达式过滤和映射集合:

1 names
2     .filter { it.startsWith("A") }
3     .sortedBy { it }
4     .map { it.toUpperCase() }
5     .forEach { print(it) }

查看:高阶函数和Lambda表达式(4.2)

1.2.  习惯用语

这里随机收集了一些经常在Kotlin中使用的习惯用语。如果你有喜欢用于,也请奉献出来。申请内容合并。

1.2.1.   创建DTO(POJO / POCO)

1 data class Customer(val name: String, val email: String)

提供带有下列功能的Customer类:

——所有属性的getter (和var的setter)

—— equals()

—— hashCode()

—— toString()

—— copy()

——所有属性的component1(),component2(),…(查看:数据类(3.6))

1.2.2.   函数参数的默认值

1 fun foo(a: Int = 0, b: String = “”) {…}

1.2.3.   过滤列表

1 val positives = list.filter {x -> x > 0}

或是更简洁写法:

1 val positives = list.filter {it > 0}

1.2.4.   字符串插值

1 println(“Name $name”)

1.2.5.   实例检查

1 when (x) {
2 is Foo -> …
3 is Bar -> …
4 else  -> …
5 }

1.2.6.   遍历映射表/列表对

1 for ((k, v) in map) {
2     println(“$k -> $v”)
3 }

k,v可以调用任意事。

1.2.7.   使用范围

 

1 for (i in 1 .. 100) { … }
2 
3 for (x in 2 .. 10) { … }

 

1.2.8.   只读列表

 

1 val list = listOf(“a”, “b”, “c”)

 

1.2.9.   只读映射表

1 val map = mapOf("a" to 1, "b" to 2, "c" to 3)

 

1.2.10.   访问映射表

1 println(map["key"])
2 map["key"] = value

 

1.2.11.   Lazy property Lazy属性

1 val p: String by lazy {
2 
3     // 计算串
4 
5 }

 

1.2.12.   扩展函数

1 fun String.spaceToCamelCase() { ... }
2 
3 "Convert this to camelcase".spaceToCamelCase()

 

1.2.13.   创建单例模式

1 object Resource {
2 
3     val name = "Name"
4 
5 }

 

1.2.14.   If非空简写

1 val files = File("Test").listFiles()
2 
3 println(files?.size)

 

1.2.15.   If非空和else简写

1 val files = File("Test").listFiles()
2 
3 println(files?.size ?: "empty")

 

1.2.16.   if空,执行语句

1 val data = ...
2 
3 val email = data["email"] ?: throw IllegalStateException("Email is missing!")

 

1.2.17.   if非空,执行语句

1 val data = ...
2 
3 data?.let {
4 
5     ... // 如果非null,执行这段代码块
6 
7 }

 

1.2.18.   when语句返回值

 1 fun transform(color: String): Int {
 2 
 3     return when (color) {
 4         "Red" -> 0
 5         "Green" -> 1
 6         "Blue" -> 2
 7         else -> throw IllegalArgumentException("Invalid color param value")
 8     }
 9 
10 }

 

1.2.19.   ‘try/catch’表达式

 1 fun test() {
 2 
 3     val result = try {
 4 
 5         count()
 6 
 7     } catch (e: ArithmeticException) {
 8 
 9         throw IllegalStateException(e)
10 
11     }
12     // 与result一起工作
13 }

 

1.2.20.   ‘if’表达式

 1 fun foo(param: Int) {
 2 
 3     val result = if (param == 1) {
 4 
 5         "one"
 6 
 7     } else if (param == 2) {
 8 
 9         "two"
10 
11     } else {
12 
13         "three"
14 
15     }
16 }

 

1.2.21.   返回Unit类型的方法生成器风格用法

1 fun arrayOfMinusOnes(size: Int): IntArray {
2     return IntArray(size).apply { fill(-1) }
3 }

 

1.2.22.   单一表达式函数

1 fun theAnswer() = 42

 

这可以与其他习惯用语有效的组合在一起,简化代码。如:与when表达式:

1 fun transform(color: String): Int = when (color) {
2     "Red" -> 0
3     "Green" -> 1
4     "Blue" -> 2
5     else -> throw IllegalArgumentException("Invalid color param value")
6 }

 

1.2.23.   在对象实例中(‘with’)调用多方法

 1 class Turtle {
 2     fun penDown()
 3     fun penUp()
 4     fun turn(degrees: Double)
 5     fun forward(pixels: Double)
 6 }
 7 
 8 val myTurtle = Turtle()
 9 
10 with(myTurtle) { //绘制100pix 正方形
11     penDown()
12 
13     for(i in 1..4) {
14         forward(100.0)
15         turn(90.0)
16     }
17     penUp()
18 }

 

1.2.24.   Java7的try与资源

1 val stream = Files.newInputStream(Paths.get("/some/file.txt"))
2 
3 stream.buffered().reader().use { reader ->
4     println(reader.readText())
5 }

 

1.3.  编码约定

这里是一些Kotlin开发语言的目前编码风格。

1.3.1.   命名风格

如有疑问,默认的是Java编码约定,如:

——名称用驼峰式拼写法(并避免在名称中用下划线)

——以大写字母开始

——方法和属性名称以小写字母开始

——用4空格缩进

—— public函数应有文档化,使其能在Kotlin文档中显示

1.3.2.   冒号

在用冒号分隔类型和子类型时,冒号前需要添加一个空格;而在分隔实例与类型时,冒号前就不需要空格:

1 interface Foo<out T : Any> : Bar {
2     fun foo(a: Int): T
3 }

 

1.3.3.   Lambda表达式

在Lambda表达式中,空格应该用在花括号两边,以及将参数与函数体分隔的箭头两侧。如果可能,Lambda表达式应该在括号外传递。

1 list.filter { it > 10 }.map { element -> element * 2 }

在简写且没有嵌套的Lambda表达式中,推荐用it约定替代显式的参数申明。而在带有参数的嵌套Lambda表达式中,应该总是显式申明参数。

 

1.3.4.   Unit

如果函数返回Unit类型,则返回类型应该省略:

1 fun foo() { // 这里省略了“: Unit”。
2 
3 }

kotlin语言使用详细教程 Kotlin是一门现代、简洁且功能强大的语言,无论是在Android开发还是后端开发中都能发挥重要作用。 阅读详情

相关推荐

kotlin官方中文文档

kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档kotlin官方中文pdf文档https://book.kotlincn.net/

Kotlin入门学习(非常详细),从零基础入门到精通,看完这一篇就够了

和Java中的接口定义类似。

Javachichi的博客 6万+

IEEE GRSL投稿全流程避坑指南:从Latex模板到校样缴费,新手必看的7个关键节点

本文详细解析了IEEE GRSL投稿全流程中的7个关键节点,从LaTeX模板选择到校样缴费,帮助新手避免常见陷阱。特别针对图像格式转换、审稿意见回复、版权转移等环节提供实用技巧,确保投稿过程高效顺利。

weixin_28720573的博客 570

Kotlin基本语法

Kotlin基本语法

weixin_45625639的博客 1385

CS5212芯片实战:手把手教你设计DP转VGA转换电路(附完整原理图)

本文详细介绍了CS5212芯片在DP转VGA转换电路设计中的实战应用,包括芯片架构解析、核心电路设计要点、PCB布局与电磁兼容设计、调试技巧及进阶应用开发。通过完整的原理图和实用设计指南,帮助工程师快速掌握高可靠转换器的设计方法,特别适合需要国产化替代方案的场景。

weixin_30576827的博客 390

利用wolcmd.exe批处理执行远程唤醒

代码如下: @echo off cls :check if exist wolcmd.exe goto targetmac echo 缺少wolcmd.exe echo. goto end :targetmac cls echo -------------------------------------------------------- echo 目标主机PC-01地址:40235678A...

Chriseo的博客 6947

【Kotlin教程】kotlin基本语法

【kotlin教程】本专栏作者会更新关于kotlin的相关知识点,欢迎大家评论和提建议! 【有需求请联系作者!】

程序开发 522

GD32F303 ADC+DMA实战:用硬件过采样搞定多通道数据采集(附完整代码)

本文详细介绍了GD32F303系列MCU通过ADC+DMA结合硬件过采样技术实现多通道数据采集的实战方案。从硬件设计要点到软件配置全解析,包括时钟树配置、ADC模块初始化和DMA传输设置,提供了完整的代码示例和优化技巧,帮助工程师构建高精度、低功耗的数据采集系统。

weixin_30466039的博客 318

kotlin基本语法--kotlin官网文档学习

具体功能实例下载:kotlin项目下载地址 kotlin语言中文网文档地址:https://www.kotlincn.net/docs/reference/basic-syntax.html 后面我们将会把kotlin语言中文网上的kotlin文档都过一遍,我会把所有文档上有的内容都用kotlin语言写成app并且展示出来,今天是基本语法, 基本展示的界面是用listView存储的,基本页面

u013017215的博客 736

点云语义分割:RandLANet模型推理C++部署(2)

一、数据读取及预处理 二、模型推理 三、结果保存

zhaoguanhua的博客 3798

利用PaddleOCR识别增值税发票平台验证码(开箱即用)

下面直接讲解利用paddleocr识别的思路,为什么使用paddleocr,因为paddle中集成了较好的ocr文字识别模型,开箱即用即可,废话不多说,剑指主题,识别思路步骤如下。

码王吴彦祖的博客 5543

Kotlin研发第一弹——基本语法

基本语法 基本语法 包定义 定义函数 定义局部变量 注释 使用字符串模板 使用条件表达式 使用可空变量以及空值检查 使用值检查以及自动转换 使用for循环 使用while循环 使用when表达式 使用ranges 使用集合 基本语法 包定义 在源文件的开头定义包 package com.wyc.accountschool.kotlin.test.zheshi.zhende import...

u010785186的专栏 251

halcon与QT联合:(5.1)瓶盖检测以及QT界面搭建

halcon实现瓶盖检测与定位代码: dev_close_window() dev_open_window(0, 0, 1024, 1024, 'black', WindowHandle) list_image_files('C:/Users/TIMI/Desktop/picture/circle', 'default', [], ImageFiles) for J := 1 to 4 by 1 *read image read_image(halconImage, ImageFil

m0_37957160的博客 1044

Kotlin属性和字段与基本语法

Kotlin 属性 字段 基本语法

永远不要停下学习的脚步。 5165

企业级大数据平台的数据网格(Data Mesh)转型之路

随着企业数字化转型的深入,传统大数据平台面临数据孤岛化、治理成本高、业务响应慢等核心痛点。数据网格作为一种新兴的分布式数据管理架构,通过领域驱动设计(DDD)、数据产品化和联邦治理模式,为企业提供了打破数据壁垒、提升数据生产力的全新路径。本文聚焦企业级数据平台从传统架构(数据湖/数据仓库)向数据网格转型的关键技术、实施步骤和组织配套,涵盖技术架构设计、核心算法实现、项目实战案例及工具链推荐。背景介绍:定义转型目标、术语体系与核心挑战核心概念与联系:解析数据网格四大支柱及技术架构图谱核心算法原理。

AI 领航者的博客 1084

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Kotlin-基本语法

基本语法废话不多说以后就开始逐步讲解Kotlin的使用。定义包名在源文件的开头定义包名:package sundy.demo import java.util.*这里需要注意的是包名不必和文件夹路径一致:源文件可以放到任意位置。(自己试一下,就不贴图了)定义函数函数声明在 kotlin 中用关键字 fun 声明函数:fun double(x: Int): Int {}函数用法通过传统的方法调用函数v

u011150681的博客 378

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Kotlin 基本语法

基本语法原文连接 https://github.com/huanglizhuo/kotlin-in-chinese/blob/master/GettingStarted/Basic-Syntax.md 定义包名在源文件的开头定义包名:package my.demo import java.util.* //… 包名不必和文件夹路径一致:源文件可以放在任意位置。定义函数定义一个函数接受两个

fjnu_se的博客 319

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Kotlin 基本语法

Kotlin 基本语法 翻译:https://kotlinlang.org/docs/reference/basic-

璐豪笔记 3617
上一篇: 2016 Top 10 Android Library
下一篇: Kotlin: Java 6 废土中的一线希望
僤尐僤
博客等级 码龄14年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值