写出漂亮代码的七种方法

首先我想说明我本文阐述的是纯粹从美学的角度来写出代码,而非技术、逻辑等。以下为写出漂亮代码的七种方法:

    1.尽快结束 if 语句

    例如下面这个JavaScript语句,看起来就很恐怖:

 function findShape(flags, point, attribute, list) {
    if(!findShapePoints(flags, point, attribute)) {
        if(!doFindShapePoints(flags, point, attribute)) {
            if(!findInShape(flags, point, attribute)) {
                if(!findFromGuide(flags,point) {
                    if(list.count() > 0 && flags == 1) {
                          doSomething();
                    }
                }
            }
       }
    }
  }

    但如果这么写就好看得多:

 function findShape(flags, point, attribute, list) {
    if(findShapePoints(flags, point, attribute)) {
        return;
    }

    if(doFindShapePoints(flags, point, attribute)) {
        return;
    }

    if(findInShape(flags, point, attribute)) {
        return;
    }

    if(findFromGuide(flags,point) {
        return;
    }

    if (!(list.count() > 0 && flags == 1)) {
        return;
    }

    doSomething();

 }

    你可能会很不喜欢第二种的表述方式,但反映出了迅速返回if值的思想,也可以理解为:避免不必要的else陈述。

    2.如果只是简单的布尔运算(逻辑运算),不要使用if语句

    例如:

 function isStringEmpty(str){
    if(str === "") {
        return true;
    }
    else {
        return false;
    }
 }

    可以写为:

 function isStringEmpty(str){
    return (str === "");
 }

    3.使用空白,这是免费的

    例如:

 function getSomeAngle() {
    // Some code here then
    radAngle1 = Math.atan(slope(center, point1));
    radAngle2 = Math.atan(slope(center, point2));
    firstAngle = getStartAngle(radAngle1, point1, center);
    secondAngle = getStartAngle(radAngle2, point2, center);
    radAngle1 = degreesToRadians(firstAngle);
    radAngle2 = degreesToRadians(secondAngle);
    baseRadius = distance(point, center);
    radius = baseRadius + (lines * y);
    p1["x"] = roundValue(radius * Math.cos(radAngle1) + center["x"]);
    p1["y"] = roundValue(radius * Math.sin(radAngle1) + center["y"]);
    pt2["x"] = roundValue(radius * Math.cos(radAngle2) + center["y"]);
    pt2["y"] = roundValue(radius * Math.sin(radAngle2) + center["y");
    // Now some more code
 }

    很多开发者不愿意使用空白,就好像这要收费一样。我在此并非刻意地添加空白,粗鲁地打断代码的连贯性。在实际编写代码的过程中,会很容易地发现在什么地方加入空白,这不但美观而且让读者易懂,如下:

 function getSomeAngle() {
    // Some code here then
    radAngle1 = Math.atan(slope(center, point1));
    radAngle2 = Math.atan(slope(center, point2));

    firstAngle = getStartAngle(radAngle1, point1, center);
    secondAngle = getStartAngle(radAngle2, point2, center);

    radAngle1 = degreesToRadians(firstAngle);
    radAngle2 = degreesToRadians(secondAngle);

    baseRadius = distance(point, center);
    radius = baseRadius + (lines * y);

    p1["x"] = roundValue(radius * Math.cos(radAngle1) + center["x"]);
    p1["y"] = roundValue(radius * Math.sin(radAngle1) + center["y"]);

    pt2["x"] = roundValue(radius * Math.cos(radAngle2) + center["y"]);
    pt2["y"] = roundValue(radius * Math.sin(radAngle2) + center["y");
    // Now some more code
 }

    4.不要使用无谓的注释

    无谓的注释让人费神,这实在很讨厌。不要标出很明显的注释。在以下的例子中,每个人都知道代码表达的是“students id”,因而没必要标出。

 function existsStudent(id, list) {
    for(i = 0; i < list.length; i++) {
       student = list[i];

       // Get the student's id
       thisId = student.getId();

       if(thisId === id) {
           return true;
       }
    }
    return false;
 }

5.不要在源文件中留下已经删除的代码,哪怕你标注了

    如果你使用了版本控制,那么你就可以轻松地找回前一个版本的代码。如果别人大费周折地读了你的代码,却发现是要删除的代码,这实在太恨人了。

 //function thisReallyHandyFunction() {
//      someMagic();
//      someMoreMagic();
//      magicNumber = evenMoreMagic();
//      return magicNumber;
//}

    6.不要有太长的代码

    看太长的代码实在太费劲,尤其是代码本身的功能又很小。如下:

 public static EnumMap getGroupCategoryDistribution(EnumMap sizes, int groups) {
        EnumMap categoryGroupCounts = new EnumMap(Category.class);

        for(Category cat : Category.values()) {
            categoryGroupCounts.put(cat, getCategoryDistribution(sizes.get(cat), groups));
        }

    我并不是说非要坚持70个字符以内,但是一个比较理想的长度是控制在120个字符内。如果你把代码发布在互联网上,用户读起来就很困难。

    7.不要在一个功能(或者函数内)有太多代码行

    我的一个老同事曾经说Visual C++很 臭,因为它不允许你在一个函数内拥有超过10,000行代码。我记不清代码行数的上限,不知道他说的是否正确,但我很不赞成他的观点。如果一个函数超过了 50行,看起来有多费劲你知道么,还有没完没了的if循环,而且你还的滚动鼠标前后对照这段代码。对我而言,超过35行的代码理解起来就很困难了。我的建 议是超过这个数字就把一个函数代码分割成两个。

转载于:https://www.cnblogs.com/flying-roc/archive/2012/03/21/2410398.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML 页面的生命周期、HTML 事件

From&#xff1a;https://blog.csdn.net/WuLex/article/details/101016936 1、页面生命周期 HTML页面的生命周期有以下三个重要事件&#xff0c;每个事件都有特定的用途 DOMContentLoaded &#xff1a; 浏览器已经完全加载 HTML&#xff0c;DOM 树已经构建完毕&#xff0c;js …

腾讯再次海选AI项目,1500进40,医疗零售机器人成新风向

雷刚 发自 凹非寺 量子位 报道 | 公众号 QbitAI一年一度风向标&#xff0c;腾讯又一次海选AI项目。去年第一期腾讯AI加速器结业后&#xff0c;鹅厂就马不停蹄开启了第二期报名&#xff0c;而且这一次报名企业更多、竞争更激烈、最终录取概率甚至不到3%。第二期AI加速器通过初试…

windows2000 日志

引用&#xff1a;http://os.51cto.com/art/201111/302889.htm windows 2000的日志文件通常有应用程序日志&#xff0c;安全日志、系统日志、DNS服务器日志、FTP日志、WWW日志等等&#xff0c;可能会根据服务器所开启的服务不同。当我们用流光探测时&#xff0c;比如说IPC探测&a…

The Human Touch 将人工智能和机器人用于病人工作的实际和伦理意义

来源&#xff1a;IEEE电气电子工程师学会摘要&#xff1a;我们生活在一个科幻小说可以很快成为科学事实的时代。在一代人的时间里&#xff0c;互联网已经从技术奇迹变成了实用工具&#xff0c;移动电话重新定义了我们的交流方式。我们生活在一个科幻小说可以很快成为科学事实的…

渗透测试 ( 0 ) --- XSS、CSRF、文件上传、文件包含、反序列化漏洞

漏洞数据库&#xff1a;https://www.exploit-db.com/google-hacking-database 1、渗透测试 实用 浏览器插件 chrome、edge 插件&#xff1a;搜索 cookie&#xff0c;安装 cookie editor&#xff0c;打开插件&#xff0c;可以 导出 cookie HackBar &#xff1a;Hackbar是网络安…

设为首页、加入收藏 兼容代码

一般写法&#xff1a;<a href"javascript:window.external.AddFavorite(window.location.href,document.title)">加入收藏</a><a href"javascript:void()" onclick"this.style.behaviorurl(#default#homepage);this.setHomePage(locat…

专访盛大创始人陈天桥:未来的杀手级应用必将诞生于脑科学

翻译丨于波 校对丨其奇来源丨Medium 神经科技初见陈天桥&#xff0c;他穿着带有花纹的短袖衬衫&#xff0c;休闲款式的蓝色牛仔裤&#xff0c;迷彩色的运动鞋&#xff0c;仿佛是个享受退休生活的人。过去的他可不是这样。1999年&#xff0c;陈天桥创建盛大游戏公司&#xff0c…

动手解决jar转txt软件的一个缺陷

代码&#xff1a; import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReade…

渗透测试 ( 2 ) --- 渗透测试系统、靶机、GoogleHacking、kali工具

操作系统&#xff1a;https://zhuanlan.zhihu.com/p/162865015 1、基于 Windows、Linux、Android 的渗透测试系统 1.1 基于 Linux 的系统 Kali&#xff1a;https://www.kali.org/get-kali/Parrot Security OS&#xff1a;Parrot Securitybackbox&#xff1a;https://www.backbo…

清华发布《中国AI发展报告2018》:中科院系统AI论文产出全球第一

来源&#xff1a;大数据文摘人工智能正成为全球性话题&#xff0c;各国的AI人才争夺战也正愈演愈烈。那么目前&#xff0c;人工智能在中国的发展条件如何&#xff0c;中国距离成为真正的人工智能强国到底还有多远&#xff1f;基于此&#xff0c;7月13日&#xff0c;《中国人工智…

单例模式小记【原创】

中国的历史上很少出现两个皇帝并存的时期&#xff0c;是有&#xff0c;但不多&#xff0c;那我们就认为皇帝是个单例模式&#xff0c;在这个场景中&#xff0c;有皇帝&#xff0c;有大臣&#xff0c;大臣是天天要上朝参见皇帝的&#xff0c;今天参拜的皇帝应该和昨天、前天的一…

渗透测试 ( 3 ) --- Metasploit Framework ( MSF )

白嫖 &#xff1a;https://zhuanlan.zhihu.com/p/449836479&#xff1a;http://t.zoukankan.com/hxlinux-p-15787814.html&#xff1a;https://www.52pojie.cn/thread-1586222-1-1.html Metasploit Pro 英文文档&#xff1a;https://docs.rapid7.com/metasploit/ Metasploit P…

工业4.0进行时:工业机器人为何能够快速爆发?

来源&#xff1a;资本实验室摘要&#xff1a;聚焦前沿科技创新与传统产业升级自George Devol于1961发明第一台可编程工业机器人“Unimate”以来&#xff0c;工业机器人产业已经走过了几十年的历史。到了2000年&#xff0c;全球约有74.25万台工业机器人。其中&#xff0c;超过一…

CRITICAL_SECTION 学习

// Critsetion.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <Windows.h> #include <iostream> #include <process.h> using namespace std;CRITICAL_SECTION g_cs; char name[]"zhangdongsheng";unsigned __std…

渗透测试 ( 4 ) --- Meterpreter 命令详解

From&#xff1a;https://blog.csdn.net/weixin_45605352/article/details/115824811 <<Web 安全攻防(渗透测试实战指南)>> 1、初识 Meterpreter 1.1.什么是 Meterpreter Meterpreter 是 Metasploit 框架中的一个扩展模块&#xff0c;作为溢出成功以后的攻击载荷使…

深度:中国车企遭遇最大危机!末尾淘汰赛开始【附下载】| 智东西内参

来源&#xff1a;智东西摘要&#xff1a;靠“合资”起步的中国自主品牌汽车走到了成熟期的转折点&#xff0c;面临的形势极为严峻。中国汽车自主品牌30多年的发展过程&#xff0c;从闭门造车到合资建厂&#xff0c;再到民营崛起&#xff0c;正在逐渐走向开放。经国务院批准&…

行动依旧

http://www.gamengines.com/simple/?t549.html 转载于:https://www.cnblogs.com/vilyLei/archive/2012/03/29/2424107.html

渗透测试 ( 5 ) --- 扫描之王 nmap、渗透测试工具实战技巧合集

Nmap 官方文档 ( 中文文档是 Nmap 版本4.50&#xff0c;英文文档是最新的 )&#xff1a; 英文文档&#xff1a;https://nmap.org/book/man.html中文文档&#xff1a;https://nmap.org/man/zh/index.html#man-description官方 Nmap 项目指南 &#xff1a;https://nmap.org/book…

OSI、TCP/IP or Five-layer(Protocols Use) Model

转载于:https://www.cnblogs.com/michael-shan/archive/2012/03/31/6649681.html

央视深入报道,国内主流芯片真实水平如何?

来源&#xff1a;芯师爷摘要&#xff1a; 站在风口上&#xff0c;猪都会飞&#xff01;——用这来概括当下国内芯片领域再恰当不过了。自中兴事件之后&#xff0c;很多创业者纷纷将商业计划的关键字调整为“芯片”。与此同时&#xff0c;投资者也将目光转移至AI芯片、自动驾驶芯…