WebKit代码规范

缩进

  1. 使用空格而不是Tab。Tab只应该出现在有语义的文件里,如makefile文件。
  2. 缩进大小为4个空格。
    正确:

     

    int main()
    {
        return 0;
    }

    错误:

    int main()
    {
            return 0;
    }
  3. 在头文件中,命名空间中的代码应该被缩进。
    正确:

     

    // Document.h
    namespace WebCore {
     
        class Document {
            Document();
            ...
        };
     
    } // namespace WebCore

    错误:

    // Document.h
     
    namespace WebCore {
    class Document {
     
        Document();
     
        ...
     
    };
     
    } // namespace WebCore
  4. 在实现文件中,命名空间中的代码不应该缩进。
    正确:

     

    // Document.cpp
    namespace WebCore {
    Document::Document()
    {
        ...
    }
    } // namespace WebCore

    错误:

    // Document.cpp
    namespace WebCore {
     
        Document::Document()
        {
            ...
        }
     
    } // namespace WebCore
  5. case标签应该和switch对齐,case下的语句要缩进。
    正确:

     

    switch (condition) {
    case fooCondition:
    case barCondition:
        i++;
        break;
    default:
        i--;
    }

    错误:

    switch (condition) {
        case fooCondition:
        case barCondition:
            i++;
            break;
        default:
            i--;
    }
  6. 当同一层面的布尔表达式跨多个行时,布尔操作符应该放在行首而不是后面。
    正确:

     

    return attr->name() == srcAttr
        || attr->name() == lowsrcAttr
        || (attr->name() == usemapAttr && attr->value().domString()[0] != '#');

    错误:

    return attr->name() == srcAttr ||
        attr->name() == lowsrcAttr ||
        (attr->name() == usemapAttr && attr->value().domString()[0] != '#');

空格

  1. 一元操作符前不加空格。
    正确:

     

    i++;

    错误:

    i ++;
  2. 二元与三元操作符前后应该加上空格。
    正确:

     

    y = m * x + b;
    f(a, b);
    c = a | b;
    return condition ? 1 : 0;

    错误:

    y=m*x+b;
    f(a,b);
    c = a|b;
    return condition ? 1:0;
  3. 控制语句与圆括号之间要加空格。
    正确:

     

    if (condition)
        doIt();

    错误:

    if(condition)
        doIt();
  4. 函数调用时,函数名和圆括号之间、圆括号与其内容之间不留空格。
    正确:

     

    f(a, b);

    错误:

    f (a, b);
    f( a, b );

换行

  1. 每个语句占用一行。
    正确:

     

    x++;
    y++;
    if (condition)
        doIt();

    错误:

    x++; y++;
    if (condition) doIt();
  2. else关键字应该和前面大括号在一行。
    正确:

     

    if (condition) {
        ...
    } else {
        ...
    }

    错误:

    if (condition) {
        ...
    }
    else {
        ...
    }
  3. 当前一个if语句被return语句终止时,else if语句应该写成多个if语句的形式。
    正确:

     

    if (condition) {
        ...
        return someValue;
    }
    if (condition) {
        ...
    }

    错误:

    if (condition) {
        ...
        return someValue;
    } else if (condition) {
        ...
    }

大括号

  1. 行数定义:每个大括号占用一行。
    正确:

     

    int main()
    {
        ...
    }

    错误:

    int main() {
        ...
    }
  2. 其它大括号:左括号放在前一条语句之后,右括号单独占用一行。
    正确:

     

    class MyClass {
        ...
    };
     
    namespace WebCore {
        ...
    }
     
    for (int i = 0; i < 10; i++) {
        ...
    }

    错误:

    class MyClass
    {
        ...
    };
  3. 仅有一行的条件控制语句不使用大括号。
    正确:

     

    if (condition)
        doIt();

    错误:

    if (condition) {
        doIt();
    }
  4. 条件子句为空的情况下,大括号不能省略。
    正确:

     

    for ( ; current; current = current->next) { }

    错误:

    for ( ; current; current = current->next);

Null,False和0

  1. C++语言中,空指针被写成0,而在C语言中,空指针被写成NULL。在Objective-C和Objective-C++中,使用nil表示一个空Objective-C对象。
  2. C和C++的bool值应该被写作true和false。Objective-C的BOOL值则用YES和NO表示。
  3. 检查真/假空/非空以及零/非零不应该使用等式。
    正确:

     

    if (condition)
        doIt();
     
    if (!ptr)
        return;
     
    if (!count)
        return;

    错误:

    if (condition == true)
        doIt();
     
    if (ptr == NULL)
        return;
     
    if (count == 0)
        return;
  4. 在Objective-C中,实例变量自动被初始化为0,不要再初始化函数中额外的初始化为nil或NO。

命名

  1. 采用骆驼命名法(CamelCase,依靠单词的大小写拼写复合词的做法)。class,struct,protocol,namespace名字的第一个字母大写;变量和函数名的第一个单词小写;缩写应完全大写。
    正确:

     

    struct Data;
    size_t bufferSize;
    class HTMLDocument;

    错误:

    struct data;
    size_t buffer_size;
    class HtmlDocument;
  2. 使用完整的单词,除非特殊情况下缩写更规范和更容易理解。
    正确:

     

    size_t characterSize;
    size_t length;
    short tabIndex; // more canonical

    错误:

    size_t charSize;
    size_t len;
    short tabulationIndex; // bizarre
  3. C++中类的数据成员采用“m_”前缀。
    正确:

     

    class String {
        ...
        short m_length;
    };

    错误:

    class String {
        ...
        short length;
    };
  4. Objective-C实例变量采用“_”作为前缀。
    正确:

     

    @class String
        ...
        short _length;
    @end

    错误:

    @class String
        ...
        short length;
    @end
  5. 布尔变量前加上is或者did之类的前缀。
    正确:

     

    bool isValid;
    bool didSendData;

    错误:

    bool valid;
    bool sentData;
  6. setter方法前使用set开头,而在getter方法中采用“裸字”。setter和getter方法的命名应该和需要存储的变量相匹配。
    正确:

     

    void setCount(size_t); // sets m_count
    size_t count(); // returns m_count

    错误:

    void setCount(size_t); // sets m_theCount
    size_t getCount();
  7. 在函数名字中采用说明性的动词。
    正确:

     

    bool convertToASCII(short*, size_t);

    错误:

    bool toASCII(short*, size_t);
  8. 在函数的声明中丢弃无意义的参数变量名。
    正确:

     

    void setCount(size_t);

    错误:

    void setCount(size_t count);
  9. Objective-C的方法命名应遵循Cocoa命名规则——读起来像短语,并且each piece of the selector should start with a lowercase letter and use intercaps(没看懂:()。
  10. Enum members should user InterCaps with an initial capital letter。(也没看懂,就是这个InterCaps不知道什么意思)。
  11. 常量优先使用#define,宏优先使用inline函数。
  12. #defined定义的常量的所有字母都大写,单词间用下划线分隔。
  13. 对于展开为函数调用或者其它非常量计算的宏:命名方法和函数一致,并且不管有没有参数都应该以一对圆括号结束(一些特殊的宏例外,如ASSERT)。注意在这种情况,采用inline函数代替宏也许是更好的办法。
    正确:

     

    #define WBStopButtonTitle() /
            NSLocalizedString(@"Stop", @"Stop button title")

    错误:

    #define WB_STOP_BUTTON_TITLE /
            NSLocalizedString(@"Stop", @"Stop button title")
     
    #define WBStopButtontitle /
            NSLocalizedString(@"Stop", @"Stop button title")
  14. #ifndef,#define“头文件卫士”应该严格按照文件名来命名(大小写也要一致),将文件名中的“.”替换成“_”。
    正确:

     

    // HTMLDocument.h
    #ifndef HTMLDocument_h
    #define HTMLDocument_h

    错误:

    // HTMLDocument.h
    #ifndef _HTML_DOCUMENT_H_
    #define _HTML_DOCUMENT_H_

其它标点

  1. C++类的构造函数应该初始化所有成员变量。每个成员变量(以及父类)都要进行缩进,并且各占一行,每行都使用冒号和逗号开始。
    正确:

     

    MyClass::MyClass(Document* doc)
        : MySuperClass()
        , m_myMember(0)
        , m_doc(doc)
    {
    }
     
    MyOtherClass::MyOtherClass()
        : MySuperClass()
    {
    }

    错误:

    MyClass::MyClass(Document* doc) : MySuperClass()
    {
        m_myMember = 0;
        m_doc = doc;
    }
     
    MyOtherClass::MyOtherClass() : MySuperClass() {}
  2. 非C++代码中的指针类型——类型和*之间必须有空格(*尽可能靠近后面的标志符)。
  3. C++代码中的指针和引用类型——类型和*或&之间没有空格。
    正确:

     

    Image* SVGStyledElement::doSomething(PaintInfo& paintInfo)
    {
        SVGStyledElement* element = static_cast(node());
        const KCDashArray& dashes = dashArray();

    错误:

    Image *SVGStyledElement::doSomething(PaintInfo &paintInfo)
    {
        SVGStyledElement *element = static_cast(node());
        const KCDashArray &dashes = dashArray();

#include语句

  1. 所有文件必须首先#include “config.h”。
  2. 紧跟”config.h”之后应该包含主头文件,例如,Node.cpp应该在包含其它头文件前包含Node.h。这将保证每一个头文件的完整性会经过测试,不依赖于其它任何头文件就可以通过编译。
  3. 其它所有#include语句应该以一定顺序给出(区分大小写,可利用命令行工具或编辑器的排序功能),不要煞费苦心的以一定的逻辑排序。
豌豆代理(又称豌豆 IP)是一款一站式国内代理 IP 服务平台,主打高匿名、低延迟、高可用的 IP 资源,支持 HTTP/HTTPS/SOCKS5 协议,适配 Windows、Mac、Android、iOS 多平台。 多类型 IP 资源与高覆盖节点 提供动态住宅 IP、静态独享 IP、数据中心 IP,覆盖全国 200 + 城市,可用率 99%+;支持省市精准选择或全国混拨,适配不同业务合规与稳定性需求。 使用:在客户端 “节点 / 线路” 页,按城市 / 类型筛选,一键连接目标 IP,适合爬虫、电商多账号运营等场景。 秒级 IP 切换与灵活调度 支持手动一键切换、秒级动态切换(切换速度低至 100ms)、定时切换(自定义时长),并自动过滤重复 IP,避免重复使用导致风险。 使用:在 “设置” 中开启 “自动切换” 并设时间间隔,或按 Ctrl+Q 快捷键一键换 IP,适配反爬虫、批量测试等高频切换场景。 全协议支持与多端适配 兼容 HTTP/HTTPS/SOCKS5 主流代理协议,可对接浏览器、爬虫脚本、客户端软件;支持 Windows、Mac、安卓、iOS 多端同步使用,跨设备无缝切换。 使用:在客户端 “协议设置” 选择对应协议,生成代理地址与端口,直接填入目标软件即可生效。 隐私安全与数据加密 自研传输加密技术保护数据传输,搭配高匿名 IP 隐藏真实地址,同时支持自动清除 Cookie / 缓存,降低隐私泄露与追踪风险。 使用:在 “安全设置” 中开启 “数据加密” 与 “自动清理缓存”,公共 WiFi 环境下优先启用,提升隐私防护等级。 智能筛选与稳定网络优化 系统自动筛选低延迟、高可用 IP,过滤失效 / 重复地址;依托自建纯净机房与独享带宽,搭配 BGP 多线接入,保障连接稳定性与速度。 使用:无需手动配置,客户端默认智能匹配合适节点,复杂网络环境可在 “网络
在网络高速发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,商家只能以用户为导向,以商品的持续创新作为商家最重要的事项。 在新发展的时代,人们对幼儿资源互助共享平台越来越重视,才能实现幼儿资源互助共享平台的有效发挥,本文将通过幼儿资源互助共享平台的信息,分析在日常生活中对幼儿资源互助共享平台存在哪些问题探讨出进一步提升效率,管理能力的对策。 系统采用了Java技术,将所有模块采用以浏览器交互的模式,选择MySQL作为系统的数据库,来进行系统的设计。基本实现了幼儿资源互助共享平台应有的主要功能模块,本系统有管理员:首页、个人中心、用户管理、卖家管理、咨询师管理、萌宝信息管理、幼儿知识管理、保姆推荐管理、音频资源管理、二手商品管理、商品分类管理、资源分类管理、交流论坛、系统管理,用户;首页、个人中心、萌宝信息管理、保姆推荐管理、音频资源管理,卖家;首页、个人中心、二手商品管理、订单管理,咨询师;首页、个人中心、幼儿知识管理,前台首页;首页、萌宝信息、幼儿知识、保姆推荐、音频资源、二手商品、交流论坛、个人中心、后台管理、购物车等功能。 对系统进行测试后,改善了程序逻辑和代码。同时确保系统中所有的程序都能正常运行,所有的功能都能操作,本系统的开发获取幼儿资源互助共享平台信息能够更加方便快捷,同时也使幼儿资源互助共享平台信息变的更加系统化、有序化。系统界面较友好,易于操作。
### WebKit 代码格式规范和最佳实践 #### HTML 部分 为了确保HTML文档具有良好的结构并易于维护,在编写时应遵循W3C标准。虽然并非所有的代码都能达到百分之百合规的程度,但通过使用W3C校验工具测试标记能够显著提升网站的质量[^1]。 ```html <!-- 正确的做法 --> <div class="example"> <!-- 内容 --> </div> ``` #### CSS部分 采用CSS精灵技术(Sprites)作为优化手段之一,可以有效降低HTTP请求次数从而加快网页加载速度。此方法被广泛认为是提高性能的最佳实践措施[^2]。 ```css /* 使用sprites的例子 */ .example { background-image: url(images/sprite.png); } ``` #### JavaScript部分 针对JavaScript编程而言,保持清晰易懂的语法至关重要。例如避免复杂的匿名函数嵌套形式;另外需要注意的是由于JS特有的自动插入分号机制可能导致意外情况发生因此建议显式地加上每条语句后的分号以防止潜在问题的发生[^3]。 ```javascript // 推荐的方式定义函数 function exampleFunction() { // 函数体... } // 显示声明变量并赋初值 let variableName = value; ``` 当处理Vue.js框架下的数据绑定表达式时,应当把较为复杂运算逻辑转移到计算属性内完成而非直接放在模板里,这样不仅提高了代码可读性和重用率同时也更利于后期维护工作开展[^4]。 ```vue <template> <p>{{ normalizedFullName }}</p> <!-- 绑定到计算属性 --> </template> <script> export default { data() { return { fullName: 'john doe' } }, computed: { normalizedFullName() { return this.fullName .split(' ') .map(word => word.charAt(0).toUpperCase() + word.slice(1)) .join(' '); } } }; </script> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值