Kotlin编程之路——基本语法

我们写的代码片段可以在这里运行测试 测试代码地址

Kotlinvarval的区别

在Kotlin中的 var 和 val 是属于关键字,乍看它俩很相似,因为只是差一个字母而已,可是区别却很大。
var是作为可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和Java中声明变量的方式一样。

先来看下这段用var作为可变变量的代码

fun main(args: Array<String>) {
    var name = "hongfa"  
    println(name)  
    name = "==hongfa=="  
    println(name)  
}

运行后的结果,运行正常,说明var确实是作为可变变量。

image.png
val是一个只读变量,这种声明变量的方式相当于Java中的final变量。一个val创建的时候必须初始化。
fun main(args: Array<String>) {
 val finalValue = "我是不可改变的"
 finalValue = "我就是要改变你"; 
 println(finalValue)   
}

运行后的结果,看到没有,运行的时候报错了,提示cannot be reassigned(不能重新分配),通过这么个例子,我们可以很快的就了解并记住了他们的区别。


image.png

认识了 var 和 val 变量后,接下来就开始我们的第一个函数吧,废话不多说,上来就是干,直接上代码。

函数表达式

先来看下一个函数的返回值与无返回值是什么样的写法,kotlin中定义一个函数是使用fun作为关键字去声明函数

无返回值的函数
//默认无返回的函数
fun method(){
 println("没有返回值");
}
带返回值的函数,下面来一个String类型和Int类型的函数
//String类型
fun method() :String{
    return "我是有返回值的";
}
//Int类型,这里有个区别,Java中int都是小写的,而Kotlin里面的Int首字母是大写的。
fun method() :Int{
    return 0;
}
接下来看下无参和有参的函数是怎么定义的
无参的函数
//测试函数
fun test(){
    println("无参的函数");
}
有参函数,默认是无返回值的
fun add(var a: Int,var b: Int){
     println("有参的函数");
}
带返回值的有参函数
fun add(a: Int, b: Int): Int{
 return a + b;
}

单表达式 函数


fun result() =1;

//等价于
fun result(): Int {
  return 1;
}
//如果是这样子的话,可以和when结合在一起,when的作用在文章的后半部分有说到
fun main(args: Array<String>) {
    println(result("Red"));
}
//获取返回值
 fun result(color: String): Int = when (color) {
  "Red" -> 0
  "Green" -> 1
  "Blue" -> 2
  else -> throw IllegalArgumentException("Invalid color param value")
}

in关键字的使用

可以看到kotlin的if else,条件判断语句或者是使用for循环语句其实和Java都没有什么区别

if语句判断示例
//使用 in
fun main(args: Array<String>) {
    var x: Int =1;//如果x的值为0,则输出not
    var y: Int =3;
   //如果存在于区间(1,y-1),则打印yes
    if (x in 1..y-1) {
        print("yes");
    }else {
         print("not");
    }
}
//使用 !in
fun main(args: Array<String>) {
    var x: Int =0;//如果x的值为1,则输出not
    var y: Int =3;
   //如果x不存在与区间(1,y-1),则打印yes
    if (x !in 1..y-1) {
        print("yes");
    }else {
         print("not");
    }
}

//你也可以这样子写if语句,但是它打印的内容却是这样子的“kotlin.Unit”
fun foo(param: Int) {
  val result = if (param == 1) {
    "one"
  } else if (param == 2) {
    "two"
  } else {
    "three"
  }
}
for循环语句使用示例
fun main(args: Array<String>) {
    var v: Int;
    for(x in 1..5){
        println(x);
    }
}

//遍历集合(类似于Java中的for(String name : names))
fun main(args: Array<String>) {
    val lists = listOf("a", "b", "c")
    for(list in lists){
        println(list);
    }
}

直接使用in在lists里面判断是否存在某个对象,这个就和我们Java里面的List的contains作用一样

fun main(args: Array<String>) {
    var a: String = "a";
    val lists = listOf("a", "b", "c")
    //如果lists集合中包含a对象则打印yes
    if (a in lists){
       print("yes");
    }
}

when 语句

Kotlin用when、->及else组合来替代原先的switch、case及default

fun test(value: Int){
    when(value){
         10 -> println("数字10");
         20 -> println("数字20");
         30 -> println("数字30");
        else ->{
            println("未知数");
        }
    }
}

智能类型推测 -- is and !is

判断一个对象是否为一个类的实例,我们可以使用is关键字
这个与Java中的instanceof关键字类似,但在Kotlin中如果已经确定了一个对象的类型,可以在接下来的代码块中直接作为这个确定类型使用。

fun getStringLength(obj: Any): Int? {
  if (obj is String) {
    // 做过类型判断以后,obj会被系统自动转换为String类型
    return obj.length;
  }

  //同时还可以使用!is,来取反
  if (obj !is String){
  }

  // 代码块外部的obj仍然是Any类型的引用
  return null;
}

异常处理 try/catch 表达式

kotlin的异常处理和Java的异常处理并没有什么不同

fun testTryCatch() {
  val result = try {
    test();
  } catch (e: ArithmeticException) {
    throw IllegalStateException(e);
  }
  //  对result做处理 
}

好了,本文内容到此结束,欢迎大家丢砖一起学习,一起进步,谢谢大家!

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

推荐阅读更多精彩内容