在程序历史的进程中,就像是动物历史一样,是在漫漫的演变当中前进。动物会根据环境最适者生存,程序也会慢慢演进,根据环境、硬体资源等原因逐渐找出一个pattern是最适合某个条件的。Programming paradigm 就是指总结出来经典的程序典范,主要分成两大类指令式(Imperative programming paradigm
)、宣告式(Declarative programming paradigm
),里面又会再细分不同的种类。
指令式,顾名思义就是一步步告诉程序如何运作,运用条件(if、switch)、回圈(for)来做流程控制,会有变数(variable)来记录状态,这通常也是刚接触程序所先学习到的,其优点也是可以具象化需求、容易想像也比较容易撰写,适合入门使用。做为Java开发者最耳熟能详的物件导向程序设计(Object oriented programming
)也是属於指令式。
宣告式/声明式,较为抽象,相对於指令式的繁琐,宣告式重点在於目标而不是流程。在学习这部分的时候我一直用Java角度来思考就会很难理解,这边建议用SQL查询来思考就单纯的多,只需要SELECT * FROM
就可以查询资料库,不需要知道资料库背後运作的流程与细节,还有後面会介绍到的Funtional Programming
、Reactive Programming
,也都是宣告式,自己认为语言本身要有一定程度支援才能写出宣告式的程序。
通常只看到定义还是会很难了解差异,这边列出我整理出来的比较表
用简单的范例来比较,有一个1~10的list,印出其中是偶数的部分,指令式透过for
回圈搭配if
,声明式透过stream
、filter
、forEach
的方式。
public static void main(String[] args) {
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> result = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
if ((data.get(i)) % 2 == 0) {
result.add(data.get(i));
}
}
for (int i = 0; i < result.size(); i++) {
System.out.println(result.get(i));
}
}
public static void main(String[] args) {
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
data
.stream()
.filter(i -> i % 2 ==0)
.forEach(System.out::println);
}
本篇主要是简单介绍一下Programming paradigm,可以在後面帮助了解Reactive Programming,指令式与宣告式这两种没有绝对的谁优谁劣,取决於需求与环境,下一篇会来介绍Funtional Programming
。
<<: Day2|【Git】使用MacOS 作业系统安装 Git - 以 Homebrew 网页安装
简单来说,TeamCity 的运作方式是 Server + Agent 的架构。平常我们看到的 Te...
=x= 🌵 Yachts 前台页面 OverView - Content Page 後端功能制作。 ...
在这个系列我们教过很多种函式嘛,但那些都是Python内建的,今天就要来教你怎麽自订函式。首先先带你...
前言 曾经有一段瞎摸索的时间,老是不知道为什麽flex时灵时不灵 歪着脑袋想不通为什麽... 直到摸...
通道Channel Channel可以想像成是一种资料结构,可以push data进去也可以pull...