Android开发简要编码规范

请使用 UTF-8 格式来查看代码,避免出现中文乱码。
至于注释应该使用中文还是英文,请自己行决定,根据公司或项目的要求而定,推荐使用英文。

1. 整理代码

  • 1.1. Java 代码中不允许出现警告,无法消除的警告要用 @SuppressWarnings。
  • 1.2. 去掉无用的包、方法、变量等,减少僵尸代码。
  • 1.3. 使用 Lint 工具来查看并消除警告和错误。
  • 1.4. 使用 Ctrl+Shift+F 来格式化代码,然后再进行调整。
  • 1.5. 使用 Ctrl+Shift+O 来格式化 Import 包。

2. 命名规则

2.1. 基本原则

  • 2.1.1. 变量,方法,类命名要表义,严格禁止使用 name1, name2 等命名。
  • 2.1.2. 命名不能太长,适当使用简写或缩写。(最好不要超过 25 个字母)
  • 2.1.3. 方法名以小写字母开始,以后每个单词首字母大写。
  • 2.1.4. 避免使用相似或者仅在大小写上有区别的名字。
  • 2.1.5. 避免使用数字,但可用 2 代替 to,用 4 代替 for 等,如 go2Clean。

2.2. 类、接口

  • 2.2.1. 所有单词首字母都大写。使用能确切反映该类、接口含义、功能等的词。一般采用名词。
  • 2.2.2. 接口带 I 前缀,或able, ible, er等后缀。如ISeriable。

2.3. 字段、常量

  • 2.3.1. 成员变量以 m 开头,静态变量以 s 开头,如 mUserName, sInstance。
  • 2.3.2. 常量全部大写,在词与词之前用下划线连接,如 MAX_NUMBER。
  • 2.3.3. 代码中禁止使用硬编码,把一些数字或字符串定义成常用量。
  • 2.3.4. 对于废弃不用的函数,为了保持兼容性,通常添加 @Deprecated

3. 注释

请参考 下面示例类的注释。

4. Class 内部顺序和逻辑

  • 4.1. 每个 class 都应该按照一定的逻辑结构来排列基成员变量、方法、内部类等, 从而达到良好的可读性。
  • 4.2. 总体上来说,要按照先 public, 后 protected, 最后 private, 函数的排布 也应该有一个逻辑的先后顺序,由重到轻。
  • 4.3. 以下顺序可供参考:
    定义TAG,一般为 private(可选)
    定义 public 常量
    定义 protected 常量、内部类
    定义 private 变量
    定义 public 方法
    定义 protected 方法
    定义 private 方法

5. 表达式与语句

5.1. 基本原则:采用紧凑型风格来编写代码

5.2. 细则请参见示例类CodingRuler

/**
 * 文件名(可选),如 xxx.java
 *
 * 版本信息(可选),如:@version 1.0.0
 *
 * 版权申明(开源代码一般都需要添加),如:Copyright (C) 2010-2014 xxx Corporation.
 */
package com.ntes.ruler;
 
/**
 * 类的大体描述放在这里。
 *
 * 
 * @author 作者名
 * @since 2014-XX-XX
 */
 
@SuppressWarnings("unused")
public class CodingRuler {
 
    /** 公有的常量注释 */
    public static final String ACTION_MAIN = "android.intent.action.MAIN";
 
    /** 私有的常量注释(同类型的常量可以分块并紧凑定义) */
    private static final int MSG_AUTH_NONE = 0;
    private static final int MSG_AUTH_SUCCESS = 1;
    private static final int MSG_AUTH_FAILED = 2;
 
    /** 保护的成员变量注释 */
    protected Object mObject0;
 
    /** 私有的成员变量 mObject1 注释(同类型的成员变量可以分块并紧凑定义) */
    private Object mObject1;
    /** 私有的成员变量 mObject2 注释 */
    private Object mObject2;
    /** 私有的成员变量 mObject3 注释 */
    private Object mObject3;
 
    /**
     * 对于注释多于一行的,采用这种方式来 定义该变量
     */
    private Object mObject4;
 
    /**
     * 公有方法描述...
     *
     * @param param1
     *            参数1描述...
     * @param param2
     *            参数2描述...
     * @param paramXX
     *            参数XX描述... (注意:请将参数、描述都对齐)
     */
    public void doSomething(int param1, float param2, String paramXX) {
        // 以下注释标签可以通过Eclipse内置的Task插件看到
        // TODO 使用TODO来标记代码,说明标识处有功能代码待编写
        // FIXME 使用FIXME来标记代码,说明标识处代码需要修正,甚至代码是
        // 错误的,不能工作,需要修复
        // XXX 使用XXX来标记代码,说明标识处代码虽然实现了功能,但是实现
        // 的方法有待商榷,希望将来能改进
    }
 
    /**
     * 保护方法描述...
     */
    @Deprecated
    protected void doSomething() {
        // ...implementation
    }
 
    /**
     * 私有方法描述...
     *
     * @param param1
     *            参数1描述...
     * @param param2
     *            参数2描述...
     */
    private void doSomethingInternal(int param1, float param2) {
        // ...implementation
    }
 
    /**
     * 条件表达式原则。
     */
    private void conditionFun() {
        boolean condition1 = true;
        boolean condition2 = false;
        boolean condition3 = false;
        boolean condition4 = false;
        boolean condition5 = false;
        boolean condition6 = false;
 
        // 原则: 1. 所有 if 语句必须用 {} 包括起来,即便只有一句,禁止使用不带{}的语句
        // 2. 在含有多种运算符的表达式中,使用圆括号来避免运算符优先级问题
        // 3. 判断条件很多时,请将其它条件换行
        if (condition1) {
            // ...implementation
        }
 
        if (condition1) {
            // ...implementation
        } else {
            // ...implementation
        }
 
        if (condition1) /* 禁止使用不带{}的语句 */
            condition3 = true;
 
        if ((condition1 == condition2) || (condition3 == condition4)
                || (condition5 == condition6)) {
 
        }
    }
 
    /**
     * Switch语句原则。
     */
    private void switchFun() {
 
        // 原则: 1. switch 语句中,break 与下一条 case 之间,空一行
        // 2. 对于不需要 break 语句的,请使用 /* Falls through */来标注
        // 3. 请默认写上 default 语句,保持完整性
        int code = MSG_AUTH_SUCCESS;
        switch (code) {
        case MSG_AUTH_SUCCESS:
            break;
 
        case MSG_AUTH_FAILED:
            break;
 
        case MSG_AUTH_NONE:
            /* Falls through */
        default:
            break;
        }
    }
 
    /**
     * 循环表达式。
     */
    private void circulationFun() {
 
        // 原则: 1. 尽量使用for each语句代替原始的for语句
        // 2. 循环中必须有终止循环的条件或语句,避免死循环
        // 3. 循环要尽可能的短, 把长循环的内容抽取到方法中去
        // 4. 嵌套层数不应超过3层, 要让循环清晰可读
 
        int array[] = { 1, 2, 3, 4, 5 };
        for (int data : array) {
            // ...implementation
        }
 
        int length = array.length;
        for (int ix = 0; ix < length; ix++) {
            // ...implementation
        }
 
        boolean condition = true;
        while (condition) {
            // ...implementation
        }
 
        do {
            // ...implementation
        } while (condition);
    }
 
    /**
     * 异常捕获原则。
     */
    private void exceptionFun() {
 
        // 原则: 1. 捕捉异常是为了处理它,通常在异常catch块中输出异常信息。
        // 2. 资源释放的工作,可以放到 finally 块部分去做。如关闭 Cursor 等。
        try {
            // ...implementation
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
 
        }
    }
 
    /**
     * 其它原则(整理中...)。
     */
    private void otherFun() {
        // TODO
    }
}

原创文章转载请注明:转载自: Android开发简要编码规范
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值