kotlin作为谷歌钦定的安卓开发官方语言,语法简洁,相比于Java,包含了现代语言高级特性。...如果想要定义一个常量,就像我们Java中的: public static final int MAX = Integer.MAX_VALUE; 则也需要在函数外定义: const val MAX =...100 fun main() { print(MAX) } 常量只能是基本数据类型:Int,Long,Short,Float,Double,String,Byte,Char,Boolean 二.条件语句...可以给入参设定默认值 private fun getInfo(age: Int = 5, name: String): String { return "" } 调用函数时,不需要一定按照函数定义的顺序传参...如果我们想用使用一段话来作为函数名,可以使用``将函数名包裹 fun `哈哈,这是一个特殊的函数`(){}
一、高阶函数介绍 在Kotlin中,高阶函数即指:将函数用作一个函数的参数或者返回值的函数。 1.1、将函数用作函数参数的情况的高阶函数 这里介绍字符串中的sumBy{}高阶函数。...先看一看源码 // sumBy函数的源码 public inline fun CharSequence.sumBy(selector: (Char) -> Int): Int { var sum...从上面的例子我们的写法应该是这样的: str.sumBy( { it.toInt } ) 复制代码 但是根据Kotlin中的约定,即当函数中只有一个函数作为参数,并且您使用了lambda表达式作为相应的参数...:kotlin 新的字符串:kotlin 原字符串:kotlin 反转字符串后的值:kotlin 新的字符串:kotlin 复制代码 3.7、T.takeIf()函数 从函数的名字我们可以看出,这是一个关于条件判断的函数...: 传入一个你希望的一个条件,如果对象符合你的条件则返回自身,反之,则返回null。
本文将介绍如何使用 Kotlin 的高阶函数,如sumBy, reduce, fold, map,filter,forEach 等,来应对常见的集合数据处理场景。...不了解高阶函数的同学可以先看下之前的文章。 遍历求和 sumBy 场景:输入一个账户列表List,求这些账户的财产总和sum。...也就是说,sumBy的场景无法用reduce代替。 那 Kotlin 有没有能指定acc类型的高阶函数?有的,它叫fold。...JavaScript 的 reduce 函数就是 Kotlin 的 fold 函数。u1s1,Kotlin 的 reduce 函数挺危险的,还有类型限制,不建议使用。...Kotlin 官方提供了数十个高阶函数,但其实掌握了以上几个高阶函数,基本可以 cover 所有场景了。其他的只是写的简洁还是写的复杂一点的区别。而且你还有另一条路可以走:自己写一个特定的高阶函数。
文章目录 一、先决条件函数 1、先决条件函数概念 2、先决条件函数原型 3、先决条件函数代码示例 一、先决条件函数 ---- 1、先决条件函数概念 在 Kotlin 中提供了一些 内置函数 , 在这些函数中可以抛出...携带自定义信息的异常 , 这些函数 就是 " 先决条件函数 " ; 只有满足了 先决条件函数 的 先决条件 , 代码才能继续执行 , 否则就会抛异常 ; 2、先决条件函数原型 常用的先决条件函数如下..., 使用给定的 错误信息 抛出 IllegalStateException 异常 ; 参数非空 , 返回非空值 ; /** * 使用给定的[message]抛出[IllegalStateException...failed" } } 3、先决条件函数代码示例 代码示例 : 在执行 name 字符串的 count 函数之前 , 先使用 checkNotNull(name, {"变量为空"}) 先决条件函数 ,...先决条件函数 checkNotNull 原型 : /** * 如果[value]为空,则使用调用[lazyMessage]的结果抛出[IllegalStateException]。
文章目录 一、数据库表结构 1、moduleRole(中间表) 2、roleInfo表 3、moduleInfo表 二、带条件插入的代码如下: 一、数据库表结构 1、moduleRole(中间表)...2、roleInfo表 3、moduleInfo表 上面roleInfo与moduleInfo表是多对多关系,所以引入中间表moduleRole,用两个一对多实现多对多关系 二、带条件插入的代码如下...: 向中间表moduleRole插入数据,限制条件为角色编号roleId=3,并且该角色的可操作菜单编号为1-0和1-1 代码如下: insert into moduleRole(roleId,moduleCode
,所以本篇和下一篇文章就分别介绍Kotlin如何操作条件判断和循环语句。...说起条件判断,最简单的莫过于人尽皆知的if...else...了,这个东东从C语言延续到Java,再进化到Kotlin,基本用法仍是一样的,看看下面的示例代码就知道了: var is_odd:...推出了新的关键字,即when/else来处理多路分支的条件判断。..." else -> "门泊东吴万里船" } } 总结一下,对于条件分支的处理,Kotlin实现了简单分支和多路分支,其中简单分支跟Java一样都是if...同时,Kotlin的条件分支允许有返回值,可算是一大改进。另外,Java的三元运算符“变量名=条件语句?
iterator()函数是kotlin.collections.Iterable中的函数, 被Collection继承。 (2)调用hasNext()函数检查序列中是否还有元素。...对应的针对越界处理的lastOrNull函数:返回符合条件的最后一个元素,没有则返回null : >>> list.lastOrNull({it>10}) null lastIndexOf(element...: >>> list.reduceRight({total, s -> total+s}) abc fold(initial: R, operation: (acc: R, T) -> R): R 带初始值的...(selector: (T) -> Int): Int 获取函数映射值的总和 函数定义: public inline fun Iterable.sumBy(selector: (T) ->...T) -> Boolean) 去除满足条件的元素返回剩下的元素的子集合 函数定义: public inline fun Iterable.dropWhile(predicate: (T)
这里等待后面具体来看什么时候非内联 在 Kotlin 中,我们可以只使用一个正常的、非限定的 return 来退出一个命名或匿名函数。...可以实现dsl风格的代码全靠它 Kotlin 提供了使用指定的 接收者对象 调用函数字面值的功能。 可以调用该接收者对象上的方法而无需任何额外的限定符,可以任意调用接受者的方法和属性。...如果你需要使用带接收者的函数类型声明一个变量,并在之后使用它,这将非常有用。 val sum = fun Int....(other: Int): Int = this + other 那么这样的匿名语法需要如何使用呢? 当接收者类型可以从上下文推断时,lambda 表达式可以用作带接收者的函数字面值。...html { // 带接收者的 lambda 由此开始 body() // 调用该接收者对象的一个方法 }
函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 VIII ....函数类型自动推断 IX . 带接收者的函数类型 与 不带接收者的函数类型 之间的转换 X . 函数类型变量调用 I ....带接收者类型的函数类型示例 : ① 带接收者类型的函数类型 : String....函数类型自动推断 ---- 1 . 变量类型推断 : Kotlin 中的变量类型可以不用显示声明 , 可以根据其赋值的类型进行智能类型推断 ; 2 ....带接收者的函数类型 与 不带接收者的函数类型 之间的转换 ---- 带接收者的函数类型 , 可以转换为 不带接收者的函数类型 , 转换规则是 , 带接收者的函数类型的接收者 , 可以转换为不带接收者类型的第一个参数
kotlin也写了很长一段时间了,香是真的很香这个东西。但是很多东西也是不求甚解,都是直接开始用,但是为什么我也不关心。举个栗子,就拿拓展函数来说。...返本归元 先介绍个工具,Android Studio的工具栏有个tools/Kotlin/Show Kotlin ByteCode。...然后在你的kotlin类上就可以直接看到kotlin类生成的字节码。 先抛问题在来分析。 java能不能调用到kotlin到拓展函数? 当然可以了。下面的代码块内就是18F.dp()的java写法。...也就是说我们写的拓展函数其实也就是个静态方法,只是把我们拓展的类当作一个静态参数传递给了静态方法内。 深入探索 上面介绍的工具还是要用下,看看到底字节码上的拓展函数是怎么样的。...IRETURN 返回上面栈的操作结果。 简单分析完字节码的操作之后,得出来的结论基本就是生成了一个dp的静态函数,以当前的拓展类作为第一个入参。
本文简单谈下Kotlin中的函数,包括表达式函数体,命名参数,默认参数,顶层函数,扩展函数,局部函数,Lambda表达式,成员引用,with/apply函数等。...1.表达式函数体 通过下面这个简单的例子看下函数声明相关的概念,函数声明的关键字是fun,嗯,比JS的function还简单。 Kotlin中参数类型是放在变量:后面,函数返回类型也是。...,相比Java, Kotlin中可以类似于JavaScript中带命名参数进行调用,而且可以不用按函数声明中的顺序进行调用,可以打乱顺序,比如下面: joinToString(separator = "...5.扩展函数 扩展函数是类的一个成员函数,不过定义在类的外面 扩展函数不能访问私有的或者受保护的成员 扩展函数也是编译成静态函数 所以可以在Java库的基础上通过扩展函数进行封装,假装好像都是在调用Kotlin...,在Java中可以抽取出独立的函数,但这样有时候对整体结构并不太好,Kotlin提供了局部函数来解决这个问题。
Kotlin中的内联函数还是挺好玩的 为什么需要内联函数? lambda 表达式会被正常地编译成匿名类。这表示每调用一次 lambda表达式,一个额外的类就会被创建。...内联函数使用 inline 修饰符标记,内联函数在 被使用的时候编译器并不会生成函数调用的代码,而是使用函数实现的真实代码替换每一次的函数调用 内联函数如何运作?...当一个函数被声明为 inline 时,它的函数体是内联的一一换句话说,函数体会被直接替换到函数被调用的地方,而不是被正常调用。...因为 kotlin中在调用函数时要求参数类名必须完全一致!! 对于上面的函数,如果我们想既可以接收 Array, 也可以接收Array, 那么就可以定义一个具体化类型参数的内联函数....: 内联函数在调用的时候会在调用出把该函数的代码直接复制一份,调用10次就会复制10次,而并非普通函数一样直接引用函数地址。
为了说明带参数的main函数,我们首先来学习一下有关命令行的概念。 命令行 在操作系统状态下,为执行某个程序而键入的一行字符称为命令行。...命令行的一般形式为: 命令名 参数1 参数2 参数3 ··· 参数n 参数之间以一个或多个空格隔开。...例如: C:\>copy[.exe] source.cpp c:\bak\prg.cpp 这个表示有三个字符串的命令行。...copy是DOS下的拷贝命令,是执行文件名,其功能就是将C盘根目录下的文件source.cpp拷贝到C盘bak子目录下,并改名为prg.cpp。...带参数的main函数 #include int main(int a,char *b[]) { ··· } 其中a是命令行字符串的个数,b是一个指针数组,数组中的每一个元素指针指向命令行中个字符串的首地址
Kotlin 简单优雅的高阶函数 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ ---- 函数代表一种关系 f 的蕴涵逻辑流。...整个的图G就是一幅美妙的抽象逻辑之塔的 映射图 。 ? image.png 1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。...// 简单直接的函数定义 fun f(x: Int) = x % 2 !...简单优雅的高阶函数定义(复合函数): compose(f, g) = f(g(*)) 组合函数返回传递给它的两个函数的组合: (f、g) = f (g (*))。...API filter,flat,map 等等 val mstrList = strList.filter(h) 同样的逻辑,我们在 Java 8中的实现代码是: package com.easy.kotlin
3 元函数优化问题则将 K^(M*N) 拆成3份,依次类推。 繁衍( 迭代) 为了编程省事,我选择了保持每一代猴子的数量不变。...评分 以 f(x,y) 的大小作为猴子打字快慢的评分标准。 带约束条件的问题 通过将不满足约束条件的候选解打一个最低分来实现对这类问题的求解。...下面是源代码: // 遗传算法二元.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。...return f(x_y); else // 不满足约束条件的打最低分 return std::numeric_limits::min(); }...和y的值是" << x_y.at(0) << "," << x_y.at(1) << endl; cout 的函数值是" << f(x_y) << endl; cout
pageNum) { $("#pageNum").val(pageNum); $("#form").submit(); } 解析:将查询条件放入到到...中添加方法 function page(pageNum) { $("#pageNum").val(pageNum); $("#form").submit(); } 并且给 隐藏标签设值;通过form中的id...调用submit函数提交form表单 注意:数据的回显 普通数据用param.属性名 特殊数据则需要特殊的方法 代码及解析如下 controller public String list(Employee...的持久化类Employee的首字母小写employee.dept.id 来回显你的数据${employee.dept.id==dept.id?'...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
在 filterTo 函数中,先对当前的集合进行遍历,如果满足条件 predicate(element) 就将当前的元素添加到新的集合中, predicate(element) 就是我们传递进来的那个函数...takeWhile:截取集合中的数据,直到第一个不满足条件的元素为止 例子:截取集合中不能够被5整除的数,直到第一个不满足条件的元素为止。...predicate(item)) 7 // 如果不满足条件结束遍历,也不会将当前不满足条件的元素添加到新的集合中 8 break 9 //...将满足条件的元素添加到集合中 10 list.add(item) 11 } 12 // 返回新创建的集合 13 return list 14} let:将调用者当做参数传递给指定的函数...里的this代表的是自身实例,而 ()->Unit 里,this代表的是外部类的实例 感谢 [Kotlin中,函数作为参数,T.()->Unit 和 ()->Unit 的区别][https://www.jianshu.com
Kotlin中的泛型和java中的十分类似都是用T表示泛型 kotlin中使用 T 表示泛型。...在定义泛型函数时需要在 fun 后面加入 , 然后指明某个参数的类型为 T 泛型函数的定义: //Kotlin中允许定义全局函数,将函数定义在kt文件中,然后全局可调用 fun appendString...//遍历可变数组,然后拼接 str = "$str${item.toString()}," } return st } 泛型函数的调用...btn_vararg_generic.setOnClickListene { tv_function_result.text = when (count % 3) { //在定义泛型函数时...appendString("小于10的素数", 2, 3, 5, 7) else -> appendString("花钱的日子", 5.20, 6.18
内联函数 定义:用关键字inline修饰的函数,叫做内联函数 作用:它们的函数体在编译器被嵌入每一个被调用的地方,减少额外生成匿名类和执行函数的开销 举个具体的例子:比如下面这个kotlin代码 fun...,通过inline,消除了匿名类的开销 另外,可以看kotlin官方api的源码,很多都是定义成了inline函数 public inline fun Iterable.map(transform...1、普通函数,不需要使用inline,jvm会自动的判断是否做内联的优化,inline都是针对高阶函数 2、大量函数体的行数,应该避免,这样会产生过多的字节码数量(每次调用的地方,都会重复生产该函数的字节码...Kotlin在引入inline的同时,也新增了noinline关键字,我们可以把它加在不想要内联的参数开头,该参数便不会具有内联的效果。...总结 内联函数是一种更高效的写法,很多kotlin官方的方法也都采用 内联应该尽量用在轻量的方法中,避免生成过多的字节码 行数:206 字数:1151 主题:默认主题
简化SharedPreferences的用法 回顾SharedPreferences的用法,向SharedPreferences中存储数据的过程: 1.调用SharedPreferences的edit(...SharedPreferences.Editor.() -> Unit) { val editor = edit() editor.block() editor.apply() } 通过拓展函数的方式向...SharedPreferences类中添加了一个open函数,并且接收一个函数类型的参数,因此open函数就是一个高阶函数。...open函数内拥有SharedPreferences的上下文,因此这里可以直接调用edit()方法来获取SharedPreferences.Editor对象。...open函数接受的是一个SharedPreferences.Editor类型的参数因此需要调用editor.block()对函数类型参数进行调用,就可以在函数类型参数的具体实现中添加数据了。
领取专属 10元无门槛券
手把手带您无忧上云