Kotlin 中函数参数为函数:以模拟数据库为例

Kotlin 中函数参数为函数:以模拟数据库为例

本文概述:

  • 函数A是函数B的参数:可以认为是共享参数的实现;本文以模拟实际成产环境中登录功能为例,对函数参数为函数进行了探究;同时,为了体现出Kotlin 语言的优越性,文末附相同功能的 Java代码实现;
  • Kotlin中的Lamda表达式,在 Java中常采用接口进行处理

正文部分:

  • 模拟数据库:用户名与密码字段

     //模拟数据库
     const val USER_MAME = "WAsbry"
     const val USER_PWD = "123"
    复制代码
  • 模仿前端作数据的校验

     public fun loginAPI(username:String,userpwd:String,responseResulut:(String,Int) -> Unit){
         //做简单校验
         if(username == null || userpwd == null){//TODO 信息为空终止程序
         }
         //调用服务端API
         if(webServiceLoginAPI(username,userpwd)){
             responseResulut("Login success",200)
         }else{
             responseResulut("Login error",444)
         }
     }
    复制代码
    • 细节一:前端的API为public修饰,开放给所有用户用于登录

      • Kotlin 函数默认使用public修饰,写出来会爆灰
    • 细节二:对于第三个参数,是前端返回给用户的数据;

      • 在Kotlin中采用函数参数方式实现 在Java中需要替换为接口采用接口回调的方式
      • 用户接收后,可以打印信息
  • 模仿服务端:

     private fun webServiceLoginAPI(name:String,pwd:String) : Boolean{
     //    return if(name == USER_MAME && pwd == USER_PWD)return true else return false
     ​
         return name == USER_MAME && pwd == USER_PWD
     }
    复制代码
    • 细节一:服务端API为私有,只开放给系统的前端API

    • 细节二:在校验信息,比较字面量时

      • Kotlin中的== 就相当于Java中的equals
    • 细节三:在kotlin中if为表达式并非语句,其实可以有返回值的

      • return if{}
  • main函数调用:

     fun main(){
         loginAPI("WAsbry","123"){msg:String,code:Int->
             println("登录结果为:msg:$msg,code:$code")
         }
     }
    复制代码
  • 完整代码:

     package step2
     //函数A中的参数是函数B的函数:以模拟数据库为例
     ​
     //模拟数据库
     const val USER_MAME = "WAsbry"
     const val USER_PWD = "123"
     ​
     //模仿前端作数据的校验
     public fun loginAPI(username:String,userpwd:String,responseResulut:(String,Int) -> Unit){
         //做简单校验
         if(username == null || userpwd == null){//TODO 信息为空终止程序
         }
         //调用服务端API
         if(webServiceLoginAPI(username,userpwd)){
             responseResulut("Login success",200)
         }else{
             responseResulut("Login error",444)
         }
     }
     //模仿服务端
     private fun webServiceLoginAPI(name:String,pwd:String) : Boolean{
         return name == USER_MAME && pwd == USER_PWD
     }
     fun main(){
         loginAPI("WAsbry","123"){msg:String,code:Int->
             println("登录结果为:msg:$msg,code:$code")
         }
     }
    复制代码
  • 运行结果:

    image-20220601163621569

补充一:main函数的省略写法:一般都用写法三

 fun main(){
     //写法一:
     loginAPI("WAsbry","123",{msg:String,code:Int->
         println("登录结果为:msg:$msg,code:$code")
     })
     //写法二:
     loginAPI("WAsbry","123",responseResulut = {msg:String,code:Int->
         println("登录结果为:msg:$msg,code:$code")
     })
 //   写法三:
     loginAPI("WAsbry","123"){msg:String,code:Int->
         println("登录结果为:msg:$msg,code:$code")
     }
 }
 ​
复制代码

image-20220602225141770

补充二:java 版本,使用接口进行处理了

 package step2;
 ​
 //定义接口用于回调
 interface ResponseResult{
     void result(String msg,int code);
 }
 ​
 public class Java29 {
     //模拟数据库
     public final static String USER_NAME = "WAsbry";
     public final static String USER_PWD = "123";
 ​
     public static void main(String[] args) {
         Java29 ma = new Java29();
         ma.login("WAsbry","123", new ResponseResult() {
             @Override
             public void result(String msg, int code) {
                 System.out.println("登录结果为:msg:"+msg+",code:"+code);
             }
         });
     }
 ​
     //模仿前端
     public void login(String userName,String userPwd,ResponseResult responseResult){
         //简单校验
         if(userName == null || userPwd == null){
             //TODO 用户名、密码存在空值
         }
         //调用服务端API
         if(webServiceLogin(userName,userPwd)){
             responseResult.result("Login success",200);
         }else{
             responseResult.result("Login error",444);
         }
     }
     //模仿服务端
     private boolean webServiceLogin(String name,String pwd){
         //Java中的if为语句不是表达式,不具有返回值,不能直接return
         if(name.equals(USER_NAME) && pwd.equals(USER_PWD)){
             return true;
         }else{
             return false;
         }
     }
 }
复制代码

图片.png

猜你喜欢

转载自juejin.im/post/7106044673193738277