首页 > 其他分享 >kotlin<第一篇>:入门

kotlin<第一篇>:入门

时间:2023-12-12 17:01:07浏览次数:28  
标签:入门 num2 Int kotlin 类型 val println num1

一、main和打印

fun main() {
     println("Helo Kotlin")
}

kotlin中,新建一个main函数可以调试kotlin程序,println函数可以将结果输出到控制台。

二、常量和变量

val:只读变量(只读,不可变化)
var:变量
const val: 常量
常量不能在函数中使用,只能在方法外面使用,比如:

const val USERNAME: String = "zhangsan"
fun main() {
}

如果在类中使用的话,比如:

class Hello {
    const val USERNAME: String = "zhangsan"
}

这种做法是不被允许的,它在源码阶段就直接报错,因为外界根本无法用类直接访问该
常量,为了让外界能用类访问常量,可以改成:

object Hello {
    const val USERNAME: String = "zhangsan"
}

访问方式:Hello.USERNAME

被 object 修饰的类相当于将该类的成员变量和成员方法都添加了java的static的
关键字。

一般情况下,将类中所有的成员都static化很少见,甚至不可取,所以我们可以将类
中的部分成员static化,使用kotlin的伴生 companion object 可以实现:

class Hello {
    companion object {
        const val USERNAME: String = "zhangsan"
    }
}

在类中,凡是 companion object 闭包下的成员在外接都可以直接通过类访问。
不在companion object 闭包下的成员在外界无法直接用类访问。

三、基本类型

在 Kotlin 中,基本类型包括 数字字符布尔值数组字符串

【1】数字

Kotlin 提供了一组表示数字的内置类型。 对于整数,有四种不同大小的类型,因此值的范围也不同。

kotlin<第一篇>:入门_java

val byteClassType = 1.toByte()
println(byteClassType::class.java)

val shortClassType = 128.toShort()
println(shortClassType::class.java)

val intClassType = 1
println(intClassType::class.java)

val longClassType = 9223372036854775807
println(longClassType::class.java)

如上代码打印了四种数据类型:

byte
short
int
long

整型值初始化的变量默认推断为 Int 类型,Byte和Short的精度比Int小,如果需要使用它们,需要转换类型,一般使用 toByte 和 toByte 函数来转换。
如果数字在Long范围内,会自动推断为Long类型。

除此之外,可以在数字后面加上 L 来强制限定数字的类型为Long类型。

val longClassType = 1L

如果数字超过Long的范围,那么编译器报错。

kotlin还提供了两种浮点类型,分别是Float、Double

类型

大小(比特数)

有效数字比特数

指数比特数

十进制位数

Float

32

24

8

6-7

Double

64

53

11

15-16

浮点类型默认推断为Double类型:

val floatClassType = 3.14

如果想要用Float类型表示,那么需要在数字前面添加字母F或者f

val longClassType = 3.14F

【2】字面常量

1、十进制表示:123
    Long类型表示:123L
2、二进制表示:
    0b00001011
3、十六进制表示:
    0x0F
4、不支持八进制
5、默认浮点类型是Double类型 123 或者 1.23e2(e可以是大写E也可以是小写e)
    Float类型需要添加`F` 或者 `f`

【3】数字字面值的下划线

val one = 1_000_000
val two = 1234_5678_9012_3456L
val three = 999_99_9999L
val four = 0xFF_EC_DE_5E
val five = 0b11010010_01101001_10010100_10010010

数字如果太长,可以使用下划线类分割。

【4】数字的显示转换

kotlin中数字不支持隐式转换,但支持显示转换

val a = 3
val b:Long = a.toLong()

数字的显示转换函数有:

toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char

【5】运算符

+ 加
- 减
* 乘
/ 除

shl  有符号左移
shr 有符号右移
ushr 无符号右移
and 按位与
or 按位或
xor 按位异或
inv() 按位非

== 等于
!= 不等于
< > <= >= 小于 大于 小于等于 大于等于
a..b 区间
x in a..b 在区间内
x !in a..b 不在区间内

【6】字符类型

val c : Char = 'c'

kotlin的字符类型是 Char。

【7】布尔类型

val b : Boolean  = true

【8】字符串

val s : String = "S"

四、控制流

kotlin的控制流有:if、when、for、while

【1】if 表达式

kotlin中,if是一个表达式,并非是一个关键字

// if
var max = a 
if (a < b) max = b

// if else 
var max: Int
if (a > b) {
    max = a
} else {
    max = b
}

fun largerNumber(num1: Int, num2: Int): Int {
    var value = 0
    if (num1 > num2) {
        value = num1
    } else {
        value = num2
    }
    return value
} 

if 有返回值,可以写成:

fun largerNumber(num1: Int, num2: Int): Int {
    val value = if (num1 > num2) {
        num1
    } else {
        num2
    }
    return value
}

可以直接 return

fun largerNumber(num1: Int, num2: Int): Int {
    return if (num1 > num2) {
        num1
    } else {
        num2
    }
}

去除大括号

fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) {
    num1
} else {
    num2
}

当 if 里面只有一句代码时,可以省略大括号

fun largerNumber(num1: Int, num2: Int) 
                         = if (num1 > num2) num1 else num2

【2】when

当 if...else... 太多时,可以考虑使用 when 语句,相当于 Java 的 switch 语句

fun getScore(name: String) = when (name) {
    "Tom" -> 86
    "Jim" -> 87
    "Jack" -> 88
    "Lily" -> 89
    else -> 0
}

when还可以检查数据类型,结合 is 使用

fun checkNumber(num: Number) {
    when (num) {
        is Int -> println("number is Int")
        is Double -> println("number is Double")
        else -> println("number not support")
    }
}

is 相当于 Java 的 instanceof

if(num is Int) {}

【3】for 循环

for (i in 0..10) { // 闭区间
    println(i)
}

for (i in 0 until 10) { // 左开右闭
    println(i)
}

for (i in 0 until 10 step 2) { // step 相当于 i = i + 2
    println(i)
}

in:在什么范围内
!in:不在什么范围内


区间的表示?

闭区间:
  val range = 0..10 // 升序
  val range : IntRange = 0..10 // 升序
  val range = 10 downTo 0 // 降序

左闭右开:
  val range = 0 until 10 // 升序

【4】while

while (x > 0) {
}

do {
} while (y != null)

标签:入门,num2,Int,kotlin,类型,val,println,num1
From: https://blog.51cto.com/u_11099047/8789480

相关文章

  • 软件测试探秘:从各类软件测试入门,领略测试的奥秘
    前言在软件开发的世界中,软件测试是不可或缺的一部分。它是确保软件质量、功能完整性和用户满意度的关键环节。本文小编将为大家介绍各类软件测试的奥秘,并提供入门级的指导和见解。本文内容概要:软件测试是什么?黑盒测试vs白盒测试自动化测试vs手工测试功能测试方法论非功能测试方法论......
  • Istio从入门到精通—— 流量治理的原理 —— VirutalService —— HTTPMatchRequest
    流量治理的原理——VirutalService——HTTPMatchRequestHttpMatchRequestspecifiesasetofcriteriontobemetinorderfortheruletobeappliedtotheHTTPrequest.Forexample,thefollowingrestrictstheruletomatchonlyrequestswheretheURLpaths......
  • 我的心血之作:一套适合 SAP UI5 从业人员从入门到进阶的学习教程,以及教程背后的故事
    一转眼2023年又要结束了。我从2007年开始,以软件开发工程师的角色进入职场,马上也快满17年了。在这快17年的软件开发职业生涯里,我也见识并使用了许许多多的开发技术,编程语言,开发框架,平台。IT界这十多年来涌现出的一些新技术,我也主动或被动地去追逐过。比如2015年时,大数据......
  • 【线段树入门】P3353 在你窗外闪耀的星星(区间求和)
    这题正解是前缀和,我用线段树练练手><11//笔记-自用22//#pragmaGCCoptimize("Ofast")33//#pragmaGCCoptimize("unroll-loops")44#define_CRT_SECURE_NO_WARNINGS55#defineAll(a)a.begin(),a.end()66#defineINF214748364777......
  • 【线段树入门】 P1198 最大数(区间最大值+无懒标记+末尾插入)
    1//笔记-自用2//#pragmaGCCoptimize("Ofast")3//#pragmaGCCoptimize("unroll-loops")4#define_CRT_SECURE_NO_WARNINGS5#defineAll(a)a.begin(),a.end()6#defineINF21474836477#include<bits/stdc++.h>8#include<nu......
  • cesium.js入门基础教程
    运行环境搭建下载cesium.js从https://cesium.com/downloads/下载cesium.js:在vsCode中建立index.html和index.js,并在index.html中引入index.js:index.html:<!DOCTYPEhtml><htmllang="en"><head><!--Usecorrectcharacterset.-->&......
  • Istio从入门到精通—— 流量治理的原理 —— VirutalService —— Headers
    流量治理的原理——VirutalService——Headershttps://istio.io/latest/docs/reference/config/networking/virtual-service/#Headers MessageheaderscanbemanipulatedwhenEnvoyforwardsrequeststo,orresponsesfrom,adestinationservice.Headermani......
  • 【线段树入门】P3373 线段树 2(区间乘加)
    //笔记-自用//#pragmaGCCoptimize("Ofast")//#pragmaGCCoptimize("unroll-loops")#define_CRT_SECURE_NO_WARNINGS#defineAll(a)a.begin(),a.end()#defineINF2147483647#include<bits/stdc++.h>#include<numeric>usingnamespac......
  • 快速入门:使用 .NET Aspire 组件实现缓存
    前言云原生应用程序通常需要各种类型的可扩展缓存解决方案来提高性能。.NETAspire组件简化了连接到流行的缓存服务(例如Redis)的过程,今天小编就为大家简单介绍一下如何使用.NETAspire组件实现缓存。本文的内容概要:创建一个设置为使用.NETAspire的基本ASP.NETCore应......
  • Linux系统C++程序设计1-Linux系统和POSIX 标准入门
    1Linux系统和POSIX标准入门本书介绍了Linux以及我们如何在Linux环境中使用C++来管理关键资源。我们想花一些时间在本章中加深对操作系统(OS)的基本了解。您将更多地了解一些特定技术、系统调用接口和可移植操作系统接口(POSIXPortableOperatingSystemInterface)的起源。在Lin......