商务型企业网站建设/快速排序优化

商务型企业网站建设,快速排序优化,深圳怎么做网络推广软仿,wordpress破解登录密码在Kotlin中定义变量的方式和Java 区别很大,在Java 中如果想要定义一个变 量,需要在变量前面声明这个变量的类型,比如说int a表示a是一个整型变量,String b表 示b是一个字符串变量。而Kotlin中定义一个变量,只允许在变量…

在Kotlin中定义变量的方式和Java 区别很大,在Java 中如果想要定义一个变
量,需要在变量前面声明这个变量的类型,比如说int a表示a是一个整型变量,String b表
示b是一个字符串变量。而Kotlin中定义一个变量,只允许在变量前声明两种关键字:val和
var。

val(value 的简写)用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋
值,对应Java 中的final变量。

var(variable 的简写)用来声明一个可变的变量,这种变量在初始赋值之后仍然可以再被重新
赋值,对应Java 中的非final变量。

如果你有Java 编程经验的话,可能会在这里产生疑惑,仅仅使用val或者var来声明一个变量,
那么编译器怎么能知道这个变量是什么类型呢?这也是Kotlin比较有特色的一点,它拥有出色的
类型推导机制。

举个例子,我们打开上一节创建的LearnKotlin 文件,在main()函数中编写如下代码:

fun main() { val a = 10 println("a = " + a) 
}

注意,Kotlin每一行代码的结尾是不用加分号的,如果你写惯了Java 的话,在这里得先熟悉一
下。
在上述代码中,我们使用val关键字定义了一个变量a,并将它赋值为10 ,这里a就会被自动推
导成整型变量。因为既然你要把一个整数赋值给a,那么a就只能是整型变量,而如果你要把一
个字符串赋值给a的话,那么a就会被自动推导成字符串变量,这就是Kotlin的类型推导机制。
现在我们运行一下main()函数,执行结果如图所示,正是我们所预期的。

在这里插入图片描述

但是Kotlin的类型推导机制并不总是可以正常工作的,比如说如果我们对一个变量延迟赋值的
话,Kotlin就无法自动推导它的类型了。这时候就需要显式地声明变量类型才行,Kotlin提供了
对这一功能的支持,语法如下所示:

val a: Int = 10 

可以看到,我们显式地声明了变量a为Int类型,此时Kotlin就不会再尝试进行类型推导了。如
果现在你尝试将一个字符串赋值给a,那么编译器就会抛出类型不匹配的异常。

如果你学过Java 并且足够细心的话,你可能发现了Kotlin中Int的首字母是大写的,而Java 中
int的首字母是小写的。不要小看这一个字母大小写的差距,这表示Kotlin完全抛弃了Java 中的
基本数据类型,全部使用了对象数据类型。在Java 中int是关键字,而在Kotlin中Int变成了一
个类,它拥有自己的方法和继承结构。

表中列出了Java 中的每一个基本数据类型在Kotlin中对应的对象数据类型。

在这里插入图片描述

接下来我们尝试对变量a进行一些数学运算,比如说让a变大10 倍,可能你会很自然地写出如下
代码:

fun main() { val a: Int = 10 a = a * 10 println("a = " + a) 
}

很遗憾,如果你这样写的话,编译器一定会提示一个错误:Val cannot be reassigned 。这是
在告诉我们,使用val关键字声明的变量无法被重新赋值。出现这个问题的原因是我们在一开始
定义a的时候将它赋值成了10 ,然后又在下一行让它变大10 倍,这个时候就是对a进行重新赋值
了,因而编译器也就报错了。

解决这个问题的办法也很简单,前面已经提到了,val关键字用来声明一个不可变的变量,而
var关键字用来声明一个可变的变量,所以这里只需要把val改成var即可,如下所示:

fun main() { var a: Int = 10 a = a * 10 println("a = " + a) 
}

现在编译器就不会再报错了,重新运行一下代码

在这里插入图片描述

可以看到,a的值变成了100 ,这说明我们的数学运算操作成功了。
这里你可能会产生疑惑:既然val关键字有这么多的束缚,为什么还要用这个关键字呢?干脆全
部用var关键字不就好了。其实Kotlin之所以这样设计,是为了解决Java 中final关键字没有被
合理使用的问题。

在Java 中,除非你主动在变量前声明了final关键字,否则这个变量就是可变的。然而这并不
是一件好事,当项目变得越来越复杂,参与开发的人越来越多时,你永远不知道一个可变的变
量会在什么时候被谁给修改了,即使它原本不应该被修改,这就经常会导致出现一些很难排查
的问题。因此,一个好的编程习惯是,除非一个变量明确允许被修改,否则都应该给它加上
final关键字。

但是,不是每个人都能养成这种良好的编程习惯。我相信至少有90% 的Java 程序员没有主动在
变量前加上final关键字的意识,仅仅因为Java 对此是不强制的。因此,Kotlin在设计的时候就
采用了和Java 完全不同的方式,提供了val和var这两个关键字,必须由开发者主动声明该变量
是可变的还是不可变的。

那么我们应该什么时候使用val,什么时候使用var呢?这里我告诉你一个小诀窍,就是永远优
先使用val来声明一个变量,而当val没有办法满足你的需求时再使用var。这样设计出来的程
序会更加健壮,也更加符合高质量的编码规范。

函数

对于函数和方法这两个概念有些混淆,不明白它们有什么区别。其实,函
数和方法就是同一个概念,这两种叫法都是从英文翻译过来的,函数翻译自function ,方法翻
译自method ,它们并没有什么区别,只是不同语言的叫法习惯不一样而已。而因为Java 中方
法的叫法更普遍一些,Kotlin中函数的叫法更普遍一些,因此本书里可能会交叉使用两种叫法,
你只要知道它们是同一种东西就可以了,不用在这个地方产生疑惑。

函数是用来运行代码的载体,你可以在一个函数里编写很多行代码,当运行这个函数时,函数
中的所有代码会全部运行。像我们前面使用过的main()函数就是一个函数,只不过它比较特
殊,是程序的入口函数,即程序一旦运行,就是从main()函数开始执行的。

但是只有一个main()函数的程序显然是很初级的,和其他编程语言一样,Kotlin也允许我们自
由地定义函数,语法规则如下:

fun methodName(param1: Int, param2: Int): Int { return 0 
}

下面我来解释一下上述的语法规则,首先fun(function 的简写)是定义函数的关键字,无论你
定义什么函数,都一定要使用fun来声明。

紧跟在fun后面的是函数名,这个就没有什么要求了,你可以根据自己的喜好起任何名字,但是
良好的编程习惯是函数名最好要有一定的意义,能表达这个函数的作用是什么。

函数名后面紧跟着一对括号,里面可以声明该函数接收什么参数,参数的数量可以是任意多
个,例如上述示例就表示该函数接收两个Int类型的参数。参数的声明格式是“参数名: 参数类
型”,其中参数名也是可以随便定义的,这一点和函数名类似。如果不想接收任何参数,那么写
一对空括号就可以了。

参数括号后面的那部分是可选的,用于声明该函数会返回什么类型的数据,上述示例就表示该
函数会返回一个Int类型的数据。如果你的函数不需要返回任何数据,这部分可以直接不写。

最后两个大括号之间的内容就是函数体了,我们可以在这里编写一个函数的具体逻辑。由于上
述示例中声明了该函数会返回一个Int类型的数据,因此在函数体中我们简单地返回了一个0。

这就是定义一个函数最标准的方式了,虽然Kotlin中还有许多其他修饰函数的关键字,但是只要
掌握了上述函数定义规则,你就已经能应对80% 以上的编程场景了,至于其他的关键字,我们
会在后面慢慢学习。

接下来我们尝试按照上述定义函数的语法规则来定义一个有意义的函数,如下所示:

fun largerNumber(num1: Int, num2: Int): Int { return max(num1, num2) 
}

这里定义了一个名叫largerNumber()的函数,该函数的作用很简单,接收两个整型参数,然
后总是返回两个参数中更大的那个数。

注意,上述代码中使用了一个max()函数,这是Kotlin提供的一个内置函数,它的作用就是返回
两个参数中更大的那个数,因此我们的largerNumber()函数其实就是对max()函数做了一层
封装而已。

现在你可以开始在LearnKotlin 文件中实现largerNumber()这个函数了,当你输入“max” 这
个单词时,Android Studio 会自动弹出如图

在这里插入图片描述
Android Studio 拥有非常智能的代码提示和补全功能,通常你只需要键入部分代码,它就能自
动预测你想要编写的内容,并给出相应的提示列表。我们可以通过上下键在提示列表中移动,
然后按下“Enter” 键,Android Studio 就会自动帮我们进行代码补全了。

这里我非常建议你经常使用Android Studio 的代码补全功能,可能有些人觉得全部手敲更有成
就感,但是我要提醒一句,使用代码补全功能后,Android Studio 不仅会帮我们补全代码,还
会帮我们自动导包,这一点是很重要的。比如说上述的max()函数,如果你全部手敲出来,那
么这个函数一定会提示一个红色的错误,如图

在这里插入图片描述

max()函数提示错误

出现这个错误的原因是你没有导入max()函数的包。当然,导包的方法也有很多种,你将光标
移动到这个红色的错误上面就能看到导包的快捷键提示,但是最好的做法就是使用Android
Studio 的代码补全功能,这样导包工作就自动完成了。

现在我们使用代码补全功能再来编写一次max()函数,你会发现LearnKotlin 文件的头部自动导
入了一个max()函数的包,并且不会再有错误提示了,如图

在这里插入图片描述

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

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

相关文章

基于数据可视化学习的卡路里消耗预测分析

数据分析实操集合: 1、关于房间传感器监测数据集的探索 2、EEMD-LSTM模型择时策略 — 1.EEMD分解与LSTM模型搭建 3、EEMD-LSTM模型择时策略 — 2. 量化回测 4、国际超市电商销售数据分析 5、基于问卷调查数据的多元统计数据分析与预测(因子分析、对应分…

记录Liunx安装Jenkins时的Package ‘jenkins‘ has no installation candidate

1、确保是否安装了Java,如果没有,可通过以下命令进行安装: sudo apt update sudo apt install openjdk-21-jre2、安装Jenkins sudo apt update sudo apt install jenkins执行sudo apt install jenkins时,可能会出现 意思是&…

kiln微调大模型-使用deepseek R1去训练一个你的具备推理能力的chatGPT 4o

前言 随着deepseek的爆火,对于LLM的各种内容也逐渐步入我的视野,我个人认为,可能未来很长一段时间,AI将持续爆火,进入一段时间的井喷期,AI也会慢慢的走入我们每个家庭之中,为我们的生活提供便利…

sqli-labs

Less-8 单引号报错,双引号显示正常 又是You are in......看来还是用盲注 布尔盲注: 如下语句是用来判断当前数据库名的第一个字母是不是s,后面的以此类推,比较复杂和麻烦 ?id1 and substr(database(),1,1)s -- 比如这个我们通…

自定义ToolbarView实战指南(Kotlin版)

一、为什么我们需要造轮子? 看到标题你可能会问:系统自带Toolbar不香吗?确实香,但遇到这些场景就抓瞎了: 设计稿要求标题栏带渐变背景动态波浪线产品经理非要搞个不对称的返回按钮布局UI设计师坚持标题和副标题要45度…

微软推出Office免费版,限制诸多,只能编辑不能保存到本地

易采游戏网2月25日独家消息:微软宣布推出一款免费的Office版本,允许用户进行基础文档编辑操作,但限制颇多,其中最引人关注的是用户无法将文件保存到本地。这一举措引发了广泛讨论,业界人士对其背后的商业策略和用户体验…

PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)

PyTorch-基础 环境准备 CUDA Toolkit安装(核显跳过此步骤) CUDA Toolkit是NVIDIA的开发工具,里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本,如何去下载对应版本的Toolkit工…

Vue2+Element实现Excel文件上传下载预览【超详细图解】

目录 一、需求背景 二、落地实现 1.文件上传 图片示例 HTML代码 业务代码 2.文件下载 图片示例 方式一:代码 方式二:代码 3.文件预览 图片示例 方式一:代码 方式二:代码 一、需求背景 在一个愉快的年后&#xff…

【Bug】natten:安装报错(临近注意力机制的高效cuda内核实现)

正常安装natten报错 pip install natten 报错 可以尝试使用以下网站进行安装 https://shi-labs.com/natten/ 可以根据自己的cuda与pytorch版本进行安装 之间复制命令即可,不需要进行任何修改

win10把c盘docker虚拟硬盘映射迁移到别的磁盘

c盘空间本身就比较小、如果安装了docker服务后,安装的时候没选择其他硬盘,虚拟磁盘也在c盘会占用很大的空间,像我的就三十多个G,把它迁移到其他磁盘一下子节约几十G 1、先输入下面命令查看 docker 状态 wsl -l -v 2、如果没有停止…

动态内容加载的解决方案:Selenium与Playwright对比故障排查实录

方案进程 2024-09-01 09:00 | 接到亚航航班数据采集需求 2024-09-01 11:30 | 首次尝试使用Selenium遭遇Cloudflare验证 2024-09-01 14:00 | 切换Playwright方案仍触发反爬机制 2024-09-01 16:30 | 引入爬虫代理IPUA轮换策略 2024-09-02 10:00 | 双方案完整实现并通过压力测试故…

MaxKB上架至阿里云轻量应用服务器镜像市场

近日,MaxKB开源知识库问答系统已上架至阿里云轻量应用服务器镜像市场,目前是阿里云此类镜像市场中唯一推荐的AI应用镜像。 ▲图1 MaxKB已经上架至阿里云轻量应用服务器镜像市场 MaxKB是飞致云旗下开源项目,是一款基于大语言模型和RAG&…

string类详解(下)

文章目录 4. string类的模拟实现4.1 构造 析构4.2 c_str4.3 下标遍历4.4 迭代器4.5 插入4.6 删除4.7 查找4.8 赋值4.9 交换4.10 提取子串4.11 比较大小4.12 流插入 && 流提取 5. 现代版写法的String类5.1 完整代码 6. 写时拷贝(了解) 4. string…

win11本地部署deepseek大模型(安装ollama+docker+open-webui)最终实现自己的项目可通过API调用投喂数据后的模型

硬件配置:笔记本win11,内存32G,CPU锐龙7 ,无独显;只能考虑deepseek-r1:1.5b模型。 第一步:安装Ollama 此处不过多累赘了,https://ollama.com/官网选择对应的系统版本下载即可。 需要注意的是…

WebSocket简单介绍 并接入deepseek

目录 什么是 WebSocket?工作原理: 为什么需要 WebSocket?WebSocket 的优势HTTP 和 WebSocket 的区别WebSocket 的劣势WebSocket 的应用场景WebSocket 握手过程1. 客户端发起握手请求2. 服务器响应握手请求3. 建立连接 WebSocket 事件处理WebS…

order by布尔盲注、时间盲注

pdo防御下,order by、limit不能参数绑定,可以进行sql注入 案例:靶场的less-46 布尔盲注: import requests from lxml import htmldef get_id_one(URL, paload):res requests.get(urlURL, paramspaload)tree html.fromstring(…

Visual Studio Code 跨平台安装与配置指南(附官方下载链接)

一、软件定位与核心功能 Visual Studio Code(简称VS Code)是微软开发的开源跨平台代码编辑器,支持超过50种编程语言的智能补全、调试和版本控制功能。2025版本新增AI辅助编程模块,可自动生成单元测试代码和API文档注释。 二、下载…

解决IDEA使用Ctrl + / 注释不规范问题

问题描述: ctrl/ 时,注释缩进和代码规范不一致问题 解决方式 设置->编辑器->代码样式->java->代码生成->注释代码

项目实践 之 pdf简历的解析和填充(若依+vue3)

文章目录 环境背景最终效果前端讲解左侧模块解析右侧上传模块解析前端步骤 后端讲解代码前端 环境背景 若依前后端分离框架 vue最后边附有代码哦 最终效果 前端讲解 左侧模块解析 1、左侧表单使用el-form 注意: 1、prop出现的字段,需要保证是该类所…

如何看待 Kaiming He 最新提出的 Fractal Generative Models ?

何恺明团队提出的分形生成模型(Fractal Generative Models) 引发了广泛关注,其核心思想是通过递归调用生成模型模块构建自相似结构,类似数学中的分形概念(如雪花结构),从而高效生成高分辨率数据(如图像)。 Fractal Generative Models即分形生成模型,是一种新型的生成…