news 2026/4/23 21:47:49

「闭包、柯里化、响应式编程」10+ 高级编程技巧全解(多语言实战)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
「闭包、柯里化、响应式编程」10+ 高级编程技巧全解(多语言实战)

🚀 1. 闭包(Closure)

定义:闭包是函数与其定义时的作用域绑定在一起的结构。即使函数在外部调用,它仍然可以访问原作用域中的变量。

用途

  • 封装私有变量
  • 构造计数器、缓存器
  • 延迟计算

示例

JavaScript

functionmakeCounter(){letcount=0;returnfunction(){return++count;};}constcounter=makeCounter();console.log(counter());// 1

Python

defmake_counter():count=0defcounter():nonlocalcount count+=1returncountreturncounter

Java(匿名类模拟)

interfaceCounter{intnext();}CountermakeCounter(){returnnewCounter(){intcount=0;publicintnext(){return++count;}};}

Rust

fnmake_counter()->implFnMut()->i32{letmutcount=0;move||{count+=1;count}}

🧠 2. 柯里化(Currying)

定义:将一个多参数函数转化为一系列单参数函数。

用途

  • 参数预设
  • 函数复用
  • 与组合式编程搭配使用

示例

JavaScript

constmultiply=a=>b=>a*b;constdouble=multiply(2);console.log(double(5));// 10

Python

defmultiply(a):returnlambdab:a*b

TypeScript

functionmultiply(a:number):(b:number)=>number{returnb=>a*b;}

Rust

fnmultiply(a:i32)->implFn(i32)->i32{move|b|a*b}

🧩 3. 函数组合(Function Composition)

定义:将多个函数组合成一个函数,前一个函数的输出是后一个函数的输入。

用途

  • 构建数据处理管道
  • 清晰表达逻辑

示例

JavaScript

constcompose=(f,g)=>x=>f(g(x));

Python

defcompose(f,g):returnlambdax:f(g(x))

TypeScript

constcompose=<T,U,V>(f:(x:U)=>V,g:(x:T)=>U)=>(x:T)=>f(g(x));

Rust

fncompose<F,G,A,B,C>(f:F,g:G)->implFn(A)->CwhereF:Fn(B)->C,G:Fn(A)->B,{move|x|f(g(x))}

🌀 4. 惰性求值(Lazy Evaluation)

定义:表达式不会立即计算,而是在真正需要时才计算。

用途

  • 节省内存
  • 流式处理
  • 构建无限序列

示例

Python

deflazy_range(n):foriinrange(n):yieldi

JavaScript

function*lazyRange(n){for(leti=0;i<n;i++){yieldi;}}

Rust

fnlazy_range(n:usize)->implIterator<Item=usize>{0..n}

Java

IntStream.range(0,n).forEach(System.out::println);

🧱 5. 依赖注入(Dependency Injection)

定义:将依赖项作为参数传入,而不是在函数内部创建。

用途

  • 解耦模块
  • 提高可测试性

示例

Java

classService{privatefinalLoggerlogger;publicService(Loggerlogger){this.logger=logger;}}

Python

classService:def__init__(self,logger):self.logger=logger

TypeScript

classService{constructor(privatelogger:Logger){}}

Rust

structService<'a>{logger:&'adynLogger,}

🔄 6. 递归与尾递归优化

定义:递归是函数调用自身解决问题,尾递归是递归调用在函数最后一步执行,可被优化为循环。

用途

  • 树结构、图结构
  • 算法实现

示例

JavaScript

functionfactorial(n,acc=1){returnn<=1?acc:factorial(n-1,acc*n);}

Python

deffactorial(n,acc=1):ifn<=1:returnaccreturnfactorial(n-1,acc*n)

Rust

fnfactorial(n:u64,acc:u64)->u64{ifn<=1{acc}else{factorial(n-1,acc*n)}}

🧬 7. 泛型编程(Generic Programming)

定义:编写与类型无关的代码。

用途

  • 提高复用性
  • 类型安全

示例

Java

public<T>voidprintArray(T[]array){for(Titem:array){System.out.println(item);}}

TypeScript

functionidentity<T>(arg:T):T{returnarg;}

Rust

fnidentity<T>(x:T)->T{x}

Python

fromtypingimportTypeVar T=TypeVar('T')defidentity(x:T)->T:returnx

🔐8. 不可变数据结构(Immutable Data Structures)

定义:数据一旦创建就不能修改。

用途

  • 并发安全
  • 状态管理

示例

JavaScript

conststate={count:0};constnewState={...state,count:state.count+1};

Java

List<String>immutableList=List.of("a","b","c");

Rust

letstate=vec![1,2,3];letnew_state={letmuts=state.clone();s.push(4);s};

🧨 9. 元编程(Metaprogramming)

定义:代码可以操作代码,比如动态生成函数、修改类结构。

用途

  • 自动化工具
  • 框架开发

示例

Python(装饰器)

deflog(func):defwrapper(*args,**kwargs):print(f"Calling{func.__name__}")returnfunc(*args,**kwargs)returnwrapper

Java(反射)

Methodmethod=MyClass.class.getMethod("doSomething");method.invoke(obj);

Rust(宏)

macro_rules!say_hello{()=>{println!("Hello!");};}

🧙‍♂️ 10. 响应式编程(Reactive Programming)

定义:数据流和变化传播自动响应。

用途

  • UI 框架
  • 流式数据处理

示例

RxJS

import{fromEvent}from'rxjs';fromEvent(document,'click').subscribe(()=>console.log('Clicked!'));

Java(Reactor)

Flux.just(1,2,3).map(i->i*2).subscribe(System.out::println);

Kotlin(Flow)

flowOf(1,2,3).map{it*2}.collect{println(it)}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 21:44:58

【LabVIEW FPGA实战】构建可扩展的多端口SPI通信系统

1. 从零理解SPI通信协议 SPI&#xff08;Serial Peripheral Interface&#xff09;是嵌入式系统中最常见的同步串行通信协议之一。我第一次接触SPI是在开发工业传感器网络时&#xff0c;当时需要同时采集8个温度传感器的数据。与I2C相比&#xff0c;SPI的最大优势在于其全双工…

作者头像 李华
网站建设 2026/4/23 21:44:33

Kyoo转码器核心技术:实现高效视频处理与流媒体传输

Kyoo转码器核心技术&#xff1a;实现高效视频处理与流媒体传输 【免费下载链接】Kyoo A portable and vast media library solution. 项目地址: https://gitcode.com/gh_mirrors/ky/Kyoo Kyoo转码器是GitHub加速计划&#xff08;Kyoo&#xff09;项目的核心组件&#xf…

作者头像 李华
网站建设 2026/4/23 21:44:33

【国家级医疗软件开发新规落地倒计时】:VSCode 2026校验工具成唯一预认证IDE插件,6月30日前未接入将影响CFDA二类证申报

https://intelliparadigm.com 第一章&#xff1a;VSCode 2026 医疗代码校验工具的政策定位与合规意义 随着《医疗器械软件注册审查指导原则&#xff08;2025年修订版&#xff09;》和《GB/T 42061—2022 医疗器械质量管理体系用于法规的要求》全面实施&#xff0c;嵌入式医疗软…

作者头像 李华
网站建设 2026/4/23 21:43:37

别再只盯着YOLO了!用OpenCV+Python,基于RGB颜色阈值5步搞定简易火焰检测

轻量级火焰检测实战&#xff1a;OpenCVPython颜色阈值法全解析 当我们需要在资源受限的设备上实现实时火焰检测时&#xff0c;深度学习模型往往显得过于笨重。本文将带你用OpenCV和Python&#xff0c;仅需5个核心步骤构建一个基于RGB颜色阈值的轻量级火焰检测系统——这种方法在…

作者头像 李华
网站建设 2026/4/23 21:43:22

智慧校园系统怎么选?看看这份学工、教工全模块建设指南

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华
网站建设 2026/4/23 21:41:27

如何将libwebp集成到你的项目中:C、Python、Java多语言绑定

如何将libwebp集成到你的项目中&#xff1a;C、Python、Java多语言绑定 【免费下载链接】libwebp Mirror only. Please do not send pull requests. See https://chromium.googlesource.com/webm/libwebp//HEAD/CONTRIBUTING.md. 项目地址: https://gitcode.com/gh_mirrors/l…

作者头像 李华