Kotlin语法--基础入门

点此进入Kotlin在线编程练习

点此阅读Kotlin官方文档

点此阅读官方教程

什么是Kotlin?

一种Android官方推荐的开发语言,可与Java兼容,适用于多平台开发。

用Kotlin输出"Hello world!"

fun main() {println("Hello world!")
}
//这是单行注释
/* 这是
多行注释*/

Kotlin 应用程序的入口点是main函数。

函数也可以接受参数:

fun main(args: Array<String>) {println(args.contentToString())
}

可以同时使用println(),readln(),print()来打印请求和显示用户输入的消息:

// Prints a message to request input
println("Enter any word: ")// Reads and stores the user input. For example: Happiness
val yourWord = readln()// Prints a message with the input
print("You entered the word: ")
print(yourWord)
// You entered the word: Happiness//println打印参数并添加换行符
//print将参数打印到标准输出
//readln()读取用户输入的整行作为字符串

变量

声明变量使用var或val(二者区别在于:val初始化后无法改变值,var可重新赋值)

var x: Int = 5
x += 1 //Kotlin中用换行来分隔语句
val x: Int = 5 //变量的类型声明写在冒号之后
val x = 5 //初始化时也可以不写类型
val y: Int
y =3 //先声明再初始化,就需要事先指定数据类型

可以在顶层声明变量

val PI = 3.14
var x = 0fun incrementX() {x += 1
}
// x = 0; PI = 3.14
// incrementX()
// x = 1; PI = 3.14

变量类型

  • String: 文本
  • Int: 整数
  • Double:小数
  • Float: 小数
  • Boolean: 布尔

文档中更详细的分类
关于字符串模版

函数

如何用函数实现两个整数的相加?

fun sum(a: Int, b: Int): Int{return a+b
}
//使用fun关键字定义函数,fun后是函数名,小括号内是形式参数,参数用逗号分隔
//第三个Int是对函数返回类型的推断
//不返回任何有意义的值:使用Unit;也可以直接省略这个部分
fun printSum(a: Int, b: Int): Unit{println("sum of $a and $b is ${a+b}")
}

再看一个例子:

fun birthdayGreeting(name: String, age: Int): String {val nameGreeting = "Happy Birthday, $name!"val ageGreeting = "You are now $age years old!"return "$nameGreeting\n$ageGreeting"
}
fun main() {println(birthdayGreeting("Rover", 5)) //调用函数,为形式参数传值println(birthdayGreeting("Rex", 2))
}
//Happy Birthday, Rover!
//You are now 5 years old!
//Happy Birthday, Rex!
//You are now 2 years old!
//

也可传递具名实参,这样就不受传参顺序的影响:

println(birthdayGreeting(name = "Rex", age = 2))
println(birthdayGreeting(age = 2, name = "Rex"))

还可以指定默认实参:

fun birthdayGreeting(name: String = "Rover", age: Int): String {return "Happy Birthday, $name! You are now $age years old!"
}

定义一个矩形类

class Rectangle(val height: Double, val length: Double) {val perimeter = (height + length) * 2 
}
fun main() {val rectangle = Rectangle(5.0, 2.0)println("The perimeter is ${rectangle.perimeter}")
}
//类的属性可以在其声明或正文中列出
//类声明中列出的参数的默认构造函数将自动可用

类之间的继承由冒号声明,想使类可继承,要将其标记为open

open class Shape //open--可继承class Rectangle(val height: Double, val length: Double): Shape() {val perimeter = (height + length) * 2
}
\\shape类被继承

关于类的更多内容
关于对象和实例

条件表达式与循环

if else

fun maxOf(a: Int, b: Int): Int {if (a > b) {return a} else {return b}
}
//也可以这样写
fun maxOf(a: Int, b: Int) = if (a > b) a else b

for loop

val items = listOf("apple", "banana", "kiwifruit")
for (item in items) {println(item)
}
//或者这么写
val items = listOf("apple", "banana", "kiwifruit")
for (index in items.indices) {//indices返回下标索引println("item at $index is ${items[index]}")
}
//item at 0 is apple
//item at 1 is banana
//item at 2 is kiwifruit

when loop

val items = listOf("apple", "banana", "kiwifruit")
var index = 0
while (index < items.size) {println("item at $index is ${items[index]}")index++
}
//item at 0 is apple
//item at 1 is banana
//item at 2 is kiwifruit

when expression

fun describe(obj: Any): String =when (obj) {1          -> "One""Hello"    -> "Greeting"is Long    -> "Long"!is String -> "Not a string"else       -> "Unknown"}
//One
//Greeting
//Long
//Not a string
//Unknown

Ranges

检查是否在范围内
可规定步长

val x = 10
val y = 9
if (x in 1..y+1) {//..是封闭范围println("fits in range")
}
//fits in rangeval list = listOf("a", "b", "c")if (-1 !in 0..list.lastIndex) {println("-1 is out of range")
}
if (list.size !in list.indices) {println("list size is out of valid list indices range, too")
}
//-1 is out of range
//list size is out of valid list indices range, toofor (x in 1..5) {print(x)
}
//12345for (x in 1..10 step 2) {print(x)
}
println()
for (x in 9 downTo 0 step 3) {print(x)
}
//13579
//9630

set

遍历集合,可使用in,也可以用in检查是否在范围内

for (item in items) {println(item)
}when {"orange" in items -> println("juicy")"apple" in items -> println("apple is fine too")
}val fruits = listOf("banana", "avocado", "apple", "kiwifruit")
fruits.filter { it.startsWith("a") }.sortedBy { it }.map { it.uppercase() }.forEach { println(it) }
//APPLE
AVOCADO

null

当值可能时,必须将引用显式标记为可null。

fun printProduct(arg1: String, arg2: String) {val x = parseInt(arg1)val y = parseInt(arg2)// Using `x * y` yields error because they may hold nulls.if (x != null && y != null) {// x and y are automatically cast to non-nullable after null checkprintln(x * y)}else {println("'$arg1' or '$arg2' is not a number")}
}
//42
//'a' or '7' is not a number
//'a' or 'b' is not a number

可为 null 的类型和不可为 null 的类型

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

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

相关文章

云锵投资 2024 年 6 月简报

季报摘要行情:二次探底; 微盘策略:大幅回撤,逻辑基础小幅动摇,但继续运行; 本季度量化基金策略业绩:-4.3085%,中,全国排名:7532;平均 Beta:1.00; 本季度量化股票策略业绩:-16.8934%,差,全国排名:11198;平均 Beta:1.84;(优良中差,表明全国排名四位分) 行…

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系,你知道多少?

本文主要对类之间的关系进行了基本介绍,包括继承、组合、依赖关系,并辅以现实中的例子加以讲解,同时说明了不同关系的特点和应用场景。全网最适合入门的面向对象编程教程:09 类和对象的 Python 实现-类之间的关系,你知道多少? 摘要: 本文主要对类之间的关系进行了基本介…

[LeetCode] 274. H-Index

意外的简单。 class Solution:def hIndex(self, citations: List[int]) -> int:sorted_list = sorted(citations, reverse=True)ret = 0for i,element in enumerate(sorted_list[:1000]):curr = min(i+1, element)if curr > ret:ret = currreturn ret

数据换机

图1为本系统的方法的流程示意图图2为首次拷贝到X中断需要遍历的文件示意图图3为非首次拷贝找到X中断点需要遍历的文件示意图 实现的功能支持换机对SD卡的数据迁移大文件按阈值切成切片文件小文件和切片文件按阈值分段拷贝切片文件的恢复小文件和切片文件从换机cache下恢复到三…

实战篇——文件上传漏洞upload-labs-master靶场实战一

实战篇——文件上传漏洞upload-labs-master靶场实战(1) 前端验证绕过 (1) 篡改js代码 直接上传一句话木马失败:查看页面源代码:可见前端通过checkFile函数对上传文件的后缀名进行了验证。 使用Tampermonkey自定义js脚本,用于删除form表单的onsubmit属性:启用脚本,刷新页面…

国产数据库人大金仓Kingbase数据迁移工具

转载:国产数据库人大金仓Kingbase数据迁移工具-CSDN博客 注意:Kingbase自带的迁移工具,只能从其它数据库迁移到Kingbase数据库 适配数据库安装的时候建议使用完全安装(数据库可以不启动),后续也可以全部默认(如安装数据库,相关 参数设置可参考人大金仓(Kingbase)部署…

selenium操作

selenium介绍开发使用有头浏览器,部署使用无界面浏览器 selenium工作原理利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的) selenium模块与d…

《Deep Learning》(深度学习)中英文双版PDF免费下载

“深度学习”经典著作《Deep Learning》中文版pdf免费下载。 《Deep Learning》(深度学习)是一本皆在帮助学生和从业人员进入机器学习领域的教科书,以开源的形式免费在网络上提供,这本书是由学界领军人物 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 合力打造。中文…

微服务异常问题

多服务间,被依赖服务代码更新,依赖服务不生效问题被依赖服务代码更新后,jar包会更新 依赖服务并不是通过http直接调用依赖服务的代码,而是通过依赖jar包的方式,把被依赖服务更新后的jar包更新到依赖服务中即可。 举例: 有A服务,B服务;其中A服务依赖B服务。 当A服务有代…

深度学习--强化学习--基本概念Q V--94

目录1. 强化学习2. 马尔科夫链3. Q值和V值 1. 强化学习 首先我们需要明确,强化学习的任务是什么? 这用大白话说:就是我们希望用强化学习的方式,使智能体获得独立自主地完成某种任务的能力。 智能体学习和工作的地方,我们就称为环境。 注意!所谓独立自主,就是智能体一旦启…

京东毫秒级热key探测框架设计与实践,已实战于618大促

在拥有大量并发用户的系统中,热key一直以来都是一个不可避免的问题。或许是突然某些商品成了爆款,或许是海量用户突然涌入某个店铺,或许是秒杀时瞬间大量开启的爬虫用户, 这些突发的无法预先感知的热key都是系统潜在的巨大风险。 风险是什么呢?主要是数据层,其次是服务层…

刷题Phuck2--data协议差异

刷题Phuck2 使用arjun扫出hl参数,获取到源码 ​​ 源码: <?phpstream_wrapper_unregister(php);if(isset($_GET[hl])) highlight_file(__FILE__);$mkdir = function($dir) {system(mkdir -- .escapeshellarg($dir));};$randFolder = bin2hex(random_bytes(16));$mkdir(us…

常见Linux命令

1、查看目录:ls 常用用法: ls -l :以列表的形式展示;简写ll效果展示:2、终端清屏:clear 常用用法: ctr+L:清空屏幕当前的内容,不会重置终端效果展示: 使用前使用后3、切换目录:cd 常用用法:cd /:切换到根目录cd /xx(目录名) :切换到根目录下的xx目录cd ..:切换…

R语言大学城咖啡店消费问卷调查报告:信度分析、主成分分析可视化

全文链接:https://tecdat.cn/?p=34656 原文出处:拓端数据部落公众号 本次调查旨在了解文汇路咖啡店的市场状况,以便为学校周边咖啡店的经营发展提供积极的引导意义。我们通过问卷调查的方式,收集了大量的数据,通过r软件对数据进行了基本情况分析、信度分析、问卷调查数据…

R语言武汉流动人口趋势预测:灰色模型GM(1,1)、ARIMA时间序列、logistic逻辑回归模型|附代码数据

全文链接:http://tecdat.cn/?p=32496 原文出处:拓端数据部落公众号 人口流动与迁移,作为人类产生以来就存在的一种社会现象,伴随着人类文明的不断进步从未间断。 人力资源是社会文明进步、人民富裕幸福、国家繁荣昌盛的核心推动力量。当前,我国经济正处于从以政府主导的投…

1panel搭建halo+alist+兰空图床

由于服务器更新过后,ssh连接不上,机商vnc延迟卡的很,输个命令都不行,刚好centos断更了,换ubuntu系统了。也顺便从MySQL转到PostgreSQL。这个算是个记录,给有基础的人看的,你连ssh都不会连,那你得自己一步一步慢慢百度来。其实还是比较无脑的,除了1panel的反代,感觉设…

7.4

1005.K次取反后最大化的数组和 题意描述:[!NOTE] 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可能的最大和 。 示例 1…

【专题】2024年6月数字化行业报告合集汇总PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=36658 原文出处:拓端数据部落公众号 随着科技的飞速发展和全球数字化进程的加速推进,我们正处在一个充满变革与机遇的时代。从人工智能的深入应用到工业互联网的蓬勃发展,从智慧医疗的兴起到新能源汽车的普及,每一个领域都在经历着前所未有…

Body SurfaceModel Geometry

Body SurfaceModel Geometry 实体曲面模型几何图形是通过曲面模型表示产品的三维形状。应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifier = Body IfcShapeRepresentation.RepresentationType = SurfaceModel IfcShape…

CSRF攻击与修复

基本原理受害者登录a.com,并保留了登录凭证(Cookie)。 攻击者引诱受害者访问了b.com。 b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。 a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。 a.com以…