Kotlin for Android使用教程(一)

前言

本文主要讲解如何在Android中使用kotlin语言,如果想了解更多关于kotlin的知识, 请查阅官方中文文档

  • 声明变量
    方法
    继承
    实体类
    静态块companion object
    智能字符串
    范围判断
    再见!findViewById()
    优雅解决NPE
    say bye! if else
    its awesome! when
    思考
    下一章

声明变量

1.var a = 5 or val a: Int = 5
2.val TAG = "com.myapplication.example"

  • var: 任意类型
    val: 常量
    结尾无分号

方法

override fun onCreate(savedInstanceState: Bundle?) {}

  • override: 父类方法
    fun: 方法声明
    ?表示可能为空
    无返回值
//有返回值
fun sum(a: Int,b: Int): Int{
    retrun a + b
}
//等同于
fun sum(a: Int,b: Int) = a + b 
//一脸懵逼了?
//这个呢?
fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}
//等同于
fun maxOf(a: Int, b: Int) = if (a > b) a else b
//慢慢消化吧~

继承

  • 参数继承

view instanceof Button to view is Button

  • class继承

class MainActivity : AppCompatActivity(){}

实体类

  • example A:
//class有构造参数时
class Person(a: Int,b:String){
    var id = 0
    var name = ""
}
var p = Person(2,"helloWorld")
  • example B:
//class无构造参数时
class Person{
    var id = 0
    var name = ""
}
var p = Person()
p.id = 2
p.name = "helloWorld"
  • 注意:全局变量一定得初始化,而局部变量可以不初始化,这是和java不同的地方

静态块companion object

class A() {
companion object {
      val TAG_SIZE = 100
  }
}
//使用:
var i = A.TAG_SIZE

智能字符串

  • java:

xxx.println("---size:"+list.size());

  • kotlin:

print("---size: ${list.size},first: ${list[0]}")

//同理可得
var i: Int = 1
var s: String = "helloWorld:$i"
//值为helloWorld:1

范围判断

  • java:

1.if(a >= 3 && a<= b){...}

2.if(!(c >='a' && c<= 'z')) {
    int i = 'a';
}
  • kotlin:

1.if(a in 3..b){...}

2.if(c !in 'a'..'z'){
    var i: Int = 'a'.toInt()    
}
  • 注意是两个.来表示范围

再见!findViewById()

1.在project -> build.gradle添加
classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.1.0"
2.在app->build.gradle添加
apply plugin: 'kotlin-android-extensions'
compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0"

//导入activity_main布局文件中的所有控件
import kotlinx.android.synthetic.main.activity_main.*
//activity_main布局文件中有一个TextView控件,id为text01
//使用
text01.text = "helloWorld"

优雅解决NPE

var a: String = "abc"
a = null//报错,提醒a不能为null
var i = a.length//就算通过了,这里也会报错,因为a为null
//变换之后
var a: String? = "abc"
a = null//通过,因为我说了a是可以为null的
var i = a?.length
//在这里如果a为null就返回null如果a不为null就正确返回
//这样a是null也不会报空指针异常了,一个?修饰符优雅解决!
//更多使用
//如果想知道bob所在部门的老大的名字但又不知道哪个为null的时候
var name: String= bob?.department?.header?.name

say bye! if else

首先是非空判断

  • java
//三元运算符
int i = a != null ? a.length : 0;
//if else
if(a != null)
    i = a.length;
else
    i = 0;
  • kotlin
//方式1
var i: Int = if(a != null) a.length else 0 
//竟然还有if else真不爽啊
//那么方式2来了
var i: Int = a?.length ?: 0;
//一脸懵逼?!
//别慌,这里的意思是如果?:左边的表达式不为null,则返回,也就是a.length,如果为null就返回?:右边的表达式,也就是0

这是普通的if else判断

  • java
if(a > b)
    i = a;
else
    i = b;
  • kotlin
var i: Int = if(a > b) a else b

its awesome! when

现在采用全新而炫酷的表达方式:when

when (a) {
        1 -> print("its 1")
        3,4 -> print("its 3 or 4")
        sum(a,1) -> print("its a + 1")
        in 1..10 -> print("its >=1 and <= 10")
         else -> print("error!nothing!")
    }
//是不是有Rxjava的味道呢?23333
//接下来是替换if的情况,这个很好理解
var word: String = when{
    bob.isSay() -> "bob say!"
    jojo.isSay() -> "jojo say!"
    else -> "not say anything!"
}
//最后是变(diao)态(zha)的(tian)使用
fun getName(p: Person,str: String): String = when(p.id){
    1 -> p.name
    else -> str
}
  • 支持单值判断
    支持多个值判断
    支持方法返回值判断
    支持范围判断
    支持末尾else
    支持直接赋值给变量或方法
    支持替换if-else的if

思考

val bob = Person(26,"Bob")
    print("$bob.id")
    print("${bob.id}")
//输出的结果是?

下一章

  • Kotlin for Android使用教程(二)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,277评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,777评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,946评论 0 245
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,271评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,636评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,767评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,989评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,733评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,457评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,674评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,155评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,518评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,160评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,114评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,898评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,822评论 2 280
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,705评论 2 273

推荐阅读更多精彩内容