Kotlin学习 PART 1:kotlin定义和目的
从事android开发转眼间已经两年多了呢,一直用的java开发,早就想试试用kotlin进行开发,稍微瞄一眼 = =,感觉真的,某人说的还真的有点道理,kotlin比起你们用的那些垃圾语言要高级的多。(有点“不是我针对谁,在座的各位都是垃圾!”的感觉)
废话不多说,开始战斗!
说说学习方法吧,个人不怎么信网上的教程,节奏慢,技术太落后,鱼龙混杂。感觉还是自己看书来的效率高。并且这里,我也只是记录一些思维的零碎的片段,并没有像书一样有着完整的条分缕析,只是单纯为了记忆的需求,不喜勿喷。参考书:《kotlin实战》,顺便普及一下个人选书的原则,太厚不要,国人编的不要,封面印成国内应试课本或者参考书一样的不要。
1.Kotlin在线playground site:http://try.kotl.lin
2.Kotlin和java一样是一种静态类型的编程语言。动态类型的编程语言,会减少代码量并增加创建数据结构的灵活性,缺点是在编译器不能发现像名字拼写错误这样的问题,继而导致运行时的错误。
***3.函数式编程风格:可以轻易地将这段逻辑中公共的部分提取到一个函数中,并将其他不同的部分作为参数传递给他。
4.Kotlin团队打造的Anko给许多AndroidApi添加了Kotlin友好的适配器,进一步提升了Android的开发体验。
5.在Kotlin中,我们努力的保证你写的代码都具有实际的意义,而不是仅仅为了满足代码结构的需要。许多标准的Java样板代码,例如getter,setter以及将构造方法的参数赋值给字段的逻辑,在Kotlin中都是隐式的,并不会使你的源代码变得混乱。
6.INTELLIJ IDEA 小贴士Intellij IDEA提供了在两种函数风格直接转换的intention actions(意向动作)和“convert to expression body”(转换成表达式函数体)和“Convert to block body”(转化成代码块函数体)。
7.val,不可变引用。使用val声明的变量不能在初始化之后再次赋值。它对应的是Java的final变量。
var,可变引用。这种变量的值可以被改变。这种声明对应的是普通(非final)的java变量。
即使var关键字允许变量改变自己的值,但他的类型却是改变不了的。
e.g.var answer = 42
answer = "no answer"
8.kotlin源码布局:目录和包
如果其他文件中定义的声明也有相同的包,这个文件可以直接使用它们;如果包不相同,则需要导入它们。
9.枚举类的使用
enum class Color(var r:Int, val g:Int, val b:Int) {
RED(255, 0, 0), ORANGE(255, 165, 0),
YELLOW(255,255,0), GREEN(0,255,255), BLUE(0,0,255),
INDIGO(75, 0, 130),VIOLET(238,130,238);
fun rgb() = (r*256+g)*256 +b
}
10.使用when处理枚举类
fun getMnemonic(color:Color) =
when(color) {
Color.RED ->"Richard"
Color.ORANGE->"Of"
Color.Yellow->"York"
}
当遇到多个值返回的是同一个结构的情况,这样表示
Color.ORANGE, Color.Yellow->"York"
***在when结构中允许使用任意对象,不像java中只允许常量。
11.使用不带参数的“when”
代码可读性会变差,但这是为了达到更好性能而必须付出的代价。
fun mixOptimized(c1:Color,c2:Color) =
when{
(c1 == RED && c2 == YELLOW) ||
(c1 == YELLOW && c2 == RED)->ORANGE
else -> throw Exception("Dirty color")
}
**简单地来说就是将条件从原来的变量变成各种情况的表达式,而不是仅仅对变量的各种情况进行判定,相比Java要更加灵活
12.合并类型检查和转换
interface Expr
class Num(val value:Int) :Expr
class Sum(val left: Expr, val right:Expr):Expr
fun eval(e :Expr):Int{
if(e is Num) {
val n = e as Num
return n.value
}
if(e is Sum) {
return eval(e.right)+eval(e.left)
}
throw IllegalArgumentException("Unknown expression")
}
**相当于对抽象的概念的进一步拓展。
未完待续。。。
Kotlin学习 PART 1:kotlin定义和目的相关推荐
- Kotlin学习笔记-----函数的定义
函数定义 kotlin的函数其实就是java中的方法, 名字不一样, 定义方式和java中也类似, 函数名(方法名), 参数, 返回值 区别在于, kotlin的函数定义需要加上fun, 这里和jav ...
- Kotlin学习九:Kotlin中的“==”和“===”
说明 在java中我们经常遇到的面试问题两个String的''和'equals'比较的结果,这就是考验大家对String关于''和'equals'的理解.在kotlin中出现了一种=的比较两个对象的运 ...
- Kotlin学习之ListView
Kotlin学习之ListView Kotlin学习之ListView 前言 一.创建xml 二.创建ListView的adapter 三.在mainactivity中设置listview的adapt ...
- 学习Kotlin(一)为什么使用Kotlin
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- Kotlin学习笔记20 阶段复习2
参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...
- Android Kotlin学习笔记(一)—— Kotlin Koans
文章目录 题记 1.资料阅读 2.辅助插件 3.习题演练 3.1 Introduction 1.Hello world 2.Java to Kotlin conversion 3.Named argu ...
- 为什么推荐 Java 开发人员都学习并使用 Kotlin?
我使用 Java 已经有很长的时间了,工作中的使用有15年.如果算上在学校的时间的话,那就更长了.Java 的一个很大的优势是平台的开放性.这得益于 Java 字节代码和虚拟机的存在.由于 Java ...
- android studio val,Kotlin学习笔记之const val与val
const的使用 const 必须修饰val const 只允许在top-level级别和object中声明,使用方式如下: const val THOUSAND = 1000 object myOb ...
- Kotlin 学习笔记(八)—— Kotlin类与对象之接口
Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...
- Kotlin学习笔记(3)- 语法
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...
最新文章
- VC6生成随机浮点数、C++11的random头文件以及Dev C++支持C++11
- 如何在python中构造想要的时间戳参数
- vs2010 常见问题处理
- 杂谈——杭州考驾照历程
- twisted系列教程十二–为server 增加一个service
- 07:有趣的跳跃【一维数组】
- 全军出击机器人进房间_科沃斯扫地机器人T8 POWER/MAX开箱测评推荐
- asp.net gridview 模板列 弹出窗口编辑_Mac桌面多窗口整理工具Moom,使用教程
- Java设计模式-装饰者设计模式
- VC-应用程序正常初始化失败-0xc0150002
- zheng win 环境搭建
- 2021-08-05 得帆技术培训Linux作业
- 【关于四足机器人那些事】足端轨迹规划-八次多项式轨迹
- 大数据实际案例系列一
- 【剑桥摄影协会】色彩管理之色彩空间
- hdf5 python_HDF5 文件及Python模块之h5py
- 做设计师要用到的工具软件
- 李嘉诚的区块链应用投资哲学
- android系统广播汇总
- 从“平板之父”到连续创业者, Jerry Kaplan传奇来袭
热门文章
- js 生成二维码_QRcode.js 生成二维码
- linux squid日志滚动,linux squid 日志
- 理解Git的设计思想,详解git文件夹,以及详解add、commit、push,fetch、pull、merge指令
- Redis可以登录,但有些值不能获取或者设置,PING命令也用不了
- java ee s2sh复习题_JavaEESSH框架答案试题题目及答案,期末考试题库,章节测验答案...
- 简单android音乐播放器课程设计,android音乐播放器课程设计报告.doc
- html显示本地磁盘 图片,手把手教你为本地磁盘增添背景图片(图解)
- python2.0教程_django2.0入门教程第一节
- 口碑好的mysql数据监控平台_构建狂拽炫酷屌的 MySQL 监控平台
- docker日志存放路径