编程范式:命令式编程(Imperative)、声明式编程(Declarative),函数式编程(fp)

2023-11-06 02:59

本文主要是介绍编程范式:命令式编程(Imperative)、声明式编程(Declarative),函数式编程(fp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考比较好的博客:https://www.cnblogs.com/sirkevin/p/8283110.html

下面是我自己的总结

命令式编程

命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。对应英文即为How,如何实现(Imperative is How to do)

eg1. 命令式事务,使用者自行实现

@Component
public class Utils {@Autowiredprivate DataSourceTransactionManager dataSourceTransactionManager;// 开启事务public TransactionStatus openTx() {return dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());}// 提交事务public void commitTx(TransactionStatus ts) {dataSourceTransactionManager.commit(ts);}// 回滚事务public void rollbackTx(TransactionStatus ts) {dataSourceTransactionManager.rollback(ts);}
}@Service
public class RegisterServiceImpl implements RegisterService {@Autowiredprivate Utils utils;@Overridepublic void programming(String name,String age,String studentId) {TransactionStatus ts = null;try {// 开启事务ts = utils.openTx();registerMapper.programming( name, age, studentId);int a=1/0;registerMapper.programming( name, age, studentId);if (ts != null) {// 提交事务utils.commitTx(ts);}} catch (Exception e) {if (ts != null) {// 回滚事务utils.rollbackTx(ts);}}}
}

eg2.The following example shows how to use Spring Retry in its imperative style ,此例子帮助理解(这里针对的实现重试功能)

RetryTemplate template = RetryTemplate.builder().maxAttempts(3).fixedBackoff(1000).retryOn(RemoteAccessException.class).build();template.execute(ctx -> {// ... do something
});

声明式编程

声明式编程是以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做。对应英文即为What,要做什么东西(Declarative is What to do)

eg1. 在Spring框架中,声明式编程只能体现的即为注解式编程,如事务@Transactional注解,即表示此方法具有什么功能,使用者不关心实现

@Transactional
public void executeSkill() { 
... 
}

eg2.The following example shows how to use Spring Retry in its declarative style,此例子帮助理解(这里针对的实现重试功能)

@Configuration
@EnableRetry
public class Application {@Beanpublic Service service() {return new Service();}}@Service
class Service {@Retryable(RemoteAccessException.class)public void service() {// ... do something}@Recoverpublic void recover(RemoteAccessException e) {// ... panic}
}

区别比较,,,引出函数式编程

在这里插入图片描述
备注:
面向对象编程(object oriented programming)(OOP)
函数式编程(functional programming)(FP)


面向对象编程对象之间是如何关联起来的呢?共用数据状态,即State,数据状态相关依赖(面向过程编程POP是代码相互依赖)

而函数式编程是不会出现数据状态相互依赖,每个函数功能都是独立的,那么也就是说不存在数据共享的问题,既然不存在数据共享,那么就衍生出了函数式编程

函数式编程

一大特点是不修改状态,那么它就天然的支持多线程编程,且此种编程方式绝对的,即函数式编程为并发编程的一种安全处理手段。

讨论到此即可

这篇关于编程范式:命令式编程(Imperative)、声明式编程(Declarative),函数式编程(fp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/354094

相关文章

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

Golan中 new() 、 make() 和简短声明符的区别和使用

《Golan中new()、make()和简短声明符的区别和使用》Go语言中的new()、make()和简短声明符的区别和使用,new()用于分配内存并返回指针,make()用于初始化切片、映射... 详细介绍golang的new() 、 make() 和简短声明符的区别和使用。文章目录 `new()`

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function