Android 之 kotlin 语言学习笔记二(编码标准)

news2025/6/2 9:45:11

1、源文件命名

  • 所有源文件都必须编码为 UTF-8。
  • 如果源文件只包含一个顶级类,则文件名应为该类的名称(区分大小写)加上 .kt 扩展名。
  • 如果源文件包含多个顶级声明,则应选择一个可描述文件内容的名称(采用 PascalCase 大小写形式;如果文件名为复数,亦可采用驼峰命名法)并加上 .kt 扩展名。
	// MyClass.kt
	class MyClass { }

	// Bar.kt
	class Bar { }
	fun Runnable.toBar(): Bar = // …

	// Map.kt
	fun <T, O> Set<T>.map(func: (T) -> O): List<O> = // …
	fun <T, O> List<T>.map(func: (T) -> O): List<O> = // …

	// extensions.kt
	fun MyClass.process() = // …
	fun MyResult.print() = // …

2、特殊字符

(1) 空白字符

除了行终止符序列之外,ASCII 水平空格字符 (0x20) 是唯一一种可以出现在源文件中任意位置的空白字符。这意味着:

  • 字符串和字符字面量中的其他所有空白字符都会进行转义。
  • 制表符不用于缩进。

(2) 特殊转义序列

对于任何具有特殊转义序列(\b、\n、\r、\t、'、"、\ 和 $)的字符,将使用该序列,而不是相应的 Unicode 转义字符(例如 \u000a)。

(3)非 ASCII 字符

对于其余非 ASCII 字符,要么使用实际的 Unicode 字符(例如 ∞),要么使用等效的 Unicode 转义字符(例如 \u221e)。具体选择仅取决于哪种字符可使代码更容易阅读和理解。建议不要对任何位置的可输出字符使用 Unicode 转义字符,强烈建议不要在字符串字面量和注释之外使用 Unicode 转义字符。

	// 最好:即使没有注释,也非常清楚。
	val unitAbbrev = "μs"	
	// 差:没有理由对可打印字符使用转义。	
	val unitAbbrev = "\u03bcs" // μs
	// 差:读者不知道这是什么。
	val unitAbbrev = "\u03bcs"	
	// 好:对不可打印字符使用转义,并在必要时添加注释。
	return "\ufeff" + content	

3、结构

  • .kt 文件由下面几部分组成(按顺序列出),各部分用一个空白行隔开:
    • 版权和/或许可标头(可选)
    • 文件级注解
    • package 语句
    • import 语句
    • 顶级声明

(1)版权/许可

  • 如果版权或许可标头需要放在文件中,应将其放在多行注释的上方,并让其紧挨着多行注释。
	/*
	 * Copyright 2017 Google, Inc.
	 *
	 * ...
	 */ 
  • 勿使用 KDoc 样式或单行样式的注释。
	KDoc 样式
	/**
	 * Copyright 2017 Google, Inc.
	 *
	 * ...
	 */

	单行样式
	// Copyright 2017 Google, Inc.
	//
	// ...

(2)文件级注解

  • 应将具有 “file” 使用处目标的注解放在任何标头注释和软件包声明之间。
	@file:JvmName("Foo")
	
	package org.jetbrains.demo

(3)package 语句

  • package 语句不受任何列限制且从不换行

(4)import 语句

  • 应将类、函数和属性的 import 语句归在单个列表中并按 ASCII 进行排序
  • 不允许(任何类型的)通配符导入。
  • 与 package 语句类似,import 语句也不受列限制且从不换行

(5)顶级声明

  • .kt 文件可以在顶级声明一个或多个类型、函数、属性或类型别名。
  • 对文件的内容量和内容顺序没有做出明确的限制。通常按从上到下的顺序读取源文件,顺序通常应反映出位置比较靠上的声明将有助于理解位置比较靠下的声明。
  • 每个类都采用某种逻辑顺序,类的维护人员在被问及时应可以解释清楚相应逻辑顺序。例如,新函数不应直接习惯性地添加到类的末尾,因为这样会产生“按添加日期先后顺序”排序,而这不是逻辑排序。

4、格式设置

(1)大括号

  • when 分支以及具有不超过一个 else 分支且仅占一行的 if 表达式不需要大括号。
	if (string.isEmpty()) return
	
	val result =
	    if (string.isEmpty()) DEFAULT_VALUE else string
	
	when (value) {
	    0 -> return
	    // …
	}
  • 任何 if、for、when 分支、do 和 while 语句及表达式都需要大括号,即使主体为空或仅包含一个语句也是如此。
	if (string.isEmpty())
	    return  // WRONG!
	
	if (string.isEmpty()) {
	    return  // Okay
	}
	
	if (string.isEmpty()) return  // WRONG
	else doLotsOfProcessingOn(string, otherParametersHere)
	
	if (string.isEmpty()) {
	    return  // Okay
	} else {
	    doLotsOfProcessingOn(string, otherParametersHere)
	}
  • 非空块:对于非空块和类似块的构造,大括号遵循 Kernighan 和 Ritchie (K&R) 样式(“埃及括号”):
    • 左大括号前面没有换行符。
    • 左大括号后面有换行符。
    • 右大括号前面有换行符。
    • 仅当右大括号终止语句或者终止函数、构造函数或命名类的主体时,它后面才有换行符。例如,如果大括号后跟 else 或一个英文逗号,就不应在它后面换行。
	object : MyClass() {
	    override fun foo() {
	        if (condition()) {
	            try {
	                something()
	            } catch (e: ProblemException) {
	                recover()
	            }
	        } else if (otherCondition()) {
	            somethingElse()
	        } else {
	            lastThing()
	        }
	    }
	}
  • 空块:空块或类似块的构造必须采用 K&R 样式。
	try {
	    doSomething()
	} catch (e: Exception) {} // WRONG!
	
	try {
	    doSomething()
	} catch (e: Exception) {
	} // Okay
  • 表达式:仅当整个表达式适合放在一行时,用作表达式的 if/else 条件语句才能省略大括号。
	// Okay
	val value = if (string.isEmpty()) 0 else 1  
	
	// WRONG!
	val value = if (string.isEmpty())  
	    0
	else
	    1
	    
	// Okay    
	val value = if (string.isEmpty()) { 
	    0
	} else {
	    1
	}

(2)换行

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

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

相关文章

华为OD机试真题——Boss的收入(分销网络提成计算)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

历年西北工业大学计算机保研上机真题

2025西北工业大学计算机保研上机真题 2024西北工业大学计算机保研上机真题 2023西北工业大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school 计算整数乘积 题目描述 给定 n n n 组数&#xff0c;每组两个整数&#xff0c;输出这两个整数的乘积。 …

使用pnpm、vite搭建Phaserjs的开发环境

首先&#xff0c;确保你已经安装了 Node.js 和 npm。然后按照以下步骤操作&#xff1a; 一、使用pnpm初始化一个新的 Vite 项目 pnpm create vite 输入名字 选择模板&#xff0c;这里我选择Vanilla,也可以选择其他的比如vue 选择语言 项目新建完成 二、安装相关依赖 进入项…

intra-mart执行java方法笔记

一、前言 最近在用intra-mart&#xff0c;感觉官方文档不明不白的&#xff0c;很难搜。 想在intra-mart里执行java&#xff0c;找了半天&#xff0c;终于试出来了。 在此总结一下。 想看官网文档&#xff0c;这个是地址&#xff1a; https://document.intra-mart.jp/library…

在 Vue 2中使用 dhtmlxGantt 7.1.13组件,并解决使用时遇到的问题汇总.“dhtmlx-gantt“: “^7.1.13“,

一、最终实现的结果gif展示 二、开发步骤简介 1、vue中引用甘特图包dhtmlx-gantt // 可根据项目版本载入适配的版本 npm install dhtmlx-gantt7.1.132、vue文件中引入 <script> import { gantt } from dhtmlx-gantt/codebase/dhtmlxgantt.js import dhtmlx-gantt/code…

【C++高级主题】命令空间(三):未命名的命名空间

目录 一、未命名的命名空间的基本概念 1.1 定义与特点 1.2 基本语法 1.3 访问方式 1.4 未命名的命名空间的作用 二、未命名的命名空间与静态声明的比较 2.1 静态声明的作用 2.2 未命名的命名空间的优势 2.3 示例代码比较 2.4. 未命名的命名空间的作用域和链接属性 三…

VoltAgent 是一个开源 TypeScript 框架,用于构建和编排 AI 代理

​一、软件介绍 文末提供程序和源码下载 VoltAgent 是一个开源 TypeScript 框架&#xff0c;用于构建和编排 AI 代理 二、什么是 VoltAgent&#xff1f; AI 代理框架提供了构建由自主代理提供支持的应用程序所需的基础结构和工具。这些代理通常由大型语言模型 &#xff08;&am…

Unity 中实现首尾无限循环的 ListView

之前已经实现过&#xff1a; Unity 中实现可复用的 ListView-CSDN博客文章浏览阅读5.6k次&#xff0c;点赞2次&#xff0c;收藏27次。源码已放入我的 github&#xff0c;地址&#xff1a;Unity-ListView前言实现一个列表组件&#xff0c;表现方面最核心的部分就是重写布局&…

mongodb集群之副本集

目录 1. 适用场景备份高可用性 2. 集群搭建如何搭建资源规划根据资源完成各节点conf文件的配置启动各个mongodb节点初始化集群信息 搭建实例Linux搭建实例&#xff08;待定&#xff09;Windows搭建实例 3. 副本集基础操作4.集群平滑升级 1. 适用场景 备份 1&#xff09;服务器…

基于微服务架构的社交学习平台WEB系统的设计与实现

设计&#xff08;论文&#xff09;题目 基于微服务架构的社交学习平台WEB系统的设计与实现 摘 要 社交学习平台 web 系统要为学习者打造一个开放、互动且社交性强的在线教育环境&#xff0c;打算采用微服务架构来设计并实现一个社交学习平台 web 系统&#xff0c;以此适应学…

放假带出门的充电宝买哪种好用耐用?倍思超能充35W了解一下!

端午节的到来和毕业季的临近&#xff0c;让很多人开始计划出游或长途旅行。而在旅途中&#xff0c;一款好用耐用的充电宝可以省不少事。今天&#xff0c;我们就来聊聊放假带出门的充电宝买哪种好用耐用&#xff0c;看看为什么倍思超能充35W更适合带出门~ 一、为什么需要一款好用…

AI智能体策略FunctionCalling和ReAct有什么区别?

Dify 内置了两种 Agent 策略&#xff1a;Function Calling 和 ReAct&#xff0c;但二者有什么区别呢&#xff1f;在使用时又该如何选择呢&#xff1f;接下来我们一起来看。 1.Function Calling Function Call 会通过将用户指令映射到预定义函数或工具&#xff0c;LLM 先识别用…

改进自己的图片 app

1. 起因&#xff0c; 目的: 前面我写过一个图片 app &#xff0c; 最新做了些改动。 把原来的一列&#xff0c;改为3列&#xff0c; 继续使用瀑布流手机上使用&#xff0c;更流畅&#xff0c;横屏显示为2列。 2. 先看效果 3. 过程: 过程太细碎了&#xff0c;这里只是做一下…

Uniapp+UView+Uni-star打包小程序极简方案

一、减少主包体积 主包污染源&#xff08;全局文件依赖&#xff09;劲量独立导入 componentsstaticmain.jsApp.vueuni.css 分包配置缺陷&#xff0c;未配置manifest.json中mp-weixin节点 "usingComponents" : true,"lazyCodeLoading" : "requiredC…

算法题(159):快速幂

审题&#xff1a; 本题需要我们计算出(a^b)%c的值&#xff0c;并按照规定格式输出 思路&#xff1a; 方法一&#xff1a;暴力解法 我们直接循环b次计算出a^b,然后再取余c&#xff0c;从而得出最终结果 时间上&#xff1a;会进行2^31次&#xff0c;他的数量级非常大&#xff0c;…

【新品发布】嵌入式人工智能实验箱EDU-AIoT ELF 2正式发布

在万物互联的智能化时代&#xff0c;将AI算法深度植入硬件终端的技术&#xff0c;正悄然改变着工业物联网、智慧交通、智慧医疗等领域的创新边界。为了助力嵌入式人工智能在教育领域实现高质量发展&#xff0c;飞凌嵌入式旗下教育品牌ElfBoard&#xff0c;特别推出嵌入式人工智…

基于javaweb的SpringBoot体检管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

IPD的基础理论与框架——(四)矩阵型组织:打破部门壁垒,构建高效协同的底层

在传统的组织架构中&#xff0c;企业多采用直线职能制&#xff0c;就像一座等级森严的金字塔&#xff0c;信息沿着垂直的层级传递&#xff0c;员工被划分到各个职能部门。这种架构职责清晰、分工明确&#xff0c;在稳定的市场环境中&#xff0c;能让企业高效运作&#xff0c;发…

小程序为什么要安装SSL安全证书

小程序需要部署SSL安全证书&#xff0c;这是小程序开发及运营的强制性要求&#xff0c;也是保障用户数据安全、提升用户体验和满足平台规范的必要措施。 一、平台强制要求 微信小程序官方规范 微信小程序明确要求所有网络请求必须通过HTTPS协议传输&#xff0c;服务器域名需配…

python打卡训练营打卡记录day40

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#xff1a;仔细学习下测试和训练代码…