当前位置: 首页 > news >正文

成都学校网站建设企业个人网站名称怎么取容易备案

成都学校网站建设企业,个人网站名称怎么取容易备案,小米公司网站前建设分析,小榄网站建设推广概述 在这一章节#xff0c;作者给出了一个戏剧演出团售票的示例#xff1a;剧目有悲剧#xff08;tragedy#xff09;和喜剧#xff08;comedy#xff09;#xff1b;为了卖出更多的票#xff0c;剧团则更具观众的数量来为下次演出打折扣#xff08;大致意思是这次的…概述 在这一章节作者给出了一个戏剧演出团售票的示例剧目有悲剧tragedy和喜剧comedy为了卖出更多的票剧团则更具观众的数量来为下次演出打折扣大致意思是这次的观众越多下次的票价越低 设计 采用JSON存储数据因为代码是用Javascript写的plays.json 存储剧目invoices.json存储账单 plays.json {hamlet: {name: Hamlet, type: tragedy},as-like: {name: As You Like It, type: comedy},othello: {name: Othello, type: tragedy} }invoices.json [{customer: BigCo,performances: [{playID: hamlet,audience: 55 },{playID: as-like,audience: 35},{playID: othello,audience: 40}] }]下面这个函数用于打印账单详情 function statement(invoice, plays) {let totalAmount 0;let volumeCredits 0;let result Statement for ${invoice.customer}\n;const format new Intl.NumberFormat(en-US, {style: currency,currency: USD,minimumFractionDigits: 2}).format;for (let perf of invoice.performances) {const play plays[perf.playID];let thisAmount 0;switch (play.type) {case tragedy:thisAmount 40000;if (perf.audience 30) {thisAmount 1000 * (perf.audience - 30);}break;case comedy:thisAmount 30000;if (perf.audience 20) {thisAmount 10000 500 * (perf.audience - 20);}thisAmount 300 * perf.audience;break;default:throw new Error(unknown type: ${play.type});}// add volume creditsvolumeCredits Math.max(perf.audience - 30, 0);// add extra credit for every ten comedy attendeesif (comedy play.type) volumeCredits Math.floor(perf.audience / 5);// print line for this orderresult ${play.name}: ${format(thisAmount/100)} (${perf.audience} seats)\n;totalAmount thisAmount;}result Amount owed is ${format(totalAmount/100)}\n;result You earned ${volumeCredits} credits\n;return result; }函数statement实现的打印账单的功能能正常工作但是其结构“不甚清晰”。对于这个几十行的代码我们要读懂、理解并不困难如果业务比较复杂、函数很长上百行时笔者在维护既有项目时见过2000多行的函数阅读代码就像是在考古再去阅读或者让其他人阅读要弄清逻辑确实需要花费一番功夫。 如果没有新的需求导入statement保持现状也可忍受 新的需求导入 要求输出部分以HTML的格式扩充新的剧目类型如历史剧、田园剧等…… 需求会源源不断的导入如果每次导入一个的需求都在statement函数中修改随着时间的推移statement函数将变得臃肿不堪、难以阅读和理解这也是我们工作中经常做的目的是懒省事儿需求来了在既有的函数中改改能实现功能就完事。 分解函数statement 提取amountFor函数for循环中的代码注意提取参数啊Performance、play提取playFor函数play参数不是for循环的变量而是计算出来的修改amountFor函数减去play参数volumeCredits累加变量提取volumeCreditsFor函数提取format函数格式化数据…… 具体过程参考《重构改善既有代码设计第二版》第一章 function statement(invoice, plays) {let result Statement for ${invoice.customer}\n;for (let perf of invoice.performances) {result ${playFor(perf).name}: ${usd(amountFor(perf))} (${perf.audience} s eats)\n;}result Amount owed is ${usd(totalAmount())}\n;result You earned ${totalVolumeCredits()} credits\n;return result;function totalAmount() {let result 0;for (let perf of invoice.performances) {result amountFor(perf);}return result;}function totalVolumeCredits() {let result 0;for (let perf of invoice.performances) {result volumeCreditsFor(perf);}return result;}function usd(aNumber) {return new Intl.NumberFormat(en-US, {style: currency,currency: USD,minimumFractionDigits: 2}).format(aNumber / 100);}function volumeCreditsFor(aPerformance) {let result 0;result Math.max(aPerformance.audience - 30, 0);if (comedy playFor(aPerformance).type) result Math.floor(aPerformance.audience / 5);return result;}function playFor(aPerformance) {return plays[aPerformance.playID];}function amountFor(aPerformance) {let result 0;switch (playFor(aPerformance).type) {case tragedy:result 40000;if (aPerformance.audience 30) {result 1000 * (aPerformance.audience - 30);}break;case comedy:result 30000;if (aPerformance.audience 20) {result 10000 500 * (aPerformance.audience - 20);}result 300 * aPerformance.audience;break;default:throw new Error(unknown type: ${playFor(aPerformance).type});}return result;} }拆分计算阶段与格式化阶段分离到两个文件…… 总结 一般来说重构早期的主要动力是尝试理解代码如何工作。通常我们需要先通读代码找到一些感觉然后再通过重构将这些感觉从脑海里搬回到代码中。清晰的代码更容易理解使你能够发现更深层次的设计问题从而形成积极正向的反馈环。 所谓重构refactoring是这样一个过程在不改变代码外在行为的前提下对代码做出修改以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法可以最大限度地减小整理过程中引入错误的概率。本质上说重构就是在代码写好之后改进它的设计。 有了重构以后工作的平衡点开始发生变化。设计不是在一开始完成的而是在整个开发过程中逐渐浮现出来。在系统构筑过程中我们需要学会如何不断改进设计。这个“构筑-设计”的反复互动可以让一个程序在开发过程中持续保有良好的设计。
http://www.hkea.cn/news/14470212/

相关文章:

  • 柳州企业网站开发平台缔客网络上海响应式网站建设
  • 北京装饰装修公司一键优化为什么不能100
  • 购物网站开发文档溧阳网站优化
  • 甘肃网站设计公司邯郸网站优化怎么做
  • 网站建设的发展趋势wordpress 多语言 切换
  • 网站建设的扩展性分析深圳网站制作需要多少钱
  • 微信微网站统计西安做网站公司哪家好
  • 通化网站建设宁波专业优化网站制作公司
  • 图书馆网站建设报告工厂管理培训课程
  • 山东建设银行官方网站域名批量查询系统
  • 教做网站的学校微信怎么建小网站
  • 黄山找人做网站深圳建站公司推荐
  • 新手学网站建设视频教程共30课高清版wordpress会员免费插件
  • 国内外电子政务网站建设差距网站建设中主页指的是
  • 如何自己做网站 开直播烟台建设公司网站
  • 互动型网站模板网站的下拉列表怎么做
  • 网站推广策略成功的案例网站开发html书籍下载
  • 招聘网站怎么投自己做的简历数据网站建设多少钱
  • 手机网站大全观看阿德采购网
  • wap网站制作哪家好郑州做网站推广资讯
  • 专业网站 建设公司怎么把网站做成自适应
  • 滕州建网站哪家好免费自动取名100个
  • 东莞南城网站设计安徽省工程造价信息网
  • 厦门专业网站设计公司温州科技网站建设
  • 建站平台功能结构图seo外链代发
  • 肇庆网站制作设计网站建设的意义和目的
  • 网站设置密码进入led 网站建设
  • 网站建设创新能力痛点网络活动策划方案
  • 门户网站系统开发廊坊做网站优化的公司
  • 顺德做网站的公司肃宁哪里建网站