kotlin 语言入门指南(三)--编码习惯
这章主要讲当前 kotlin 的一些编码习惯。
命名
如无疑问,kotlin 的命名风格与以下的java风格一样:
--驼峰命名法(不要使用下划线)
--类名首字母大写
--方法和属性名首字母小写
--四个空格缩进
--公共方法要写文档注释
冒号
冒号分开类与父类时,要在冒号前面加空格,而分开类与实例时则不需要加。
1 interface Foo<out T : Any> : Bar {
2 fun foo(a: Int): T
3 }
Lambdas
lambda 表达式中,花括号前后要用空格隔开,而且,箭头前后也要有空格,以便区分参数与函数体。
list.filter { it > 10 }.map { element -> element * 2 }
在单行 lambda 里,推荐在参数里用 it 关键字代替参数声明。而嵌套的 lambda 里参数就需要声明才能用。
Class 头部格式化
参数较少的 class 可以写成一行:
class Person(id: Int, name: String)
参数较多,头部较长的 class 可以将每个参数格式化成缩进式的一行一个,小括号可以另起一行。不过,如果我们在用继承,那么父类的构造函数调用里,或者实现的接口的list里,参数需要在括号内保持在一行:
1 class Person(
2 id: Int,
3 name: String,
4 surname: String
5 ) : Human(id, name) {
6 // ...
7 }
至于多接口,超级父类构造函数的调用必须放在前面,其他的接口要另起一行:
1 class Person(
2 id: Int,
3 name: String,
4 surname: String
5 ) : Human(id, name),
6 KotlinMaker {
7 // ...
8 }
构造函数的缩进可以是常规的缩进,也可以是持续缩进(常规缩进的double).
Unit
如果一个函数返回类型是 Unit ,那么它的返回类型可以省略,不指定:
fun foo() { // ": Unit" 在这里被省略了
}
Functions vs Properties
在某些情况下,无参数的方法可以跟只读属性互换。尽管语义类似,在互换时还是有一些语法风格与使用习惯上的约定,在满足以下算法规则下时,支持方法与属性互换:
--无抛出异常
--复杂度为0(1)
--简单运算
--返回结果相同
转载请注明原文地址:http://www.cnblogs.com/joejs/p/6889993.html
kotlin 语言入门指南(三)--编码习惯的更多相关文章
- kotlin 语言入门指南(二)--代码风格
语言风格 这里整理了 kotlin 惯用的代码风格,如果你有喜爱的代码风格,可以在 github 上给 kotlin 提 pull request . 创建DTOs(POJSs/POCOs) 文件: ...
- kotlin 语言入门指南一
基于官网的Getting Start部分,翻译如下: 基础语法 定义一个包 包的声明必须放在文件头部: package my.demo import java.util.* // ... 不需要加上p ...
- kotlin 语言入门指南(一)--基础语法
基于官网的Getting Start的基础语法教程部分,一共三节,这篇是第一节,翻译如下: 基础语法 定义一个包 包的声明必须放在文件头部: package my.demo import java.u ...
- Go 语言入门(三)并发
写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(三 ...
- ReadHub项目Kotlin版开发指南(三、MVP架构)
ReadHub项目Kotlin版转换指南(一.环境搭建) ReadHub项目Kotlin版转换指南(二.数据库和网络请求) ReadHub项目Kotlin版转换指南(三.MVP架构) Android ...
- 浙工大C语言入门指南 (仅供参考)
C语言书籍推荐 浙工大图书馆中,计算机的书都集中在三楼TP区.我个人推荐下面这么几本书. <Head First C>.Head First系列的书质量基本都很高.该书有很多插图,总体上就 ...
- Drools规则引擎入门指南(三)——使用Docker部署Workbench
其实本来我也是打算使用Tomcat来部署Workbench的,但是在网上看了几篇文章,超级繁琐的配置.各种版本.实在看不下去了索性就直接使用Docker来部署了.本次部署的版本是最新稳定版,对应dro ...
- require.js入门指南(三)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Go语言入门教程(十)之函数
Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...
随机推荐
- 9.Linux系统引导流程
一.Linux系统引导流程 当我们按下主机电源键的那时候开始,主板上的CMOS/BIOS模块将进行固件自检,以此检查各个硬件是否正确连接. 在Linux引导流程中,一般可以分为以下几个主要过程: 1. ...
- Java 静态代理与动态代理
代理模式 设想你的项目依赖第三方,但是你需要对其接口做一些数据检验.性能数据记录.异常处理等,合适的方法就是使用设计模式里的代理模式. 代理模式是常用的java设计模式,代理类与委托类有同样的接口,代 ...
- 对InvokeRequired的理解
if (listBox1.InvokeRequired) //当有新工作进程访问控件时InvokeRequired为True ...
- Mysql安装设置建议(参数设置)
当我们监测MySQL性能时,人们希望我们能够检视一下MySQL配置然后给出一些提高建议.许多人在事后都非常惊讶,因为我们建议他们仅仅改动几个设置,即使是这里有好几百个配置项.这篇文章的目的在于给你一份 ...
- 【2017-04-18】Ado.Net C#连接数据库进行增、删、改、查
一.简介 1.ado.net是一门数据库访问技术. 他可以通过程序来操作数据库 2.类库 Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接 ...
- JavaScript的XMLHttpRequest对象
ajax的核心技术是XMLHttpRequest对象,简称XHR. //支持IE7及更高的版本 function createXML() { if(typeof XMLHttpReqquest!=&q ...
- StringHelper--封转自己的字符串工具类
我们每次开发项目,都会有很多的关于字符串的处理,字符串的处理太常见了,无法避免,那么这时如果可以把常用的字符串处理封装成类,在以后的开发中应该会减少一些工作量,下面代码对一些常用的字符串处理进行了封装 ...
- LinkCode 下一个排列、上一个排列
http://www.lintcode.com/zh-cn/problem/next-permutation-ii/# 原题 给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列 ...
- Python资源汇总
Python 目录: 管理面板 算法和设计模式 反垃圾邮件 资产管理 音频 验证 构建工具 缓存 ChatOps工具 CMS 代码分析和Linter 命令行工具 兼容性 计算机视觉 并发和并行性 组态 ...
- Linux的kobject机制
作者:Younger Liu 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. sysfs文件系统下的每个目录对应于一个kobj,kset是kobj的封装,内 ...