控制结构
过程式编程范式叫做——指令式编程,而把函数式编程范式叫做——声明式编程
过程式编程范式
控制结构允许程序根据不同的状态、条件和参数来选择不同的处理和执行路径
顺序结构、分支结构、循环结构
迭代
递归 recursing & tail recursion optimization (递归&尾递归优化)
函数式编程范式
函数是一等公民,可以像数据一样传来传去。
高阶函数
递归
pipeline
惰性求值
柯里化
偏应用函数
C++ 控制结构
01.C++ 顺序结构
顺序结构是指按照顺序一句一句地执行
02.C++ 选择语句 if 和 switch 提供了一种有条件地执行代码节的方式
if-else 语句控制条件分支
从 C++17 开始,if 语句还可能包含声明和初始化命名变量的 init-statement 表达式。
当变量仅在 if-statement 范围内需要时,请使用 if-statement 的此形式
C++17 开始,可以使用函数模板中的 if constexpr 语句做出编译时分支决策,而无需求助于多个函数重载
将 __if_exists __if_not_exists
switch 语句体由一系列 case 标签和一个 optionaldefault(可选)标签组成
03.C++ 提供四个迭代语句 -
while、do、for 和 range-based for。
for ( init-expression ; cond-expression ; loop-expression )
statement
for ( for-range-declaration:expression)
跳转语句执行控制
break、goto 或 return 时,while 循环也可以终止
continue 将控制转移到 while 循环的下一次迭代
04.C++ STL list迭代器及用法 list 容器迭代器函数
begin() 返回指向容器中第一个元素的双向迭代器(正向迭代器)。
end() 返回指向容器中最后一个元素所在位置的下一个位置的双向迭代器。(正向迭代器)
begin() rbegin() cbegin() crbegin()
end() rend() cend() crend()
即要么使用 front() 和 back() 成员函数,要么使用 list 容器迭代器
运算符:
递增运算符 递减运算符
?:运算符
first class function(头等函数) 在C++中,我们可以借助于函数对象或者函数指针来实现高阶函数
Map在C++中的直接映射是transform(头文件< algorithm>)
Reduce在C++中的直接映射是accumulate(头文件< numeric>)
Filter的功能是进行过滤,筛选出符合条件的成员。在C++中的映射有copy_if和partition
pipeline(管道)
C++20引入范围库(ranges)之后,可以使用operator |链接两个范围适配器闭包对象的结果
currying (柯里化) recursing & tail recursion optimization (递归&尾递归优化)
C++98/03中的函数对象,和C++11中的Lambda表达式、std::function 和 std::bind 让C++的函数式编程变得容易
bind函数可以看作一个通用的函数适配器,所谓适配器,即使某种事物的行为类似于另外一种事物的一种机制,
如容器适配器:stack(栈)、queue(队列)、priority_queue(优先级队列)。
bind函数接受一个可调用对象,生成一个新的可调用对象来适配原对象
lambda表达式具有如下形式:[捕获列表](参数列表)->返回类型{函数体}
int(*f)(int,int)=[](int a,int b){return a+b;};//lambda表达式的类型是函数指针类型
auto f=[](int a,int b){return a+b;};//与上面lambda表达式的声明是等价的
fuction<T>对象是对C++中现有的可调用实体的一种类型安全的包裹,而函数指针这类可调用实体,是类型不安全的。
所以任何用到函数指针的地方,我们都应该尽可能使用fuction<T>来替代。
function<int(int,int)>f1=[](int a,int b){return a+b;};//注意没有*
C++中没有函数类型,但是有函数指针的概念,函数指针指向的是函数而非对象
python
python语言中,选择结构的语法使用关键字if、elif、else
python的循环结构中,常见的循环结构是for循环和while循环
:for…in…循环
使用 continue 语句,可以跳过执行本次循环体中剩余的代码,转而执行下一次的循环。
只用 break 语句,可以完全终止当前循环
可迭代对象(Iterable)
__iter__方法的作用是让对象可以用for ... in循环遍历
实做了两件事:第一件事是调用__iter__()获得一个可迭代器,第二件事是循环调用__next__()
高阶函数指的是接收函数作为参数的函数,
Python 内置的高阶函数有:map() 、reduce() 、filter() map() 接收一个函数和一个序列作为参数
pandas这个第三方库来完成对数据的预处理和分析工作,而在该库中有一个叫做apply()的函数可以实现很好的可自定化
Python 也支持面向对象的三大特征:封装、继承和多态
Java
01.三种结构
02.迭代器(Iterator)模式,又叫做游标(Cursor)模式
该类需继承Iterable接口,实现接口的iterator()方法;
定义一个实现Iterator接口的类,实现接口的hasNext()方法与next()方法。
Iterator<Integer> iterator = list.iterator();
// 使用迭代器iterator遍历list中的每一个元素,并打印出来
while(iterator.hasNext())
System.out.print(iterator.next() + " ");
03.foreach又称增强for,是for循环的一个特殊简化版
list.forEach(any->System.out.println(any));
forEach()方法是Iterable接口中的一个方法
04.函数式表达
方式一:传统接口实现类
方式2:匿名内部类
方式3:Lambda表达式
Java8在Java中通过lambda表达式、Stream API引入了函数式编程
匿名函数 高阶函数
Scala
函数式编程范式 Scala中的集合对象都有foreach和map两个方法。
两个方法的共同点在于:都是用于遍历集合对象,并对每一项执行指定的方法。
而两者的差异在于:foreach无返回值(准确说返回void),map返回集合对象
R语言
匿名函数,闭包(由函数编写的函 数)和函数列表。
函数定义使用function关键字
向量化 向量化编程
R语言中共apply函数。 R语言中提供了一个apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上
编程概念
面向过程式编程
面向对象编程
函数式编程 统计中的R SQL
泛型编程
动态类型:一般来讲动态类型不需要泛型,因为泛型就是让类型动起来
静态类型检查 Static Typing Java、C/C++
模板是 C++ 中的泛型编程的基础 模板是基于用户为模板参数提供的参数在编译时生成普通类型或函数的构造
Java泛型-变量声明的时候的类型
本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)
这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法
类型擦除
变量
C/C++/Java 是静态语言 + 强类型;
JavaScript/PHP 是动态语言 + 弱类型;
Python 是动态语言 + 强类型。
内存中存取数据要明确三件事情:数据存储地址、数据的长度以及数据的处理方式。
Scala 编译器通常可以推断出表达式的类型,因此你不必显式地声明它-变量的类型推断。
Lambda演算构成了所有函数式编程语言的基础--》 函数级编程
闭包 ( Closure ) 在操作中,闭包是指一条记录,存储着一个函数和它的环境变量。这个函数既可以是有名函数,也可以是匿名函数
标签:pipeline,函数,迭代,int,编程,C++,控制结构,类型
From: https://www.cnblogs.com/ytwang/p/17024244.html