首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin入门(11)江湖绝技之特殊函数

其实在之前的文章《Kotlin入门(4)声明与操作数组》里面,就遇到了类似的情况,当时为了采取统一的格式声明基本类型的数组对象,使用“Array”来声明数组对象,并通过arrayOf函数获得数组对象的初始值...下面举个泛型函数的定义例子,目的是把输入的可变参数逐个拼接起来,并返回拼接后的字符串,示例代码如下: //Kotlin允许定义全局函数,即函数可在类外面单独定义,然后其他类也能直接调用 fun ...this[pos1] = this[pos2] this[pos2] = tmp } 不过该函数的缺点是显而易见的,它声明了扩展自Array,也就意味着只能用于整型数组,不能用于包括浮点数组...,Kotlin体系还存在一种特殊的递归函数,名叫尾递归函数,它指的是函数末尾的返回值重复调用了自身函数。...的五个特殊函数,包括泛型函数、内联函数、扩展函数、尾递归函数、高阶函数,同时穿插说明了全局函数、简化函数和匿名函数,并通过实际应用叙述了多种函数结合起来的写法。

1.2K10

【Kotlin】Kotlin 语言基础 ( 环境安装 | 变量 | 简单使用 | 函数 | 异常 | 递归 )

>){ //1.比较两个简单数字大小 var age_1 : Int = 16 var age_2 : Int = 18 var bigger : Boolean = age_1 > age...字符串比较 ( == 符号可以比较两个字符串, 不是 地址对比, == 等价于 Java 中的 equals 方法 | 以下对比等价 name1 == name2 等价于 name1.equals(name2...) | 忽略大小写对比 name1.equals(name2, true) ) 字符串比较 : 1.字符串比较方法 : == 符号可以比较两个字符串, 注意这里与 Java 不同, Kotlin 中的..., 下面是一段 in 关键字循环的代码片段 : var nums = 1 .. 100 //遍历数组, 使用 in 关键字, 取出数组中的元素 for(num in nums){ //执行内容...at Kotlin_14_Factorial_2Kt.factorial_add(Kotlin_14_Factorial_2.kt:16) ... ... ---- ( 2 ) 尾递归优化 尾递归优化

4.5K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一篇就够——Kotlin快速入门

    之前零零散散的学过Kotlin,但是不成体系。最近,每天早起,利用上班之前的四个早晨,将传智播客的《Kotlin从零基础到进阶》又刷了一遍,并做了相应的笔记——也就是这篇文章。...V13、函数声明练习题 内容省略 V14、字符串模板 “ ” ,被两个双引号包裹的内容是普通字符串,支持转义字符 “”“ ”“” ,被一对三引号包裹的内容是原样字符串,不支持转义字符,其中的内容被定义成什么样...尾递归 :是指某个函数的最后一步依旧是调用自身 kotlin中尾递归关键字 tailrec 参考:阮一峰老师关于尾递归的介绍 http://www.ruanyifeng.com/blog/2015/04...* 尾递归函数是指,在该函数的最后一步操作中依旧是调用函数本身 * 为了实现尾递归,我们定义了该方法接收两个参数:num 是我们传入的需要计算累加值得的变量,total用来接收最终的返回值 */...---- Kotlin基础到此完结,之后需要研究的内容 游戏开发和游戏引擎(lwjgj) Lambda 表达式 高阶函数 DSL (特定领域语言) 使用Kotlin进行Android开发 使用Kotlin

    1.8K20

    数据结构从入门到精通——归并排序

    归并排序是一种分治算法,首先将原始数组递归地分成两个子数组,然后对子数组进行排序,最后将排序好的子数组合并成一个有序数组。 代码中的MergeSort函数是对外接口,用于调用归并排序算法。...首先申请了一个临时数组tmp,用于存放归并过程中的临时结果。然后调用_MergeSort函数进行实际的归并排序操作。 _MergeSort函数是核心函数,用于实现归并排序的递归过程。...首先判断递归结束的条件,即如果begin和end相等,则只有一个元素,不需要排序。然后找到中间位置mid,将原数组分成两个子数组并分别递归调用_MergeSort函数进行排序。...比较两个子数组的元素大小,将较小的元素放入tmp数组中,并将对应指针向后移动。直到有一个子数组遍历完毕,将另一个子数组中的剩余元素依次放入tmp数组。...内层循环中,先计算出两个待合并的子数组的起始和结束位置,然后对这两个子数组进行合并操作。合并过程中,比较两个子数组中的元素,将较小的元素放入临时数组tmp中,并移动对应子数组的指针。

    26510

    Kotlin:04-基本数据类型详细介绍

    他们其实分别代表了两种字符串类型:转义型字符串 和 原样字符串(也可以叫原生或者原始字符串), 用 “ ” 括起来的内容称为 转义字符串, 用 “”“ ”“” 括起来的内容称为 原样字符串 (1)、原样字符串...""" println(str) } 运行结果: 瞧,我们在创建字符串时使用了换行符让内容换行,打印的时候这些格式被保留了!这就是 原样字符串。...(或常量)可以省略大括号{ } 如果字符串模板中包裹的是表达式,则不能省略大括号 上面代码的运行结果: 4、字符串比较 (1)、== 和 equals(xx) kotlin 中比较字符串有两种方式:...不做过多解释了 五、数组 Kotlin 中使用 Array 类来表示数组类型 它定义了 get() 和 set() 函数和 size 属性,以及一些其他有用的成员 函数,如: class Array数组并初始化元素 使用该方式创建的数组可以通过 set 方法修改元素,但是不能增加元素!

    1.8K30

    Kotlin | 一份10万字的随查笔记,妈妈再也不担心我不会Ctrl+F了

    Long = abInt.toLong() 字符串之间的比较 == 比较内容,即类似Java 的equals === 比较对象是否相同 字符串之间的相连 //字符串模板 $ val a:...$it" } }.forEach(::println) } fold (用于求和并加上一个初始值因为fold不同于map,fold对初始值没有严格限制,因此fold还可以进行类型变换) fun...{ return null } 尾递归优化 尾递归指的是函数调用自己之后没有任何操作,也就是一个函数中所有递归形式的调用都出现在函数的末尾。...传入部分参数得到的新函数 对于某些传值比较固定的参数,偏函数可以将其绑定,然后生成新的函数,而新的函数只需要给除已绑定的参数之外的参数传值,当然你也可以视同 默认参数+具名参数 的方式来实现参数的固定...name) } } Kotlin-内置类型 基本类型 var b: String = "asdasd" val c: Int = 15 字符串比较, ,= == 比较内容是否相等 === 比较对象是否相等

    2.8K20

    转向Kotlin——基础知识

    Kotlin基本语法 对于一种语言来说,变量和函数(方法)是最重要的两类语法。由于Kotlin语法糖的存在,让本不支持函数语法的JVM支持将函数放到代码的最顶层。...) Kotlin和Java一样,也提供了一些特殊的表示法,用于表示Double和Float类型的值,以及十六进制和二进制 表示Long类型值,在数值后面加L或l,如100L 表示Float类型的值,在数值后面加...在Kotlin中定义数组的方法有很多,使用arrayOf()函数定义可以存储任意值的数组;使用arrayOfNulls函数定义指定长度的空数组(数组元素中没有值);使用Array类的构造器指定数组长度和初始化数据的方式定义数组...;使用intArrayOf、shortArrayOf等函数定义指定类型的数组,并初始化。...中使用String表示字符串,有以下两种字符串: 普通字符串:类似于Java,在字符串中可以加转义字符以实现换行等要求; 保留原始格式字符串:不能使用转义字符串,格式直接在字符串中展示,要将内容放入三对双引号中

    1.1K10

    第9章 文件IO操作、正则表达式与多线程第9章 文件IO操作、正则表达式与多线程

    它们主要在下面的两个源文件中: kotlin/io/IOStreams.kt kotlin/io/ReadWrite.kt Koltin 的序列化直接采用的 Java 的序列化类的类型别名: internal...readLines : 获取文件每行的内容 如果我们想要获得文件每行的内容,可以简单通过 split("\n") 来获得一个每行内容的数组。...我们也可以直接调用 Kotlin 封装好的readLines函数,获得文件每行的内容。readLines函数返回一个持有每行内容的字符串 List。...我们可以方便的使用这两个方法配合正则表达式实现网络爬虫的功能。 下面我们简单写几个函数实例。...的对象表达式创建一个匿名类并覆盖run()方法。

    1.9K30

    Kotlin 1.4 新特性预览

    调用的时候既可以是 foo() 也可以是 foo(5),看上去就如同两个函数一样。...2.7 优化属性代理的编译 如果大家自己写过属性代理类的话,一定知道 get 和 set 两个函数都有一个 KProperty 的参数,这个参数其实就是被代理的属性。...2.10 尾递归函数的优化 尾递归函数估计大家用的不多,这里主要有两个优化点 尾递归函数的默认参数的初始化顺序改为从左向右: 尾递归函数不能声明为 open 的,即不能被子类覆写,因为尾递归函数的形式有明确的要求...剩下的主要就是针对编译器、使用体验的各种优化了,实际上这才是 Kotlin 1.4 最重要的工作。这些内容相对抽象,我就不做介绍了。...小结 Kotlin 目前的语法已经比较成熟了,还是那句话,提升开发体验,扩展应用场景才是它现在最应该发力的点。 未来可期。

    98710

    数组 函数_从零开始的基础篇

    )忽略键名的数组排序 usort($arr,”function”);使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个...uasort($arr,”function”);使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)保留键名的数组排序...);返回交集结果数组,键名也做比较 八、其他的数组函数 range(0,12);创建一个包含指定范围单元的数组 array_unique($arr);移除数组中重复的值,新的数组中会保留原始的键名 array_reverse...— 返回数组中所有的值 array_walk_recursive — 对数组中的每个成员递归地应用用户函数 array_walk — 对数组中的每个成员应用用户函数 array — 新建一个数组 arsort...— count() 的别名 sort — 对数组排序 uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 uksort — 使用用户自定义的比较函数对数组中的键名进行排序 usort

    93130

    Kotlin学习日志(四)函数

    () + ", " } tv_result.text = str } 上面的泛型函数兼内联函数setArrayStr在定义的时候比较麻烦,不过外部的调用方式没有发生改变...尾递归函数是什么意思呢,它指的是函数末尾的返回值重复调用了自身函数。...,长此以往,工具类越来越多,也越来越管理,针对于这个情况,Kotlin推出了扩展函数得概念,扩展函数允许开发者给系统类补写新的方法,而无须另外编写额外的工具类,比如系统自带的数组Array提供了求最大值的...this[pos1] = this[pos2] this[pos2] = tmp } 不过这函数的缺点也很明显,就是它声明了扩展自Array,就不能用于浮点数组和双精度数组及其他的数组...{ //下标为0和3的两个数组元素进行交换 //array可以是整型数组,也可以是双精度数组 array.swap(0,3)

    1.8K10

    【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 反射获取系统的 Element[] dexElements )

    | 保留注解以及被注解修饰的类/成员/方法 ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )...【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 ) 【Android 安全】DEX...其类型是 “Java or Kotlin Library” , 其作用是用于生成主 DEX ( 主 DEX 的作用就是用于解密与加载多 DEX ) , 并且还要为修改后的 APK 进行签名 ; 在 【...file = files[i] // 如果文件后缀是 .dex , 并且不是 主 dex 文件 classes.dex // 符合上述两个条件的...步骤二 : 在本应用中创建 Element[] dexElements 数组 , 用于存放解密后的 dex 文件 ; 3 .

    41000

    开心档-软件开发入门之​Kotlin 基本数据类型​

    个人主页:iOS程序应用的主页​​​​​​ ----前言本章将会讲解 Kotlin 基本数据类型目录Kotlin 基本数据类型字面常量比较两个数字类型转换位操作符字符布尔数组字符串字符串模板----Kotlin...数字类型也一样,所以在比较两个数字的时候,就有比较数据大小和比较两个对象是否相同的区别了。在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。...装箱操作不会保留同一性。----布尔布尔用 Boolean 类型表示,它有两个值:true 和 false。若需要可空引用布尔会被装箱。内置的布尔运算有:|| – 短路逻辑或&& – 短路逻辑与!...数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数。...注意: 与 Java 不同的是,Kotlin 中数组是不协变的(invariant)。

    48230

    php常用函数分类整理

    /值的构造数组,并使数组指针向前移动一位 list($key,$value)=each($arr);  获得数组当前元素的键名和值 数组和变量之间的转换 extract($arr);用于把数组中的元素转换成变量导入到当前文件中...arsort($arr);  由大到小的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序 uasort($arr,"function");  使用用户自定义的比较函数对数组中的值进行排序(function...uksort($arr,"function");  使用用户自定义的比较函数对数组中的键名进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个) 自然排序法排序...arr2;  对于相同的键名只保留后一个 array_merge_recursive($arr1,$arr2);   递归合并操作,如果数组中有相同的字符串键名,这些值将被合并到一个数组中去。...,新的数组中会保留原始的键名 array_reverse($arr,TRUE);  返回一个单元顺序与原数组相反的数组,如果第二个参数为TRUE保留原来的键名 //srand((float)microtime

    77720

    第3章 Kotlin 可空类型与类型系统第3章 Kotlin 可空类型与类型系统

    Short,Integer,Long,Float,Double Kotlin中去掉了原始类型,只有“包装类型”, 编译器在编译代码的时候,会自动优化性能,把对应的包装类型拆箱为原始类型。...对于Kotlin的数字类型而言,不可空类型与Java中的原始的数字类型对应。...Kotlin中摒弃了这个数组类型声明的语法。Kotlin简单直接地使用Array类型代表数组类型。...这个Array中定义了get, set 算子函数, 同时有一个size 属性代表数组的长度,还有一个返回数组元素的迭代子 Iterator的函数iterator()。...Kotlin的类型系统比Java更加简单一致,Java中的原始类型与数组类型在Kotlin中都统一表现为引用类型。

    2.1K20

    【聊聊开发中十分重要的“必抓!”算法】

    它重复地遍历待排序的元素,比较相邻两个元素的大小,并根据需要进行交换,直到整个序列有序为止。 从序列的第一个元素开始,依次比较相邻的两个元素。...案例: 假设有一个待排序的整数数组 [5, 2, 8, 1, 3],我们可以使用冒泡排序对其进行排序。 首先,从数组的第一个元素开始比较相邻的两个元素:5 和 2。...将数组分区为两个子数组:小于基准元素的元素放在左边,大于基准元素的元素放在右边。 对左右子数组分别递归地应用快速排序算法。 终止条件是子数组的长度为 0 或 1,此时它们已经有序。...重复合并操作,直到最终合并为一个完整的有序数组。 这两种递归排序算法的思想都是将排序问题拆分为更小规模的子问题,然后递归求解,并通过合并或分区操作将子问题的结果合并成最终的排序结果。...在此案例中,通过递归调用 merge_sort 函数对原始数组进行拆分和排序,并通过辅助函数 merge 将两个有序的子数组合并为一个有序数组。

    16620
    领券