当前位置: 首页 > article >正文

Kotlin基础——函数、变量、字符串模板、类

函数、变量、字符串模板、类

  • 函数
  • 变量
  • 字符串模板

函数

函数组成为 fun 函数名(参数名: 参数类型, …): 返回值{}

fun max(a: Int, b: Int): Int {
    return if (a > b) a else b
}

上面称为代码块函数体,当函数体由单个表达式构成时,可简化为表达式函数体(自动会推导出返回类型)

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

变量

Kotlin和Java一样是静态语言,所有表达式类型在编译期已经确定

变量由 var/val+变量名[: 数据类型][?][ = 值] 组成,如

var a = 1

var b: Int
b = 3

var s: String? = null

val language = arrayListOf("java")
language.add("Kotlin")
  • 无需显示声明每个变量的类型,自动类型推导
  • 若变量未初始化则需要显示指定类型
  • ?标记变量可以为空,若无则不可为空
  • val为不可变变量,初始化后不能再次赋值,对应Java的final,但其指向的对象可以改变

字符串模板

可在字符串中通过$引用变量

fun main(args: Array<String>) {
    val name = if (args.size > 0) args[0] else "Kotlin"
    println("Hello,$name")
}

还可以用${}引用表达式

fun main(args: Array<String>) {
    if (args.size > 0) {
        println("Hello,${args[1]}")
    }
}

fun main(args: Array<String>) {
    println("Hello,${if (args.size > 0) args[0] else "Kotlin"} ")
}

只有数据没有其他代码的对象通常叫做值对象,如JavaBean

public class Person {
    private String name;

    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }
}

使用过程如下

Person person = new Person("java", 8);

person.setName("kotlin");
System.out.println(person.getName());
System.out.println(person.getAge());

将上述Java复制到代码.kt文件,会触发自动转换(.kt不要求类名和文件名一致,可将多个类放到同一文件,且文件名随意

在这里插入图片描述

转换后的代码如下,name为var变量(默认带有getter和setter),而age为val变量(只有getter)

class Person(
    var name: String,
    val age: Int
) 

使用方法如下

val person = Person("java", 8);

person.name = "kotlin"
println(person.name)
println(person.age)

如果一个属性可以根据其他属性计算,可使用自定义getter

class Rectangle(val height: Int, val width: Int) {
    val isSquare: Boolean
        get() {
            return height == width
        }
}

http://www.kler.cn/a/103923.html

相关文章:

  • Unity的碰撞检测(一)
  • Hudi 0.14.0 编译
  • CDC实时数据同步
  • [架构之路-242]:目标系统 - 纵向分层 - 应用程序的类型与演进过程(单机应用程序、网络应用程序、分布式应用程序、云端应用程序、云原生应用程序)
  • Android 系统架构
  • 计算机网络 第五层 应用层
  • Elasticsearch聚合----aggregations的简单使用
  • 一起学数据结构(11)——快速排序及其优化
  • 经管博士科研基础【26】海塞矩阵
  • STM32-LCD中英文显示及应用
  • linux-防火墙
  • Stable Diffusion AI绘图
  • github.com/holiman/uint256 源码阅读
  • canvas绘制动态视频并且在视频上加上自定义logo
  • tesseract-ocr-w64-setup-5.3.3.20231005.exe 百度网盘下载
  • hive 问题解决 Class path contains multiple SLF4J bindings
  • MySQL - B-树和B+树
  • react.js 手写响应式 reactive
  • 【2024秋招】2023-9-14 最右后端开发线下一面
  • Spring Boot中捕获异常错误信息并将其保存到数据库中