Kotlin柯里化——函数调用链

简介: 一、首先看一个小例子,做个铺垫package net.println.kotlin.chapter5.currying/** * @author:wangdong * @description:柯里化——函数...

一、首先看一个小例子,做个铺垫

package net.println.kotlin.chapter5.currying

/**
 * @author:wangdong
 * @description:柯里化——函数调用链
 */

/**定义一个Hello的方法*/
//传入三个参数,返回一个Boolean类型的值
fun hello(x: String,y: Int,z: Double):Boolean{
    return true;
}

/**定义一个柯里化的方法
 * 1.传入一个String类型的参数x
 * 2.返回了一个函数,这个函数又传入了一个Int类型的y
 * 3.又返回了一个函数,这个函数又传入了一个Double类型的z
 * 柯里化就是完成:
 * 有多个参数的函数,变换成一系列单参数的函数的变换
 */
fun curriedHello(x: String):(y: Int) -> (z:Double) -> Boolean{

}

二、柯里化更详细的例子(日志打印)

package net.println.kotlin.chapter5.currying

import java.io.OutputStream

/**
 * @author:wangdong
 * @description:柯里化——函数调用链
 */

/**
 * 写一个打日志的东西
 */
fun log(tag: String,target: OutputStream,message: Any?){
    //打日志"\n"是换行的意思
    target.write("[$tag] $message\n".toByteArray())
}

/**
 * 柯里化它
 * 1.首先传tag
 * 2.返回一个函数,函数再传target
 * 3.返回一个函数,函数再传Any
 */
/*
* 这样写下去就很复杂了
fun log(tag: String): (target: OutputStream) -> (message: Any?){

}*/

/***
 * 用一个简单的写法
 */
/*fun log(tag: String)
    =fun(target: OutputStream)
    =fun(message: Any?)
    = target.write("[$tag] $message\n".toByteArray())*/

fun main(args: Array<String>) {
    log("benny",System.out,"HelloWorld")
    //log("benny")(System.out)("HelloWorld Again")
    ::log.curried()("benny")(System.out)("HelloWorld Again")
}

/**
 * 这个柯里化就非常简单了
 * 写一个扩展函数
 * 三个参数那么就扩展Function3了
 * 这样写就对了,目前请不要过分深究,他日在细细研究
 */
fun <P1,P2,P3,R> Function3<P1,P2,P3,R>.curried()
    =fun (p1: P1) = fun (p2: P2) = fun (p3: P3) = this(p1,p2,p3)
目录
相关文章
|
11天前
|
移动开发 Java Android开发
构建高效Android应用:Kotlin协程的实践之路
【4月更文挑战第30天】在移动开发领域,随着用户需求的不断增长和设备性能的持续提升,实现流畅且高效的用户体验已成为开发者的首要任务。针对Android平台,Kotlin协程作为一种新兴的异步编程解决方案,以其轻量级线程管理和简洁的代码逻辑受到广泛关注。本文将深入探讨Kotlin协程的概念、优势以及在实际Android应用中的运用,通过实例演示如何利用协程提升应用性能和响应能力,为开发者提供一条构建更高效Android应用的实践路径。
|
3天前
|
安全 Java Android开发
构建高效Android应用:采用Kotlin进行内存优化的策略
【5月更文挑战第8天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,合理管理内存资源是确保应用流畅运行的关键因素之一。近年来,Kotlin作为官方推荐的开发语言,以其简洁、安全和互操作性的特点受到开发者青睐。本文将深入探讨利用Kotlin语言特性,通过具体策略对Android应用的内存使用进行优化,旨在帮助开发者提高应用性能,减少内存消耗,避免常见的内存泄漏问题。
7 0
|
4天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
15 1
|
4天前
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin协程的全面应用
【5月更文挑战第7天】 在移动开发领域,性能优化与流畅的用户体验是至关重要的。随着Kotlin语言的流行,其并发神器——协程,已成为提升Android应用性能的重要工具。本文将深入探讨如何在Android项目中利用Kotlin协程进行异步编程、网络请求和数据库操作,以及如何通过协程简化代码结构,增强应用的响应性和稳定性。我们的目标是为开发者提供一套实用的协程使用模式和最佳实践,以便构建更加高效的Android应用。
20 3
|
4天前
|
移动开发 Java Android开发
Android应用开发:Kotlin语言的优势与实践
【5月更文挑战第7天】 在移动开发的世界中,Android平台的Kotlin语言以其高效、简洁的语法和强大的功能吸引了众多开发者。本文将深入探讨Kotlin语言的核心优势,并通过实际案例展示如何在Android应用开发中有效地运用这一现代编程语言。我们将从语言特性出发,逐步分析其在提升开发效率、改善代码质量以及增强应用性能方面的具体表现,为读者提供一个全面而细致的Kotlin应用开发指南。
|
4天前
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin与协程的完美结合
【5月更文挑战第7天】 在移动开发领域,性能优化和资源管理始终是核心议题。随着Kotlin语言的普及,其提供的协程特性为Android开发者带来了异步编程的新范式。本文将深入探讨如何通过Kotlin协程来优化Android应用的性能,实现流畅的用户体验,并减少资源消耗。我们将分析协程的核心概念,并通过实际案例演示其在Android开发中的应用场景和优势。
|
7天前
|
移动开发 前端开发 Android开发
构建高效Android应用:探究Kotlin协程的优势
【5月更文挑战第4天】 在移动开发领域,尤其是对于Android开发者而言,编写响应迅速且高效的应用程序至关重要。Kotlin作为一种现代的编程语言,其提供的协程特性为异步编程带来了革命性的改变。本文将深入探讨Kotlin协程在Android开发中的应用优势,并通过实例代码展示如何利用协程简化异步任务处理,提高应用性能和用户体验。
|
7天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能对比
【5月更文挑战第4天】在移动开发的世界中,性能一直是衡量应用质量的重要指标。随着Kotlin的兴起,许多Android开发者开始考虑是否应该从传统的Java迁移到Kotlin。本文通过深入分析两者在Android平台上的性能差异,帮助开发者理解Kotlin在实际项目中的表现,并提供选择编程语言时的参考依据。
20 5
|
10天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【5月更文挑战第1天】 在移动开发的世界中,性能优化始终是开发者关注的焦点。随着Kotlin的兴起,许多团队和开发者面临着一个选择:是坚持传统的Java语言,还是转向现代化、更加简洁的Kotlin?本文通过深入分析和对比Kotlin与Java在Android应用开发中的性能表现,揭示两者在编译效率、运行速度和内存消耗等方面的差异。我们将探讨如何根据项目需求和团队熟悉度,选择最适合的语言,以确保应用的高性能和流畅体验。
|
10天前
|
缓存 安全 Android开发
构建高效Android应用:采用Kotlin进行内存优化
【5月更文挑战第1天】随着移动设备的普及,用户对应用程序的性能要求越来越高。特别是对于Android开发者来说,理解并优化应用的内存使用是提升性能的关键。本文将探讨使用Kotlin语言在Android开发中实现内存优化的策略和技术。我们将深入分析Kotlin特有的语言特性和工具,以及它们如何帮助开发者减少内存消耗,避免常见的内存泄漏问题,并提高整体应用性能。