精华内容
下载资源
问答
  • Kotin语法

    2020-09-27 13:41:52
    Kotin语法 数据类型: Boolean Number:包括整形和浮点型 分类 类型 位数 浮点型:Double 64 Float 32 整型: Long 64 Int 32 Short 16 字节 Byte 8 Char类型(Character) 字符串: 比较: a == b 表示比较内容,即...

    Kotin语法

    数据类型:

    1. Boolean
    2. Number:包括整形和浮点型
      分类 类型 位数
      浮点型:Double 64
      Float 32
      整型: Long 64
      Int 32
      Short 16
      字节 Byte 8
    3. Char类型(Character)
    4. 字符串:
      比较:
      a == b 表示比较内容,即类似Java的equals
      a === b 表示对象是否相同
      字符串模板:
      “hello,$name” ==> “hello 小明”
    示例代码:
    val anotherBoolean: Boolean = false
    val maxInt:Int = Int.MAX_VALUE
    val aLong:Long = 12332323231232
    val anotherInt:Int = 0xFF
    val aInt = 0b00000011
    val aFloat:Float = 123F
    val aDouble:Double = 3.0
    val another:Double = 3.141592653
    val ashort:Short = 123
    val abyte:Byte = 127
    val aChar:Char = '\u000f'
    val cChar:Char = '\n'
    val anInt:Int = 5
    val asLong:Long = anInt.toLong()
    val string:String = "hello world"
    val formChar:String = String(charArrayOf('d','e','e'))
    val TAG:String = "MainActivity"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
     
        show("hello world")
        Log.d(TAG,"\r\n"+cChar + "我的第一个Kotlin项目"+cChar)
        var arg1:Int = 1
        var arg2:Int = 2
        Log.d(TAG,"" + arg1 + " + " + arg2 + " = " + (arg1 + arg2))
        Log.d(TAG,"$arg1 + $arg2 = ${arg1 + arg2}")//$字符串模板
        val rawString:String = """//原始字符串
                2
                hello
            """
        Log.d(TAG,rawString)
        Log.d(TAG,"长度:" + rawString.length)
     
    

    类和对象

    
     class  妹子 :{
        override var 性格: String
        override var 长相: String
        override var 声音: String
     
        constructor(性格: String, 长相: String, 声音: String) : super(性格, 长相, 声音) {
            this.性格 = 性格
            this.长相 = 长相
            this.声音 = 声音
    //        Log.d("妹子", "她性格:$性格,长相:$长相, 声音:$声音")
        }
    }
     
    class 帅哥 constructor (var 性格:String,var 长相:String,var 声音:String){
        init {
            Log.d("帅哥","他性格:$性格,长相:$长相, 声音:$声音")
        }
    }
     
    open class(open var 性格:String,open var 长相:String,open var 声音:String){
        init {
            Log.d("妹子", "new 了一个 ${this.javaClass.simpleName}:$性格,长相:$长相, 声音:$声音")
        }
    }
    
    1. val 我喜欢的妹子:人 = 妹子(“温柔”,“甜美”,“动人”)

    2. val 我膜拜的帅哥: 帅哥 = 帅哥(“彪悍”,“帅气”,“浑厚”)

    3. 空类型安全

    4. ?可以为空

    5. !! 不可能为空

    代码示例:
    val name = getName() ?: return;
    val value:String? = "hello world"
     
    Log.d(TAG,"name = " + getName()?.length)
    Log.d(TAG, value!!.length.toString())
    4.类型转换和智能类型转换
    val mParent:Parent = Child()
    if (mParent is Child){
        Log.d(TAG,parent.packageName)
    }
    

    安全类型转换:

    val sub: SubClass? = parent as? SubClass
    

    如果转换失败返回null,不抛异常

    5.数组Array

    val TAG:String = "Arrayexample";
    val arrayOfInt:IntArray = intArrayOf(1,3,5,7)
    val arrayOfChar:CharArray = charArrayOf('f','d','e','a','b')
    val arrayOfString:Array<String> = arrayOf("我是码农")
    val arrayOf书记:Array<市委书记> = arrayOf(市委书记("张"),市委书记("李"))
    fun main(args: Array<String>) {
        Log.d(TAG, "" +arrayOfInt.size + "")
        for (i in arrayOfChar){
            Log.d(TAG, "" +i + "")
        }
        Log.d(TAG, arrayOfChar.joinToString(""))
        arrayOfInt.slice(1..2)//切片,取范围内的值
    

    6.常量和变量
    val = value ,值类型 类似Java的final,不可以重复赋值

    运行时常量: val x = getX() 编译器编译的时候并不能确切的知道它的值

    编译期常量:const val x = 2;

    var = variable
    
    var x = "Hello Wolrd"//定义变量
    
    x = "Hi Macal"//再次复制
    

    类型推导:

    val string = "hello world" /推导出String类型
    
    val value = 5 //Int常量
    
    val x = getString() + 5 //String类型
    
    val FINAL_HELLO_WORLD:String = "hello world"
    val FINAL_HELLO_CHANL = "HELLOCHINAL"//类型推导 
    
    

    7函数
    注意事项:
    功能单一
    函数名要做到顾名思义
    参数不能太多

    fun show(): Unit {//Unit相当于void,可以省略不写
       val arg1 = 1
       val arg2 = 2
       Log.d("Hello","$arg1 + $arg2 = ${sum(arg1,arg2)}")
       int2Long(3)
    }
    
    fun sum(arg1: Int, arg2: Int): Int {
       return arg1 + arg2;
    }
    
    fun sum1(arg1: Int,arg2: Int) = arg1 + arg2 //等价于sun
    
    val int2Long = fun(x:Int):Long{//匿名函数:函数也可以没有名字
       return x.toLong()
    }
    

    8.Lambda表达式(匿名函数)
    传入整型参数,返回整型值

    写法:{[参数列表] -> [函数体,最后一行是返回值]}

    var sum = {arg1:Int,arg2:Int ->
    
    println("$arg1 + $arg2 = ${arg1 + arg2}")
    
    arg1 + arg2
    
    }
    
    val printlnHello={
    println("hello")
    
    }
    
     
    

    应用:

    sum(2,3) 等价于 sum.invoke(2,3)
    

    数组遍历:

    args:数组

    args.forEach({println(it)})
    
    终极版:
    
    args.forEach(::println)
    
    终止循环(添加标签@,终止的是迭代,而不是这个函数):
    
    args.forEach ForEach@{
         if(it == "q" return@ForEach
    
        println(it)
    
    }
    

    Lambda表达是的简化:

    。函数参数调用是最后一个Lambda可以移出去

    。函数参数只有一个Lambda,调用是小括号可以省略

    。Lambda只有一个参数可默认为it

    。入参,返回值与形参一致的函数可以用函数应用的方式作为实参实参传入

    9.类成员和和变量

    class X
    
    class A{
    var b = 0//可以加访问修饰符,默认public
    
    lateinit var c:String  //延时初始化
    
    lateinit var d:X
    
    val e:X by lazy{//val只能通过lazy初始化 
    
      X()
    
    }
    
    get(){
    return field
    
    }
    
    set(value){
    field = value
    
    }
    
    }
    

    10.运算符(待学)
    11.表达式(中缀表达式,分支表达式,when表达式 )
    中缀表达式:只有一个参数,并且用infix修饰的函数

    class Book {
        infix fun on(place:String){
            
        }
        
        fun main(){
            Book() on "My Desk"
        }
    }
    
     分支表达式:
    
      if语句
    
    private const val DEBUG = 1
    private const val USER = 0;
    val mode = if(args[0] == "1"){//if语句有返回值,就是最后一句
        DEBUG
    }else{
        USER
    }
    

    when表达式:(kotlin没有switch)

    val x = 5
    when(x){
        is Int -> Log.i(TAG,"hello $x")
        in 1..100 -> Log.i(TAG,"$x is in 1-100")
        !in 1..100 -> Log.i(TAG,"$x is not in 1-100")
        args[0].toInt() -> Log.i(TAG,"x == arg[0]")
    }
     
    val mode = when {//when也有返回结果,类似加强版的switch,支持任意类型
        args.isNotEmpty && args[0] == "1" -> 1
            else ->0
    }
    

    12循环语句(for循环,while循环,continue,break)
    for循环:

    fun xunhuan(args: Array<String>){
        for (arg in args){
            System.out.print(arg)
        }
     
        for (index,values) in args.widthIndex(){
            System.out.print("$index -> $values")
        }
     
        for (indexedValue in args.widthIndex()){
            System.out.print("${indexedValue.index} -> ${indexedValue.value}")
        }
        
        val list = MyIntList()
        list.add(1)
        list.add(2)
        list.add(3)
        for (i in list){
           System.out.print(i) 
        }
    }
    class MyIterator(val interator: Iterator<Int>){//自定义迭代器
        operator fun next():Int{
            return interator.next()
        }
        
        operator fun hasNext():Boolean{
            return interator.hasNext();
        }
    }
     
    class MyIntList{
        private val list = ArrayList<Int>();
        fun add(int: Int){
            list.add(int)
        }
        fun remove(int: Int){
            list.remove(int)
        }
        operator fun iterator():MyIterator{
            return MyIterator(list.iterator())
        }
        
    }
    

    while循环:

    var x = 5
    while (x > 0){
        System.out.println(x)
        x--
    }
     
    do {
        System.out.println(x)
    }while (x > 0)
    continuebreak和Java类似(跳过和跳出循环)
    
    多层循环嵌套的终止结合标签使用
    
    Outer@for(...){
    Inner@while(i<0){
    if(..)break@Outer
    
    }
    
    }
    

    13:具名参数,变长参数,默认参数
    //具名参数

    fun sum(arg1:Int,arg2:Int):Int = arg1 + arg2
     
    fun test(){
        sum(arg2 = 2,arg1 = 1)
    }
    
    

    变长参数:

    val array = intArrayOf(1,2,3,4)
    hello(*array,string = "hello")//*只支持数组,其他类型不支持
    fun hello(vararg ints:Int,string: String){
        ints.forEach(::println)
        System.out.println(string)
    }
    
    展开全文
  • 开始学习Kotin了,Kotin的领域专用语言让我感觉很是喜欢。很久以前就对a equal b这样的表达感兴趣,这样的写法和自然语言很是相似。自然语言是我们一直在使用的,和自然语言越相似,理解的隔阂就越小。 Kotin的理念...

    序言

    开始学习Kotin了,Kotin的领域专用语言让我感觉很是喜欢。很久以前就对a equal b这样的表达感兴趣,这样的写法和自然语言很是相似。自然语言是我们一直在使用的,和自然语言越相似,理解的隔阂就越小。

    Kotin的理念之一就是,你不需要做的事情,它不会强制你去做。这个就会使Kotin的很多写法比Java更加的简单。而且Kotin为了简化程序员的工作量,提高大家的生产力,它吸收了很多别的语言的优点。

    这里我们就介绍一下Kotin的infix fun(中缀函数)。

    Infix 函数

    我想要实现a equal b这样的自然语言比较,在kotin里面是允许这样的,Infix就是解决方案。

    fun main(args: Array<String>){
        1 eq  2
    }
    
    private infix fun Int.eq(d: Int) {
        println(Objects.equals(this, d))
    }

    Kotin的函数使用关键字fun修饰,上面的代码里面,我在main函数里面调用了eq函数,对于这个例子来说

    1 eq 2 就相当于  1.eq(2)

    但是1 eq 2更加接近于自然语言的方式。而这种实现就依赖于infix, 这里定义了一个函数eq,这个函数是Int的扩展函数,是的,这种语法类似于javascript,直接在一个类里面增加函数。这个函数的参数也是Int,参数类型的声明是使用冒号隔开了变量名和类型。这是Kotin里面定义参数的方式。

    这里面还有一个关键字this,这个this就是当前的对象,在这个实例中就是第一个Int。

    Kotin的这种函数定义和调用方式,可以使我们把代码写的更加的接近自然语言,这样就可以使别人更加容易读懂我们的代码,减少沟通的成本,从而提高我们的效率,当更加接近自然语言时,非编程人员也可以读懂我们的代码,这样更利于整个全队的沟通和合作。

    总结

    Kotin是一种面向对象和函数式的混合语言,它致力于简化程序员的工作,提高程序员的生产力,Infix函数给我了很大的惊喜,我相信随着我的学习和使用,Kotin会带给我更多的惊喜。

    展开全文
  • 引入Kotin项目 运行Test 总结 参考资料 序言 现在的JVM语言还是比较多的,函数式的Scala,脚本语言groovy,以及这次我们介绍的可以支持后台开发和Android开发的Kotin(科特林)。当我看到这种语言可以用于...

    序言

    现在的JVM语言还是比较多的,函数式的Scala,脚本语言groovy,以及这次我们介绍的可以支持后台开发和Android开发的Kotin(科特林)。当我看到这种语言可以用于Android,并且是在JVM上面运行的时候,我脑海中闪现的是,这种语言是不是为代替Java设计的呢?Java这种语言应用的范围很广,但却受到时代以及Sun这个背景的影响,现在Kotin运行在JVM上面,它可以和Java无缝衔接,减少了迁移的成本,甚至可以保留以前的Java项目不变,只用Kotin实现新的功能。

    今天是学习Kotin的第一天,只是将Kotin项目引入了Intellij,然后运行了项目的Test,这里是对这次实践的记录。

    引入Kotin项目

    我做过的很多Java项目,他们都是使用Maven管理的,虽然Kotin的项目也可以使用Maven来构建,但是这次想尝试一下Gradle,所以我这里就引入了Gradle的项目(Kotin心印)。
    温馨提示:虽然Kotin是运行在JVM上面,但是它是需要自己的编译工具的,在Intellij里面可以通过安装Kotin插件来实现。
    1. 选择New Project from existing sources
    2. 选择Kotin项目所在的路径
    3. 选择Import Project From external model
    这里写图片描述
    4. 选择
    这里写图片描述
    这个是根据maven项目的习惯,我们希望项目的依赖关系改变时,这些改变能被自动的加载进来,虽然是一个很小的功能,但是很多情况下可以节省我们的时间,让我们把精力放在真正的代码逻辑上面,而不是放在维护项目结构上面。
    5. 接下来选择default就可以了。

    运行Test

    我的习惯不是去实现一个main函数之类的,我习惯于实现一个test开始,通常使用的是JUnit。
    比较幸运的是,这次引入的项目是含有test的。

    import org.junit.Assert.assertEquals
    import org.junit.Test
    
    class N00StartKtTest {
        @Test fun testOk() {
            assertEquals("OK", task0())
        }
    
        private fun task0(): String {
            return "OK"
        }
    }

    是不是有点失望,没有使用”Hello World”。但是这个简单的test一个可以开启Kotin的大门。类的声明和Java一样,方法的声明区别较大,需要关键字 fun,倒是和javascript的方法声明类似,函数的返回值在方法的最后,很有函数式编程的特点,这点是和scala类似的。而且这种语言已经摒弃了“;”,实际上,我是比较喜欢分号的,换行的时候更加的清晰。

    总结

    今天是学习Kotin的开始,以前的知识,不管是Maven构建,Java,Scala编程语言,都对学习Kotin有帮助的,对照着学,可以更深的理解Kotin为什么这样设置自己的语法,自己的语言特性等等。随着学习的进一步加深,我相信会遇到更多的惊喜。

    参考资料

    [1] https://github.com/Kotlin/kotlin-koans

    展开全文
  • React Native React Native 是目前流行的跨平台移动应用开发框架之一 React Native 开发中,大多数的组件都是IOS和Android通用的,包括大量的功能性代码,至少...Kotin Kotin是编写安卓原生的编程语言,不属于框架 ...

    React Native

    React Native 是目前流行的跨平台移动应用开发框架之一
    React Native 开发中,大多数的组件都是IOS和Android通用的,包括大量的功能性代码,至少有80%以上的代码可以复用,开发一套代码支持IOS和安卓双版本

    Kotin

    Kotin是编写安卓原生的编程语言,不属于框架

    展开全文
  • Kotin 编程思想·实战》 《Kotlin极简教程》正式上架: 点击这里 &gt; 去京东商城购买阅读 点击这里 &gt; 去天猫商城购买阅读 1 JVM语言家族概览 1.1 编程语言简史 1.2 程序执行的三种方式 1.2.1 ...
  • Kotin 编程思想·实战》目录 《Kotlin极简教程》正式上架: 点击这里 &gt; 去京东商城购买阅读 点击这里 &gt; 去天猫商城购买阅读 第1章 JVM语言家族概览 1.1 编程语言简史 1.2 程序执行的三种...
  • android kotin+ ftp视频上传+android7.0 语音识别+百度地图+ 图片和拍照
  • Kotin + Anko Android开发(一) 环境配置
  • kotin循环总结

    2020-09-29 11:17:12
    Kotlin 循环控制 For循环: for循环是最常见和古老的循环了,相信有一点编程基础的都知道for循环是学习大部分语言最先接触到的循环体,下面我们一起来解开它的面纱! 下面我用了一个数组和一个集合,我们使用不同的方式去...
  • 将属性访问器的实现委托给另一个对象四、as关键字和is关键字的使用五、回调函数的Kotin的lambda的简化 kotlin中属性在声明的同时也要求初始化,否则会报错,如下图示例 private var name0: String //报错 private v....
  • 允许在Kotin中为两者编写UI。 由于许多撰写功能尚不可用,因此仍处于试验阶段。 目录 要求 Android Studio金丝雀 cocoapods(宝石安装cocoapods) cocoapods-generate(宝石安装cocoapods-generate) 安装 该库...
  • Kotin笔记 十一 注解

    2019-06-10 15:12:40
    注解 定义注解 kotlin中定义注解使用关键字:annotation class kotlin中不允许为注解定义注解体,即注解后没有“{}” 如: annotation class KotlinTag ...注解中可以带属性,但由于注解没有注解体,属性只能在注...
  • Kotin 极简教程》即将上架,敬请期待...... Will be on the shelves, please look forward to ... ... 1167149179.jpg 1260508765.jpg kotlin logo.png qrcode_for_gh_c0009ee652db_430 (1).jpg
  • Kotin 极简教程》即将上架,敬请期待...... Will be on the shelves, please look forward to ... ... 1167149179.jpg 1260508765.jpg kotlin logo.png qrcode_for_gh_c0009ee652db...
  • kotin的基本数据类型

    2020-03-06 14:50:05
    Boolean val boolean:Boolean=false val anthenboolean:Boolean=true //kotlin中的Boolean相当于java中的boolean 很少用到封装类Boolean 在 //在kotlin中不需要我们去分辨 Int val int:Int=8 //max number ...
  • Kotin 的代理和委托

    2019-07-16 19:39:52
    代理和委托——大头儿子和小头爸爸的洗碗案例 委托,把自己不干的事情交给别人做 代理,做别人委托的事情 kotlin中接口代理关键字:by 1、场景说明(举例) 围裙妈妈只负责做饭,不负责洗碗 小头爸爸洗一次碗可以赚...
  • 为什么要使用lateinit kotlin要去所有的属性必须初使化(即便你把它设置为null 也是初使化 有赋值动作)而我们如果不想 在属性声明的时候就初使化 可以使用lateinit 关键字如 lateinit var userName:String //kotlin...
  • Kotin getters/setters 写法

    2019-05-10 15:59:01
    kotlin中无需像Java那样写get/set方法,少写了很多代码,但是有的时候我们需要对参数进行判断,比方说后台返回的数据为null,这个时候我们就要对null进行判断,不然程序容易出现问题。 getters的写法:(如果为...
  • 第16章 使用 Kotlin Native 不得不说 JetBrains 是一家务实的公司,各种IDE让人赞不绝口,用起来也是相当溜。同样的,诞生自 JetBrains 的 Kotlin 也是一门务实的编程语言,Kotlin以工程实用性为导向,充分借鉴了...
  • 第14章 使用 Kotlin DSL 我们在前面的章节中,已经看到了 Kotlin DSL 的强大功能。例如Gradle 的配置文件 build.gradle (Groovy),以及前面我们涉及到的Gradle Script Kotlin(Kotlin)、Anko(Kotlin)等,都是 ...
  • Kotin与java的纠缠史

    2019-09-28 17:55:42
    Kotlin与java的纠缠史 - 格式化版 1. 背景 Jetbrains早在2010年推出Kotlin,在今年(2017)5月18,谷歌在今日举行的I/O开发者大会上宣布,将Kotlin语言作为安卓开发的一级编程语言,这个可爱的语言可于Java进行无缝混编...
  • 深入浅出,kotin Any类

    千次阅读 2020-05-05 19:10:51
    一、Any vs Object,两个类的成员变量的差异。 public open class Any { public open operator fun equals(other: Any?): Boolean public open fun hashCode(): Int public open fun toString(): String ...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 308
精华内容 123
关键字:

kotin