编程逻辑
- 一位十年软件工程师告诉你什么是编程思想 - 百度文库
https://wenku.baidu.com/view/1cf34e6d7e21af45b307a8bf.html - 编程同写作,写代码只是在码字_知识库_博客园
https://kb.cnblogs.com/page/213197/ - 浅谈代码分层:构建模块化程序_hrdzkj的专栏-CSDN博客_模块化分层
https://blog.csdn.net/hrdzkj/article/details/8866775 - 程序开发的命名规范(必读)_xiaoxunx的博客-CSDN博客_命名规范
https://blog.csdn.net/xiaoxunx/article/details/52691527
编程逻辑在我看来就是实现一个功能的通用思路,比如最简单的,你要做一个代办列表,自然需要一个集合或者数组对象进行存储数据、然后每条数据至少要有一个文本类型的变量,和表示是否完成的flag,比如text,用来存储代办内容,isCompleted表示当前任务是否完成,而这是和任何编程语言无关的,是逻辑上的,就是用记事本来做也一样的,比如
工作代办列表
- [ ] 发邮件
- [ ] 回复消息
- [ ] 做PPT
这就是一个Todo,如果想复杂点,还有id序号,创建时间,完成时间,工作详情等等,而这,就是编程逻辑。
当然,也可以看做是一个设计模式。
编程核心思路
被依赖的写在依赖的前面,无论是变量、方法、对象都是如此,代码有一条主要运行线路,自上而下,其余的分支通过方法、对象去组织
var a=1;
var b=2;
var c=a+b;
var d=()=>{};
var e=d();
var f={};
var g=f;
编程基本构成
最基础操作 :行为(可直接执行的数据) + 数据 如 Mov 0
位运算:与 或 非 取反
额外位运算:与或 异或
基础的存储数据方式:声明变量,变量存在类型(如 int a)
基础的数据类型:数字类型
额外的数据类型:文本类型(一个一个字符编码构成) 布尔类型(可以用数字 0 1 表示)
基础的数字操作 : 加 减 乘 除 求余
基本的文本操作:拼接 裁剪 索引
基本的集合操作:增加 删除 清空 索引
基本的编程流程结构:顺序 条件分支 循环
基本的程序开发流程:构思 -> 编码 -> 编译 ->链接 -> 执行
- 声明变量,赋值变量
- 基础数据类型定义(弱类型的实际上也有类型),数值,文本,布尔、集合
- 基础数学运算
- 基础字符/字符串处理
- 分支语句 if,else,switch case
- 循环语句 while,for
- 布尔运算 AND OR NOT
- 位运算
- 函数,子程序
- 类(OOP)
- 高阶函数(函数式)
编程的高层抽象
实现特定功能的代码片段:宏,函数,子程序,方法
实现数据存储的变量:字段,成员,属性(通过方法给字段赋值)
实现对特定数据进行归类的对象:类对象(包含属性+方法+字段,属性方法字段又分为共有和私有,无需实例化的则是静态字段、方法、属性)
编程的思维
编程最重要的就是思维,然后根据思维做出实现
纯函数
纯函数是指不依赖于且不改变它作用域之外的变量状态的函数
【译】JavaScript 中的“纯函数” - 十年踪迹的博客
https://www.h5jun.com/post/pure-function.html
纯函数
纯函数(PureFunction)是这样一种函数——输入输出数据流全是显式(Explicit)的。
显式(Explicit)的意思是,函数与外界交换数据只有一个唯一渠道——参数和返回值;函数从函数外部接受的所有输入信息都通过参数传递到该函数内部;函数输出到函数外部的所有信息都通过返回值传递到该函数外部。
非纯函数
如果一个函数通过隐式(Implicit)方式,从外界获取数据,或者向外部输出数据,那么,该函数就不是纯函数,叫作非纯函数(ImpureFunction)。
隐式(Implicit)的意思是,函数通过参数和返回值以外的渠道,和外界进行数据交换。比如,读取全局变量,修改全局变量,都叫作以隐式的方式和外界进行数据交换;比如,利用I/OAPI(输入输出系统函数库)读取配置文件,或者输出到文件,打印到屏幕,都叫做隐式的方式和外界进行数据交换。
引用透明
引用透明(ReferentialTransparent)的概念与函数的副作用相关,且受其影响。 如果程序中两个相同值的表达式能在该程序的任何地方互相替换,而不影响程序的动作,那么该程序就具有引用透明性。它的优点是比非引用透明的语言的语义更容易理解,不那么晦涩。纯函数式语言没有变量,所以它们都具有引用透明性。
五种编程思维
-
程序思维
程序思维是指创建出一套清晰明确的、计算机可以遵照执行的指令。
告诉一个人如何去排列扑克牌的顺序是非常简单的;但如果想让计算机去做这样的排序,你需要仔细想想怎么做。可一旦掌握了这种思维方式,你会发现计算机执行这个任务可比人快多了。 -
抽象思维
抽象思维是指找出相似点。用程序员的话来讲,就是找出看似不同事物间的一般性 (generality)。
在学习这个纳米学位的过程中,您会访问数百个优达学城的网页,让程序员单独去编写每一 个网页是不现实的。优达学城的程序员会借助“抽象”的力量来规避不必要的重复性工作。 -
系统思维
系统思维是指将大问题分解成多个小问题来解决。程序员在创建某个程序运行方式的计划时 (通常是在纸上进行的),就会使用这种思维方式。这个计划分解为对问题的宏观思考和决 策,以及程序中各模块协作解决问题的方法。如果这个解释不够明确,请不必担心!在纳米 学位结束之前,您会对系统思维的含义有更清晰的了解。 -
技术同理心 技术同理心(Technological empathy)有多种形式。例如,计算机同理心是指能够感同身 受的理解计算机是什么、计算机如何运行、计算机擅长做什么、不擅长做什么。
计算机、软件程序以及编写这些程序时所使用的编程语言都是工具。如果不了解这些工具的 基本工作方式,我们几乎无法编写出任何实质性的内容。 -
调试思维
调试思维是指一个系统化的过程,严格排查造成某个计算机程序无法正常运行的原因。某个计算机程序无法正常运行,其原因是某部分代码存在错误(也被称为“Bug”)。在编程 过程中出现这些错误是不可避免的,因此,每个优秀的程序员都有一套修改这些错误的系统化过程,通常如下:
- 收集证据(为什么程序无法正常运行)
- 形成观点(什么错误导致了这个问题)
- 测试观点(如果我的观点正确,怎样才能找到错误所在)
- 修正错误
编程领域
- I/O
- Net
- Native Desktop App
- ALogo
- Encypt/Decypt
- UI
- Animation
- UI Design
UI & Logic
一个按钮组件,通常会在点击的时候触发关联的点击事件处理函数,仅仅只有这个行为,而在处理函数里面做什么,是由业务和UI展示去决定,所以一般除非是比较简单的逻辑,都不应该简单的把UI和业务逻辑去挂钩,而是存在调用关系才是对的。
这种方式是不合理的代码组织方式,事件处理程序和业务逻辑直接挂钩,如果后续想做额外处理就需要额外调整
var btn1 = $("#btn1");
var form1 = $("#form1");
btn1.on("click",form1.submit);
所以,一般应该如下写法才是
var btn1 = $("#btn1");
var form1 = $("#form1");
btn1.on("click",function(event){
console.log("submit before");
form1.submit();
console.log("submit after");
});
常用抽象行为
- 增加数据
- 删除数据
- 修改数据
- 查询数据
- 处理数据
增加数据
- 能否增加重复数据
- 数据是否通过验证
删除数据
- 删除前判断数据是否存在
- 是物理删除还是逻辑删除(逻辑删除是加个 flag 表示已删除,实际仍然存在)
修改数据
- 修改后的数据是否通过验证
- 能否增加重复数据
- 如果不能重复,需要判断是否和自己之外的其他数据相同,需要排除自己
查询数据
- 根据筛选条件、指定排序、指定数据量查询数据
处理数据
查询数据和处理数据往往是在一块,更多的时候是查询出来的是原始数据,需要进行处理后使用,可以通过存储过程 ,视图等辅助处理
一个业务功能包含的内容
- UI
- 业务逻辑
- 验证逻辑
- 动画效果
- 辅助工具集
UI提供视图和事件的订阅和触发,事件的订阅是业务逻辑
业务逻辑包含常见的CRUD操作,每个操作里面对传入数据需要进行验证,返回值或者抛出异常
验证逻辑则是根据业务需要,验证数据是否符合要求,这里不是指业务逻辑函数内的验证,而是额外的验证,有反馈的
动画效果是UI上某些部分需要的效果,通常配合CSS来实现
辅助工具集是用于一些辅助性函数的定义
UI 依赖于业务逻辑,动画效果
业务逻辑只和后台交互,依赖于一些请求后台数据的对象,如ajax
验证逻辑则是用于验证数据是否正确,后台应该实现一样的一套逻辑
动画效果被UI依赖
辅助工具只能被依赖
//这是一个独立的业务逻辑模块,和ui的交互只有方法,这样ui怎么变都只是改ui,而不是改业务逻辑
var todoBL={
list:[],
add(item){//验证传入的参数是否正确},
edit(){},
delete(){}
}
//验证传入的
var todoValidator.add=(item){
if(item is not null){
return true;
}
}
一个对象包含的要素
一个对象包含的内容
- 属性
- 单值属性
1 ""
- 属性
{}
- 属性
[]
- 单值属性
- 方法
- 方法
action
- 事件
onClick/handleClick
- 周期方法
beforeAction afterAction
- 方法
SIT UAT PROD
英文缩写 | 英文 | 中文 |
---|---|---|
DEV | development | 开发 |
SIT | System Integrate Test | 系统整合测试(内测) |
UAT | User Acceptance Test | 用户验收测试 |
PET | Performance Evaluation Test | 性能评估测试(压测) |
SIM | simulation | 仿真 |
PRD/PROD | production | 产品/正式/生产 |
程序执行步骤
构建上下文
执行逻辑入口
先定义
后使用
var oA={
run:(){}
};
oA.run();
发表评论