从5行代码开始,体验编程的演进之旅
讲师:乌鸦哥
让痛点推动学习,让需求催生解决方案!
生活中最实用的编程项目!
let money = 1000;
console.log("收入1000元,工资");
console.log("余额:1000元");
运行结果:
收入1000元,工资
余额:1000元
这也太简单了!
let balance = 0;
// 收入
balance = balance + 5000;
console.log("收入5000元,工资");
console.log("余额:" + balance + "元");
// 支出
balance = balance - 1200;
console.log("支出1200元,房租");
console.log("余额:" + balance + "元");
还行,但有点重复...
let balance = 0;
// 第1笔
balance = balance + 5000;
console.log("收入5000元,工资");
console.log("余额:" + balance + "元");
// 第2笔
balance = balance - 1200;
console.log("支出1200元,房租");
console.log("余额:" + balance + "元");
// 第3笔
balance = balance - 300;
console.log("支出300元,买菜");
console.log("余额:" + balance + "元");
// ... 还有27笔,都是重复的代码!
学员感受:天哪,这样下去会疯掉!
如果老板让你记录一整年的账单...
365笔记录,你还愿意复制粘贴吗?
肯定有更好的办法!
let balance = 0;
// 函数:记录收入
function addIncome(amount, description) {
balance = balance + amount;
console.log("收入" + amount + "元," + description);
console.log("余额:" + balance + "元");
}
// 函数:记录支出
function addExpense(amount, description) {
balance = balance - amount;
console.log("支出" + amount + "元," + description);
console.log("余额:" + balance + "元");
}
// 一行代码搞定一笔记录
addIncome(5000, "工资");
addExpense(1200, "房租");
addExpense(300, "买菜");
addIncome(500, "兼职");
addExpense(200, "交通");
输出结果:
收入5000元,工资
余额:5000元
支出1200元,房租
余额:3800元
支出300元,买菜
余额:3500元
...
哇!函数太神奇了!
函数 = 给常用操作起个名字
就像手机里的快捷键一样
比喻:就像遥控器的按钮,按一下执行一套动作!
function getCurrentDate() {
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
let day = now.getDate();
// 月份小于10要补0
if (month < 10) month = "0" + month;
if (day < 10) day = "0" + day;
return year + "-" + month + "-" + day;
}
// 还要处理:
// - 计算两个日期相差多少天
// - 判断是不是月末
// - 处理闰年
// ... 又是几十行复杂代码
学员感受:日期处理好复杂!能不能用现成的?
肯定有程序员已经解决过日期问题!
为什么要自己重新写?
包(Package)闪亮登场!
// 在命令行运行一下
npm install moment
然后在代码中使用:
// 导入moment包
const moment = require('moment');
function addIncome(amount, description) {
// 用moment处理日期,一行搞定!
let date = moment().format('YYYY-MM-DD');
balance = balance + amount;
console.log(date + " 收入" + amount + "元," + description);
}
用别人的包太爽了!
包 = 别人写好的工具箱
就像去超市买现成的调料
比喻:就像用现成的轮子,不用自己造!
// app.js 文件变得超级长
let balance = 0;
let records = [];
// 账户功能
function addIncome() { ... }
function addExpense() { ... }
// 统计功能
function showSummary() { ... }
function getMonthlyReport() { ... }
// 报表功能
function exportToExcel() { ... }
function generateChart() { ... }
// 预算功能
function setBudget() { ... }
function checkBudget() { ... }
// ... 200多行代码都挤在一个文件里
代码又乱了!找个函数要翻半天!
我们需要把相关的功能分开放
就像整理房间,把东西分类
模块化闪亮登场!
记账项目/
├── app.js ← 主程序(很短)
├── modules/ ← 我们的模块
│ ├── account.js ← 账户管理
│ ├── statistics.js ← 统计计算
│ └── reports.js ← 报表生成
└── node_modules/ ← 外部包
└── moment/ ← 日期处理包
// 导入我们的模块
const account = require('./modules/account');
const statistics = require('./modules/statistics');
// 使用模块功能
account.addIncome(5000, '工资');
account.addExpense(1200, '房租');
account.addExpense(300, '买菜');
// 查看统计
statistics.showSummary();
// 只管账户相关的事情
let balance = 0;
function addIncome(amount, description) {
balance += amount;
console.log(`收入${amount}元,${description}`);
}
function addExpense(amount, description) {
balance -= amount;
console.log(`支出${amount}元,${description}`);
}
// 导出功能给别人用
module.exports = {
addIncome,
addExpense
};
整个项目清清楚楚!太舒服了!
模块 = 把相关功能放一起
就像整理衣柜,同类衣服放一个格子
比喻:就像乐高积木,不同形状组装成大作品!
| 阶段 | 问题 | 解决方案 |
|---|---|---|
| 简单开始 | 功能简单 | 直接写代码 |
| 功能增加 | 代码重复 | 👉 使用函数 |
| 复杂功能 | 实现困难 | 👉 使用别人的包 |
| 项目变大 | 代码混乱 | 👉 模块化整理 |
消除重复
遥控器按钮
解决复杂
现成的轮子
整理代码
分类整理
记住:程序员都是懒人,能偷懒就偷懒!
编程金句:
好程序员不是写代码最多的,是写重复代码最少的!
下节课我们用这些思想搭建真正的网站