Kotlin函数之基础函数

Kotlin函数之一

一、函数的基本写法及用法:
class FunTest {
//函数写法
/*
*fun:声明函数的关键字
* String:返回值类型
* a:传入参数.如果参数有多个以"参数名:类型名"的形式写入。参数之间用“,”隔
*每个参数必须加上参数类型
*double:函数名
*return "$a":返回值
*/
fun double(a:Int):String{

return " $ a " ;
}
}
//函数用法:对象.函数名
fun main(args: Array) {
val funTest=FunTest();
val res=funTest.double( 4 );
println (res);
}

二、参数:
1、默认值:当传入函数的参数被忽略时,可以使用参数默认的值(相对应的,假如你没有给定默认值,那么你就必须传入该参数)。
fun varebleFun(a:Int= 10 ,str:String= "默认值" ,funTest:FunTest= FunTest()){
println ( "a== $ a \n str== $ str \n funTest== $ funTest " );
}
fun main(args: Array) {
val funTest=FunTest();
funTest.varebleFun();//此处调用并忽略了参数
}
//运行结果
a==10
str==默认值
funTest== test.FunTest@5e2de80c
2、命名参数:
fun reformat(str: String, normalizeCase: Boolean = true ,upperCaseFirstLetter: Boolean = true ,
divideByCamelHumps: Boolean = false ,
wordSeparator: Char = ' ' ) {
}
//我们可以不用定义变量直接使用参数的变量名来给其赋值
reformat(str, wordSeparator = '_' )
三、返回值:
1、 Unit :默认方法返回值,类似于Java中的void,可以理解成返回没什么用的值。
//?:表示该值可能为空(如下:如果没有?,那么在使用该函数就不能传入null)
fun printHello(name: String?): Unit {
if (name != null )
println ( "Hello ${ name } " )
else
println ( "Hi there!" )
// return;//可以直接return
return Unit;
}
如果不需要返回值也可以像在Java写没有返回值的方法一样,如下:
fun noReturn(){
}
四、单表达式函数:
当函数只返回单个表达式时,大括号可以省略并在 = 后面定义函数体
fun singleExpression(x: Int): Int = x* 2
在编译器可以推断出返回值类型的时候,返回值的类型可以省略:
fun singleExpression(x: Int) = x * 2

五、可变参数: 函数的参数(通常是最后一个参数)可以用 vararg 修饰符进行标记:
这里的变长其实是两个意思:参数类型可变化、参数个数可变化。
写法如下:
fun asList1(number:Int, vararg ts: String): List {
val result = ArrayList()
for (t in ts)
result.add(t)
return result
}
调用:funTest.asList1( 1 , "string_1" , "string_2" );

//此写法可以传入不同类型的参数
fun asList( vararg ts: T): List {
val result = ArrayList()
for (t in ts)
result.add(t)
return result
}

调用:funTest.asList( 1 , 2 , "" ,FunTest());

六、函数范围:
*权限修饰符
// file name: example.kt
package foo
private fun foo() {} // 只在 example.kt 文件内可访问
public fun foo() {} // 在任何地方都可以访问
internal fun foo() {} // 在同一个模块(module)内可以访问
1、顶级函数:所谓顶级函数就是隶属于包的函数,不属于任何一个类。
作用域:任何地方+权限修饰符限定区域。

2、局部函数:如:写在函数内的函数称为局部函数。
作用域:局部。

3、成员函数:
作用域:对象作用域+权限修饰符限定区域。


七、扩展函数:
在一个类的基础上扩展一个额外的函数(即向某类中再额外增加一个函数,来供该类调用,但是实际上又不对该类进行修改)。
/*
*FunTest:要扩展的类的类名。
* extensionFun:扩展函数的函数名。
*/
fun FunTest.extensionFun(b:Int):Int{
return b+ 1 ;
}
fun main(args: Array) {
//扩展函数的使用:
val funTest=FunTest();
funTest. extensionFun ( 5 );
}
特点:
1、扩展函数写在类之外,包之内:此时直属于包,使用时需要导入“包名.函数名”,可以在包外以及其他类中使用。
2、扩展函数写在类之内:此时直属于该类,只能在该类中使用。
3、扩展函数是被静态解析。
4、当一个类存在一个普通函数和扩展函数相同时,调用普通函数。
八、中缀(infix):
//当函数是成员函数或者是扩展函数只有一个参数时使用infix关键词进行标记
//扩展函数以infix修饰:
infix fun Int.extendFun(b:Int): Int {
return this +b;
}
class FunTest {
//成员函数以infix修饰:
infix fun infixFun(b:Int):Int{
return b* 7 ;
}
}
fun main(args: Array) {
val funTest=FunTest();
//扩展函数的使用:
funTest. extensionFun ( 5 );
//用中缀注解调用扩展函数
funTest extendFun 5 ;
//用中缀注解调用扩展函数
val a= 1 extendFun 4 ;
val b= 1 . extendFun ( 4 );
}

你可能感兴趣的:(Kotlin)