IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> kotlin语法的基础学习和进阶学习 -> 正文阅读

[移动开发]kotlin语法的基础学习和进阶学习

1kotlin语言有具名函数参数,就是调用函数时不需要按照参数的顺序去填充参数,可以不按照参数声明顺序去调用

fun functionTest(name:String,age:Int){
    println("name=${name},age=$age")
    val num1=1000_000_000
    val num2=100
    println(num1+num2)
}

2kotlin语言的Unit返回类型可以省略,和java的区别是,void是关键字,而Unit是类
3kotlin中的反引号作用:将java中的普通名称但是在kotlin中又是关键字的函数名,加上单反引号后就可视为一个普通的名称

package com.njupt.base

/**
 *Creat with IntelliJ IDEA
 *@Auther:倔强的加瓦
 *@Date:2022/10/07/10:33
 *@Description:
 */
fun main(){
    你是谁()
}
private fun `你是谁`(){
    println("我是你爹")
    YinhaoTest.`in`()
}

4匿名函数

package com.njupt.base

/**
 *Creat with IntelliJ IDEA
 *@Auther:倔强的加瓦
 *@Date:2022/10/07/10:33
 *@Description:匿名函数的编写步骤
 */
fun main(){
    //第一步:声明函数的函数名输入和输出类型以及返回值类型等
    val function1 :()->String
    //第二步:编写函数的具体实现细节
    function1 ={
        var name:String="你是我的小艾小苹果"
        val length=name.count{
            it == '我'
        }
        //最后一行就是返回值,不需要写return语句
        name
    }
    //第三步:调用即可
    println(function1())

}

有参数的匿名函数的编写

package com.njupt.base

/**
 *Creat with IntelliJ IDEA
 *@Auther:倔强的加瓦
 *@Date:2022/10/07/10:33
 *@Description:匿名函数的编写步骤
 */
fun main(){
    //第一步:声明函数的函数名输入和输出类型以及返回值类型等,编写函数的具体实现细节
    val function1 :(Int,String)->String={
        num1,num2 ->
        "返回的值为参数1:$num1,参数2:$num2"
    }


    //第三步:调用即可
    println(function1(1,"啊啊啊"))

}



5当函数只有一个参数时,可以隐式的获取参数名为it,见方法三

package com.njupt.base

/**
 *Creat with IntelliJ IDEA
 *@Auther:倔强的加瓦
 *@Date:2022/10/07/10:33
 *@Description:匿名函数的编写步骤
 */
fun main(){
    //第一步:声明函数的函数名输入和输出类型以及返回值类型等,编写函数的具体实现细节
    val function1 :(Int,String)->String={
        num1,num2 ->
        "返回的值为参数1:$num1,参数2:$num2"
    }
    //第三步:调用即可
    println(function1(1,"啊啊啊"))

    val function2 :(String,Int)->String={
        name1,num2->
        "$name1,$num2"
    }
    println(function2("哈哈",12))

    //对于只有一个参数的函数,会有一个默认的参数it
    val function3:(Int) -> Int={
        it*it
    }
    println(function3(3))

}

6kotlin中匿名函数的写法

package com.njupt.base

/**
 *Creat with IntelliJ IDEA
 *@Auther:倔强的加瓦
 *@Date:2022/10/07/16:55
 *@Description:
 */
fun main(){
    //自定义判断返回参数类型,不需要指定函数的返回值,这就是匿名函数
    val name={
        a:Int,b:Int,c:Int->
        val d=a*b
        d*c
    }
    
    val week = { a: Int ->
        //参数是Int类型,但是返回值是Any类型
        when (a) {
            1 -> "星期一"
            2 -> "星期2"
            3 -> "星期3"
            4 -> "星期4"
            else -> -1
        }
    }
    println(week(-1))
    println(name(2,2,2))
}

7函数作为另一个函数的参数的使用
7.1java的写法

package com.njupt.base;

/**
 * Creat with IntelliJ IDEA
 *
 * @Auther:倔强的加瓦
 * @Date:2022/10/07/10:37
 * @Description:
 */
interface ResultJson{
    void code(String mess,int code);
}
public class YinhaoTest {
    public static void main(String[] args) {
        login("123", "123", new ResultJson() {
            @Override
            public void code(String mess, int code) {
                System.out.println("信息是:"+mess+":状态码是:"+code);
            }
        });
    }
    public static void login(String name,String psw,ResultJson resultJson){
        if(name.equals("abc")&&psw.equals("123")){
            resultJson.code("登录成功",200);
        }else{
            resultJson.code("登录失败",444);
        }
    }
}

7.2.使用kotlin的写法,可以省略接口的写法。

package com.njupt.base

/**
 *Creat with IntelliJ IDEA
 *@Auther:倔强的加瓦
 *@Date:2022/10/07/16:55
 *@Description:
 */
fun main() {
    //虽然有三个参数,但是第三个参数是函数,需要写在外面
    login("abc","123"){
        mess:String,code:Int->
        println("信息是:$mess,状态码是:$code")
    }


}

//登录密码的验证,从而返回响应包,将函数作为第三个参数
fun login(name:String,pwd:String,responseCode:(String,Int)->Unit){
    if(name=="abc"&&pwd=="123"){
        responseCode("登录成功",200)
    }else{
        responseCode("登录失败",444)
    }
}

内联函数的引入:在当函数作为另一个函数的参数时,从字节码的角度看就是要创建对象去调用作为参数的方法,但是引入内敛函数后可以避免创建对象相互调用带来的消耗

情况1,不引入内敛函数上面代码反编译的情况:

package com.njupt.base;

import kotlin.Metadata;
import kotlin.jvm.functions.Function2;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;

@Metadata(
   mv = {1, 1, 18},
   bv = {1, 0, 3},
   k = 2,
   d1 = {"\u0000\u001c\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0010\b\n\u0002\b\u0002\u001a0\u0010\u0000\u001a\u00020\u00012\u0006\u0010\u0002\u001a\u00020\u00032\u0006\u0010\u0004\u001a\u00020\u00032\u0018\u0010\u0005\u001a\u0014\u0012\u0004\u0012\u00020\u0003\u0012\u0004\u0012\u00020\u0007\u0012\u0004\u0012\u00020\u00010\u0006\u001a\u0006\u0010\b\u001a\u00020\u0001¨\u0006\t"},
   d2 = {"login", "", "name", "", "pwd", "responseCode", "Lkotlin/Function2;", "", "main", "kotlin_base"}
)
public final class SoutTest2Kt {
   public static final void main() {
      login("abc", "123", (Function2)null.INSTANCE);
   }

   // $FF: synthetic method
   public static void main(String[] var0) {
      main();
   }

   public static final void login(@NotNull String name, @NotNull String pwd, @NotNull Function2 responseCode) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      Intrinsics.checkParameterIsNotNull(pwd, "pwd");
      Intrinsics.checkParameterIsNotNull(responseCode, "responseCode");
      if (Intrinsics.areEqual(name, "abc") && Intrinsics.areEqual(pwd, "123")) {
         responseCode.invoke("登录成功", 200);
      } else {
         responseCode.invoke("登录失败", 444);
      }

   }
}

情况2引入内联函数的情况

package com.njupt.base;

import kotlin.Metadata;
import kotlin.jvm.functions.Function2;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;

@Metadata(
   mv = {1, 1, 18},
   bv = {1, 0, 3},
   k = 2,
   d1 = {"\u0000\u001c\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0010\b\n\u0002\b\u0002\u001a3\u0010\u0000\u001a\u00020\u00012\u0006\u0010\u0002\u001a\u00020\u00032\u0006\u0010\u0004\u001a\u00020\u00032\u0018\u0010\u0005\u001a\u0014\u0012\u0004\u0012\u00020\u0003\u0012\u0004\u0012\u00020\u0007\u0012\u0004\u0012\u00020\u00010\u0006H\u0086\b\u001a\u0006\u0010\b\u001a\u00020\u0001¨\u0006\t"},
   d2 = {"login", "", "name", "", "pwd", "responseCode", "Lkotlin/Function2;", "", "main", "kotlin_base"}
)
public final class SoutTest2Kt {
   public static final void main() {
      String name$iv = "abc";
      String pwd$iv = "123";
      int $i$f$login = false;
      short code;
      String mess;
      boolean var5;
      String var6;
      boolean var7;
      if (Intrinsics.areEqual(name$iv, "abc") && Intrinsics.areEqual(pwd$iv, "123")) {
         code = 200;
         mess = "登录成功";
         var5 = false;
         var6 = "信息是:" + mess + ",状态码是:" + code;
         var7 = false;
         System.out.println(var6);
      } else {
         code = 444;
         mess = "登录失败";
         var5 = false;
         var6 = "信息是:" + mess + ",状态码是:" + code;
         var7 = false;
         System.out.println(var6);
      }

   }

   // $FF: synthetic method
   public static void main(String[] var0) {
      main();
   }

   public static final void login(@NotNull String name, @NotNull String pwd, @NotNull Function2 responseCode) {
      int $i$f$login = 0;
      Intrinsics.checkParameterIsNotNull(name, "name");
      Intrinsics.checkParameterIsNotNull(pwd, "pwd");
      Intrinsics.checkParameterIsNotNull(responseCode, "responseCode");
      if (Intrinsics.areEqual(name, "abc") && Intrinsics.areEqual(pwd, "123")) {
         responseCode.invoke("登录成功", 200);
      } else {
         responseCode.invoke("登录失败", 444);
      }

   }
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:53:18  更:2022-10-08 20:57:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/19 1:27:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码