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 基础学习笔记(二)

1.?函数 和 函数表达式

1.1 函数

	fun add(x : Int, y : Int) : Int {
		return x + y
	}

==>如果函数语句只有一句,变形:

fun add(x: Int, y: Int): Int = x + y

1.2 函数表达式

==>将一个函数表达式赋值给一个变量,然后调用:

	// 将一个函数表达式 赋 给了i
	var i = { x: Int, y: Int -> x + y }

	// 调用声明好的 函数表达式
	var ret = i(3 , 5)

==>另外一种变形:

	var j:(Int, Int) -> Int = {x, y -> x + y}

	// 调用声明好的函数
	var ret3 = j(3, 5)

2. 默认参数 和 具名参数

	// 声明一个常量
	val pi = 3.14159f

	fun main(args: Array<String>) {

		// 正常调用
	    var line = 获取园的周长(pi, 4.0f)

	    var line2 = 获取园的周长2(pi, 2.0f)

	    println("line = ${line}, line2 = ${line2}")

	    // 具名参数,第一个参数默认
	    var line3 = 获取园的周长2(半径 = 2.0f)
	    println("line3 = ${line3}")
	}

	// (PI为形参),指定第一个参数默认为pi
	fun 获取园的周长(PI: Float = pi, 直径: Float): Float {
	    return PI * 直径
	}
	// 指定第一个参数默认为pi
	fun 获取园的周长2(PI: Float = pi, 半径: Float): Float {
	    return PI * 半径 * 2
	}

3.?字符串 和 数字 之间的转换

	var a = "12"
	var b = 12

	a = b.toStirng()

	b = a.toInt() 

4.?人机交互

    var num1Str = readLine() // readLine 读取的都是字符串

    var num1 = num1Str?.toInt()
    var num2 = num1Str!!.toInt()

5.?异常处理

try {} cach (e: Exception) {}

6.?Kotlin 递归 和?尾递归优化

6.1?递归

		fun main(args:Array<String>) {
		    // 计算阶乘
		    var i = 5
		    println(fact(i))
		}

		fun fact(num: Int) : Int{
		    if (num == 1) {
		        return 1
		    } else {
		        return num * fact(num -1)
		    }
		}

如果计算30的阶乘,就会发现结果为负数,已经超过Int类型的最大范围,也可能超过Long类型的最大范围,有一个新的类型:BigInteger 类型? (Long类型的数字超出范围可用)

		// 1==BigInteger.ONE 
		fun main(args: Array<String>) {
		    // 计算阶乘
		    var i = BigInteger("100")
		    println(fact(i))
		}

		fun fact(num: BigInteger): BigInteger {
		    if (num == BigInteger.ONE) {
		        return BigInteger.ONE
		    } else {
		        return num * fact(num - BigInteger.ONE)
		    }
		}

6.2?尾递归优化

为什么需要优化?

	fun main(args: Array<String>) {
	    // 累加操作
	    println(ollAdd(100000))
	}

	fun ollAdd(num: Int): Int {
	    if (num == 1) {
	        return 1
	    } else {
	        return num + ollAdd(num - 1)
	    }
	}

运行上述代码会报StackOverflowError, 因为 递归函数的层数过多会造成java 堆栈溢出。

优化之后

fun main(args: Array<String>) {
    // 累加操作
    var result = 0
    println(ollAdd(100000, result))
}

tailrec fun ollAdd(num: Int, result: Int): Int {
    if (num == 0) {
        return result
    } else {
        return ollAdd(num - 1, result + num)
    }
}

使用了?tailrec 关键字,并且使用该关键字之后,要求函数返回值是它函数本身,这一点要注意。

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 21:18:51-

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