kotlin基础语法(一)

来源:互联网 发布:万网域名怎么解析 编辑:程序博客网 时间:2024/05/24 01:04

最近在学习相关kotlin的有关知识,在爱奇艺上找到一个关于kotlin基础知识的是视频,看完之后感觉受益匪浅,这个只是基础知识视频,新手看还可以,大神就算了,下面是这个视频的网址:http://www.iqiyi.com/v_19rr82t3g4.html
主要都是以代码的形式:

fun main(args : Array<String>){    println("This is my first kotlin project")    println("3+5="+ test3(3,5));    test4(10,20,30,50);    println("匿名函数测试:"+ test5(3,5))    test7()    test9(80);    test11()    test12("水")    test12(null);    test13(10);    test13(9);    test13(8);    test13(7);    test13(1);    test14();    test15()    test16()    circumfeRenceOfCircle(radius = 10.0F)    circumfeRenceOfCircle1(diameter = 20.0F)    println("5的阶乘是:"+ recursiveTest(5));    var num : BigInteger= BigInteger.valueOf(100L)    println("100的阶乘是:"+ recurseveTest2(num));    println("100的累加是:"+ ollAdd(100,0));}/** 自定义函数的格式:* fun:函数定义关键字*sunNormal函数名* a,b为参数名* Int为参数类型* 最后的Int为函数的返回值* *///一个普通的函数fun sumNormal(a : Int, b : Int) : Int{    return a+b;}//表达式作为函数体,返回类型自动推断//这个函数和上面的函数执行的效果是一样的fun sumNormal1(a : Int, b :Int) = a+b//无返回值类型的函数,类似于java中的void//使用Unit关键字表示没有返回值,同时,没有返回值也可以什么都不写fun sayHello(userName : String) : Unit{    println("你好,"+userName)}//这个函数和上面的函数效果是一样的fun sayHello1(userName: String){    println("你好,"+userName)}/** 当一个函数使用public修饰符时,除非是无返回值的函数,否则必须明确注明函数的返回值* *///没有返回值的函数使用public修饰也可以不写返回值类型public fun test1(){    println("使用public修饰函数没有返回值可以不写返回值类型");}public fun test2(a : Int, b : Int) : Int{    println("使用public修饰有返回值的函数必须明确注明返回值类型,不可以使用自动推断的返回值类型");    return a+b;}//上面的总结是在菜鸟教程看到的,但是在使用的时候发现也可以使用下面的方法,并没有报错,可能是因为版本更新已经可以这样写了public fun test3(a : Int, b : Int) = a+b;//使用vararg修饰可变长度的参数列表fun test4(vararg args : Int){    println("获取到当前函数的参数列表的长度为:"+args.size);    var num : Int = 0;    for (i : Int in args){        num += i;    }    println("当前参数和为:"+num)}//匿名函数lambdafun test5(a : Int, b : Int) : Int{    val sum : (Int,Int) -> Int = {x,y -> x+y}    return sum(a,b);}//定义常量与变量:var定义变量//var 变量名 : 变量类型 = 初始化值//val 常量名 : 常量类型 = 初始化值//编译器支持自动判断类型,声明是可以不指定类型,由编译器判断fun test6(){    var a : Int = 0;//普通变量定义,整型a的初始值为0    val b = 10;//由编译器判断变量或常量的类型    var c : Int;//如果在声明的时候不指定初始化值,则必须明确指定变量的类型}//字符串模板/** $表示一个变量名或者变量值* $varName表示变量值* ${varName.fun}表示变量的方法返回值* */fun test7() : Unit{    var a : Int= 1;    var str : String = "My name is zyf";    val s2 = "${str.replace("zyf","gwj")},but old name is zyf,共有${str.length}个字符串";    println(s2);}//NULL检查/** 在使用看的引用的时候需要做非空检查,一种是使用!!抛出空指针异常,另一种是字段后加?可不做处理返回为null或配合?:做空判断处理* */fun test8() : Unit{    //类型后面加?表示可为空    var age : String?  = "23"    //抛出空指针异常,确保不会出现空值    val ages = age !!.toInt()    //不做处理返回null    val ages1 = age?.toInt()    //age为空返回-1    val ages2 = age ?.toInt() ?: -1;}/** 条件控制** */fun test9(face : Int) : Unit{    if(face > 80){        println("这是一个帅哥")    }else{        println("赶紧去整容吧")    }}//返回两个数中的较大的那个fun test10(a : Int, b : Int) : Unit{    var num : Int = 0;    if(a > b){        println("($a)和($b)中较大的那个数是:"+a);    }else if(a < b){        println("($a)和($b)中较大的那个数是:"+b);    }else{        println("($a)和($b)两个数相等");    }}/** 字符串比较* kotlin中对于字符串的比较中 : == 和java中的equals方法相同* */fun  test11() : Unit{    var name1 : String = "张三";    var name2 : String = "张三";    if(name1 == name2){        println("$name1 和 $name2 是同一个人" );    }else{        println("$name1 和 $name2 不是同一个人")    }    var name3 : String = "Andy";    var name4 : String = "andy";    println(name3.equals(name4,true));//第二个参数代表的意思是是否忽略大小写,默认是false    println(name3.equals(name4,false));}/** kotlin中的空值处理* null也是值,代表没有数据* test12这个方法接受一个不为空的字符串,如果在参数的后面加上一个“?”,则表示传递过来的参数可以为空,这个方法很好的在编写代码的阶段就避免了NullPointException* */fun  test12(str : String?) : Unit{    println("热"+str);}/** kotlin的when表达式* */fun test13(grade : Int) : Unit{    when(grade){        10 -> println("考了满分");        9 -> println("还不错");        8 -> println("挺好");        else -> println("还需努力")    }}/** kotlin的loop和range** loop:循环* range:区间* */public fun test14() : Unit{    var nums = 1..100;//声明一个数组,这个数组中的值是1到100[1,100]    var result : Int = 0;   for (num : Int in nums){       result += num;   }    println("${nums.first}到${nums.last}的和是:"+result);    println("${nums.start}");    //until表示从1到100但是不包含100    var nums1 = 1 until 100;    for(num : Int in nums1){        //println(num)    }    //step表示跳过几步    var nums2 = 1..20;    for (a : Int in nums2 step 3){        println (a)    }    //reversed对集合进行倒序排列    var nums3 = nums2.reversed();    for( a : Int in nums3){        println(a);    }    //count    println("${nums3.first}到${nums3.last}的总数为:"+nums3.count());}/** kotlin的list* */fun  test15() : Unit{    var lists = listOf("买鸡蛋","买大米","买水果",20);    for((i,e) in lists.withIndex() ){        println("$i --> $e")    }}/** map* */fun test16() : Unit{    var map = HashMap<String,String>();    map["学习"] = "学习";    map["使我"] = "使我";    map["快乐"] = "快乐";    for(str : String in map.keys){        println(map.get(str));    }}/** kotlin默认参数和具名参数*以下方法计算一个圆的周长* 圆的周长的计算公式 = PI *直径或者PI*2*半径* 普通情况下我们调用方法的时候需要床底两个参数,pi,半径或者直径,但是因为pi是一个常数,我们可以直接定义一个常量,那么在调用方法的时候就只需要传递一个参数就可以了,* 但是方法接收的是两个参数,此时就可以使用具名参数,在传递参数的时候将参数名携带上,就可以了* */val PI = 3.1415926F;fun circumfeRenceOfCircle(pi : Float = PI, radius : Float) : Unit{    println("半径为$radius 的圆的周长为:"+(2 * PI * radius));}fun circumfeRenceOfCircle1(pi : Float = PI,diameter : Float) : Unit{    println("直径为$diameter 的圆的周长为:"+(PI * diameter));}/** kotlin中字符串和数字之间的转换* */fun test17() : Unit{    var a = "13";    var b = 13;    //数字转换为字符串    a = b.toString();    //字符串转数字    b = a.toInt()    //如果字符串中含有不是数字的字符,那么在转换的时候会报NumberFormatException}

引用块内容


快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

Markdown及扩展

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考Github.

表格

Markdown Extra 表格语法:

项目 价格 Computer $1600 Phone $12 Pipe $1

可以使用冒号来定义对齐方式:

项目 价格 数量 Computer 1600 元 5 Phone 12 元 12 Pipe 1 元 234

定义列表

Markdown Extra 定义列表语法:
项目1
项目2
定义 A
定义 B
项目3
定义 C

定义 D

定义D内容

代码块

代码块语法遵循标准markdown代码,例如:

@requires_authorizationdef somefunc(param1='', param2=0):    '''A docstring'''    if param1 > param2: # interesting        print 'Greater'    return (param2 - param1 + 1) or Noneclass SomeClass:    pass>>> message = '''interpreter... prompt'''

脚注

生成一个脚注1.

目录

[TOC]来生成目录:

    • 快捷键
    • Markdown及扩展
      • 表格
      • 定义列表
      • 代码块
      • 脚注
      • 目录
      • 数学公式
      • UML 图
    • 离线写博客
    • 浏览器兼容

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为:Γ(n)=(n1)!nN
  • 块级公式:

x=b±b24ac2a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.0张三张三李四李四嘿,小四儿, 写博客了没?李四愣了一下,说:忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.0开始我的操作确认?结束yesno
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容. ↩
原创粉丝点击