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

Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承

在这里插入图片描述

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。

https://play.kotlinlang.org/byExample/01_introduction/02_Functions

目录

  • 引出
  • hello
  • function函数
    • Infix Functions 中缀函数
    • Operator Functions 算术函数
    • 变长参数vararg Parameters
  • 变量
    • kt中的null
  • kt中的类
  • 泛型 Generics
    • 泛型函数Generic Functions
  • 继承Inheritance
    • 超类Asiatic
  • 总结

引出


1.kotlin初识;
2.function函数,变量,null;
3.泛型,接口,继承,超类;

hello

在这里插入图片描述

package com.tianju.ktLearnfun main() {                        // 2println("Hello, World!")        // 3
}

function函数

  • 返回值为Unit,表示没有返回值, 类似与java里面的 void
  • Unit可以省略不写,可以传两个参数,参数带有默认值

在这里插入图片描述

package com.tianju.ktLearn// 返回值为Unit,表示没有返回值, 类似与java里面的 void
fun printMsg(msg: String): Unit {println(msg)
}// Unit可以省略不写,可以传两个参数,参数带有默认值
fun printMsgWithPrefix(msg: String, prefix:String = "info") {println("[wtt--$prefix] $msg")
}fun sum(x: Int, y: Int): Int {return x+y;
}fun multiply(x: Int,y: Int) = x*yfun main() {printMsg("Pet!")// 可以不传参,带有默认参数的printMsgWithPrefix("Hello")printMsgWithPrefix("Hello","Peter")printMsgWithPrefix(prefix = "MMDD", msg = "HTTP")val sum = sum(100, 300)println(sum)println(multiply(3,30))
}

Infix Functions 中缀函数

具有单个参数的成员函数和扩展可以转换为中缀函数。

在这里插入图片描述

package com.tianju.ktLearn;// 具有单个参数的成员函数和扩展可以转换为中缀函数
fun main(){infix fun Int.times(str: String) = str.repeat(this)println(2 times "Hei!")// to 是标准库中的函数 kotlin.Pair<A, B>val  pair = "WHTT" to "PPTS"println(pair)// 自定义一个 onto 函数infix fun String.onto(str: String) = Pair(this,str)val myPair = "MVC" onto "WWW"println(myPair)val pet = Person("peter",34)val Shi = Person("Shirley",30)pet likes Shiprintln(pet.people[0])
}class Person(val name: String,val year: Int){val people = mutableListOf<Person>()infix fun likes(person: Person){people.add(person)}}

Operator Functions 算术函数

Certain functions can be “upgraded” to operators, allowing their calls with the corresponding operator symbol.

在这里插入图片描述

package com.tianju.ktLearn// 符号times 就是 下面的 乘号 *
operator fun Int.times(str:String) = str.repeat(this)fun main() {println(2 * "Bye")val str = "Always forgive your enemies; nothing annoys them so much."operator fun String.get(range: IntRange) = substring(range)println(str[0..14])
}

变长参数vararg Parameters

在这里插入图片描述

package com.tianju.ktLearnfun printAll(vararg msgs: String) {for (msg in msgs){println(msg)}
}fun printWithPre(vararg msgs: String, prefix:String): Unit {for (msg in msgs) println("[嘻嘻嘻--$prefix]$msg")
}fun logs(vararg msgs:String){printAll(*msgs)
}fun main() {printAll("pet","sh","wt")printWithPre("pet","sh","wt", prefix ="Hi")logs("sh","wtt","abc")}

变量

Kotlin具有强大的类型推理能力。虽然你可以显式地声明变量的类型,但你通常会让编译器通过推断来完成这项工作。Kotlin不强制执行不变性,但建议这样做。本质上使用val而不是var。

val b: Int = 1             // 2
val c = 3                  // 3

声明一个不可变变量并对其进行初始化。

声明一个不可变变量并在不指定类型的情况下对其进行初始化。编译器推断类型Int。

kt中的null

  • 在kt里面,如果有一个可以为null,需要在类型后面加上 问号 ?
  • 函数只能传入不为null的值
  • 参数类型后面加个 ? 问号后,传入的值可以为null

在这里插入图片描述

在这里插入图片描述

package com.tianju.ktLearnfun main() {var neverNull : String = "never Null"// neverNull = nullprintln(neverNull)// 在kt里面,如果有一个可以为null,需要在类型后面加上 问号 ?var nullable:String? = "can be null"nullable = nullprintln(nullable)fun strLength(notNull:String ): Int {return notNull.length}// 函数只能传入不为null的值strLength(neverNull)
//    strLength(nullable) // 爆红val str = descStr(null)println(str)println(descStr("hello are you ok?"))
}/*** 返回值为String,* 参数类型后面加个 ? 问号后,传入的值可以为null*/
fun descStr(maybeStr: String?): String {if (maybeStr !=null && maybeStr.length>0){return "StrLength is ${maybeStr.length}"}return "null"
}

kt中的类

  • 在kt里面没有 new 关键字

在这里插入图片描述

泛型 Generics

在这里插入图片描述

package com.tianju.ktLearn/*** 可以输入多个参数 vararg* <E> 泛型*/
class MutableStack<E>(vararg items: E) {              // 1private val elements = items.toMutableList()fun push(element: E) = elements.add(element)        // 2// 偷看一下fun peek(): E = elements.last()                     // 3// 弹出栈顶元素fun pop(): E = elements.removeAt(elements.size - 1)fun isEmpty() = elements.isEmpty()fun size() = elements.sizeoverride fun toString() = "MutableStack(${elements.joinToString()})"
}fun main() {val mut = MutableStack<String>("hello","pet")println("is mut empty?---> " + mut.isEmpty())print(mut)mut.push("wtt")println(mut)mut.peek()println(mut)val pop = mut.pop()println(pop)println(mut)println("is mut empty?---> " + mut.isEmpty())
}

在这里插入图片描述

泛型函数Generic Functions

如果函数的逻辑独立于特定类型,则也可以生成函数。例如,您可以编写一个实用程序函数来创建可变堆栈:

在这里插入图片描述

继承Inheritance

在这里插入图片描述

在这里插入图片描述

超类Asiatic

在这里插入图片描述

在这里插入图片描述

package com.tianju.ktLearn/*** open 关键字就表示是接口 interface*/
open class Dog{open fun fake(){println("wow wow !")}
}class YourDog : Dog(){override fun fake() {println("miao wu ,wow")}
}/*** 带参数的接口* interface with par*/
open class Cat(val name: String){fun sayHello(){println("A cat name is [$name] say hello")}
}class Arya : Cat("Arya")/*** 超类 :将构造函数参数传递给超类*/
open class Lion(val name:String,val age: Int){fun sayHello(){println("hi, every one, my name is $name, age is $age")}
}/*** Asiatic声明中的name既不是var也不是val:它是一个构造函数参数*/
class Asiatic(name: String) : Lion(name = name, age = 18)fun main() {val dog = YourDog()dog.fake()val cat : Cat = Arya()cat.sayHello()println(cat.name)val lion: Lion = Asiatic("Peter")lion.sayHello()
}

总结

1.kotlin初识;
2.function函数,变量,null;
3.泛型,接口,继承,超类;

相关文章:

Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…...

打印lua输出日志

日志级别&#xff1a; ngx.STDERR 标准输出ngx.EMERG 紧急报错ngx.ALERT 报警ngx.CRIT 严重&#xff0c;系统故障&#xff0c; 触发运维告警系统ngx.ERR 错误&#xff0c;业务不可恢复性错误ngx.WARN 提醒&#xff0c; 业务中可忽略错误ngx.NOTICE 提醒&#xff0c; 业务中比较…...

HTML新手入门笔记整理:HTML基本介绍

网页 静态页面 仅可供用户浏览&#xff0c;不具备与服务器交互的功能。 动态页面 可供用户浏览&#xff0c;具备与服务器交互的功能。 HTML HTML&#xff0c;全称HyperText Markup Language&#xff08;超文本标记语言&#xff09;,是一种用于创建网页的标准标记语言。用于…...

梯度引导的分子生成扩散模型- GaUDI 评测

GaUDI模型来自于以色列理工Tomer Weiss的2023年发表在预印本ChemRxiv上的工作 《Guided Diffusion for Inverse Molecular Design》。原文链接&#xff1a;Guided Diffusion for Inverse Molecular Design | Materials Chemistry | ChemRxiv | Cambridge Open Engage GaUDI模型…...

2023 年 亚太赛 APMCM ABC题 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 以五一杯 A题为例子&#xff0c;以下是咱们做的一些想法呀&am…...

如何用cmd命令快速搭建FTP服务

环境&#xff1a; Win10专业版 问题描述&#xff1a; 如何用cmd命令快速搭建FTP服务 解决方案&#xff1a; 1.输入以下命令来安装IIS&#xff08;Internet Information Services&#xff09;&#xff1a; dism /online /enable-feature /featurename:IIS-FTPServer /all …...

数据结构学习笔记——多维数组、矩阵与广义表

目录 一、多维数组&#xff08;一&#xff09;数组的定义&#xff08;二&#xff09;二维数组&#xff08;三&#xff09;多维数组的存储&#xff08;四&#xff09;多维数组的下标的相关计算 二、矩阵&#xff08;一&#xff09;特殊矩阵和稀疏矩阵&#xff08;二&#xff09;…...

C++之常用的排序算法

C之常用的排序算法 sort #include<iostream> using namespace std; #include<vector> #include<algorithm> #include<functional> void Myptint(int val) {cout << val << " "; }void test() {vector<int> v;v.push_back(…...

Mac中LaTex无法编译的问题

最近在使用TexStudio时&#xff0c;遇到一个棘手的问题&#xff1a; 无法编译&#xff0c;提示如下&#xff1a; kpathsea: Running mktexfmt xelatex.fmt /Library/TeX/texbin/mktexfmt: kpsewhich -var-valueTEXMFROOT failed, aborting early. BEGIN failed–compilation a…...

【Python爬虫】8大模块md文档集合从0到scrapy高手,第7篇:selenium 数据提取详解

本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识&#xff0c;通过本文我们能够知道什么是爬虫&#xff0c;都有那些分类&#xff0c;爬虫能干什么等&#xff0c;同时还会站在爬虫的角度复习一下http协议。 爬虫全套笔记地址&#xff1a; 请移步这里 共 8 章&#x…...

【python基础(三)】操作列表:for循环、正确缩进、切片的使用、元组

文章目录 一. 遍历整个列表1. 在for循环中执行更多操作2. 在for循环结束后执行一些操作 二. 避免缩进错误三. 创建数值列表1. 使用函数range()2. 使用range()创建数字列表3. 指定步长。4. 对数字列表执行简单的统计计算5. 列表解析 五. 使用列表的一部分-切片1. 切片2. 遍历切片…...

使用VSCode调试全志R128的C906 RISC-V核心

使用 VSCode 调试 调试 XuanTie C906 核心 准备工具 T-Head DebugServer&#xff08;CSkyDebugServer&#xff09; - 搭建调试服务器 下载地址&#xff1a;T-Head DebugServer手册&#xff1a;T-Head Debugger Server User Guide驱动&#xff1a;cklink_dirvers VSCode - 开…...

Node.js之http模块

http模块是什么&#xff1f; http 模块是 Node,js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法&#xff0c;就能方便的把一台普通的电脑&#xff0c;变成一台Web 服务器&#xff0c;从而对外提供 Web 资源服务。 如果我们想在node…...

golang 断点调试

1.碰见如下报错,调试器没有打印变量信息 Delve is too old for Go version 1.21.2 (maximum supported version 1.19) 2. 解决办法 升级delve delve是go语言的debug工具。 go install github.com/go-delve/delve/cmd/dlvlatest报错 Get “https://proxy.golang.org/github…...

定时器如何计算触发频率?

定时器触发频率的计算公式为&#xff1a;定时器时钟频率/&#xff08;预分频系数*计数周期1&#xff09;。其中&#xff0c;定时器时钟频率是指定时器所连接的总线频率&#xff0c;预分频系数和计数周期需要根据具体的需求进行设置。预分频系数用于将总线频率分频&#xff0c;计…...

【数据库】数据库中的检查点Checkpoint,数据落盘的重要时刻

检查点(checkpoint) ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定…...

关于 Docker

关于 Docker 1. 术语Docker Enginedockerd&#xff08;Docker daemon&#xff09;containerdOCI (Open Container Initiative)runcDocker shimCRI (Container Runtime Interface)CRI-O 2. 容器启动过程在 Linux 中的实现daemon 的作用 Docker 是个划时代的开源项目&#xff0c;…...

​LeetCode解法汇总2342. 数位和相等数对的最大和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 给你一个下…...

数据库的级联删除

级联删除是指在数据库中删除一个对象时&#xff0c;与该对象有关的其他对象也被自动删除。在 Django 中&#xff0c;级联删除通常通过在模型中定义外键时使用 on_delete 参数来实现。以下是一些常见的 on_delete 选项&#xff1a; 1.models.CASCADE: 当关联的对象被删除时&…...

【Python 千题 —— 基础篇】奇数列表

题目描述 题目描述 创建奇数列表。使用 for 循环创建一个包含 20 以内奇数的列表。 输入描述 无输入。 输出描述 输出创建的列表。 示例 示例 ① 输出&#xff1a; 创建的奇数列表为: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]代码讲解 下面是本题的代码&#xff1a; #…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...

统计按位或能得到最大值的子集数目

我们先来看题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出 nums 子集 按位或 可能得到的 最大值 &#xff0c;并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素&#xff08;或不删除&#xff09;得到&#xff0c;…...