代码规范



/** TAG */
private final String TAG = getClass().getSimpleName();
/** 是否为编码规范 */
private boolean m_bIsCoding = true;
/** 标题 */
private TextView m_txtTitle  = null;
/** 编码规范 */
private WebView  m_webCoding = null;
/** 示例代码 */
private WebView  m_webSample = null;
/** 切换 */

private Button   m_btnSwitch = null;


public class SampleCode
{
	/** 圆周率 */
	public static final double PI = 3.1415926535897932384626433832795;
	
	/** 整型值 */
	private int     m_nValue   = 0;
	/** 字符值 */
	private char    m_cValue   = '0';
	/** 浮点值 */
	private float   m_fValue   = 0.0f;
	/** 双精度值 */
	private double  m_dValue   = 0.0;
	/** 布尔值 */
	private boolean m_bValue   = true;
	/** 字符串值 */
	private String  m_strValue = "";

	/** 是否为 16 进制 */
	protected boolean m_bHex = false;
	
	/**
	 * 获取整型值
	 * @return
	 */
	public int getNValue()
	{
		return m_nValue;
	}

	/**
	 * 获取字符串值
	 * @return
	 */
	public String getStrValue()
	{
		return m_strValue;
	}

	/**
	 * 设置整型值
	 * @param n
	 */
	public void setNValue(final int n)
	{
		m_nValue = n;
	}

	/**
	 * 设置字符串值
	 * @param str
	 */
	public void setStrValue(final String str)
	{
		if (str == null) return;
		
		m_strValue = str;
	}
	
	/**
	 * 是否为 16 进制
	 * @return
	 */
	public boolean isHex()
	{
		return m_bHex;
	}

	/**
	 * 构造函数
	 * @param n 整型值
	 */
	public SampleCode(final int n)
	{
		// 整型值
		m_nValue = n;
	}
	
	/**
	 * 加法
	 * @param n 整数
	 */
	private void add(final int n)
	{
		m_nValue += n;
	}
	
	/**
	 * 加法
	 * @param n1 整数 1
	 * @param n2 整数 2
	 * @return 结果
	 */
	public int add(final int n1, final int n2)
	{
		return n1 + n2;
	}
	
	/**
	 * 加法
	 * @param n  整数
	 * @param ns 整数数组
	 * @return 是否相加成功
	 */
	public boolean add(final int n, final int[] ns)
	{
		try
		{
			if (n < 1 || n > ns.length)
			{
				return false;
			}
			
			m_nValue = 0;

			for (int i = 0; i < n; i++)
			{
				// 加法
				add(ns[i]);
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return false;
		}
		
		return true;
	}
}

package cn.tbtech.codingruler;

/**
 * 类的基本描述写在这里...
 * <p>
 * <h3>1. 代码</h3>
 * <ul>
 *     <li>1.1. 请使用 UTF-8 格式来编写代码, 避免出现中文乱码
 *     <li>1.2. 代码缩进必须使用 Tab, 而不能使用空格, 且代码布局尽量对齐
 *     <li>1.3. 代码中不允许出现警告(Java 代码中无法消除的警告要用 @SuppressWarnings)
 *     <li>1.4. 去掉无用的包(命名空间), 方法(函数), 变量(字段)等, 减少僵尸代码
 *     <li>1.5. 在 Eclipse 中使用 Lint 工具来查看并消除警告和错误
 *     <li>1.6. 在 Eclipse 中使用 Ctrl+Shift+F 来格式化代码, 然后再进行调整
 *     <li>1.7. 在 Eclipse 中使用 Ctrl+Shift+O 来格式化 import 包
 * </ul>
 * 
 * <h3>2. 命名规则</h3>
 *     <h3>2.1. 基本原则</h3>
 *     <ul>
 *         <li>2.1.1. 变量, 方法, 类和接口等, 其命名要表义, 不能使用 name1, name2 等无直接意义的命名
 *         <li>2.1.2. 命名不能太长, 适当使用简写或缩写, 如 nMaximumNumber 简写为 nMaxNum
 *         <li>2.1.3. 方法名以小写字母开始, 其后每个单词首字母大写(即使用驼峰表示法), 如 doSomething
 *         <li>2.1.4. 方法名避免使用相似或者仅在大小写上有区别的名字
 *         <li>2.1.5. 方法名避免使用数字, 但可用 2 代替 to, 用 4 代替 for 等, 如 str2int
 *     </ul>
 * 
 *     <h3>2.2. 类, 接口</h3>
 *     <ul>
 *         <li>2.2.1. 所有单词首字母都大写, 使用能确切表示该类, 接口含义, 功能等的词, 一般采用名词
 *         <li>2.2.2. 接口带 I 或 On 等前缀, 或 Listener 等后缀, 如 OnClickListener
 *     </ul>
 * 
 *     <h3>2.3. 常量, 变量</h3>
 *     <ul>
 *         <li>2.3.1. 常量全部大写, 在单词与单词之间用下划线连接, 如 MAX_NUMBER
 *         <li>2.3.2. 变量前使用前缀 m_ 标识为成员变量, 如果是静态成员变量则为 ms_, 如 m_strUserName, ms_instance
 *         <li>2.3.3. 普通变量使用前缀 n, f, d, b, bt, str 等标识变量的数据类型, 如 nNum, strName
 *         <li>2.3.4. 某些局部变量可以根据实际情况灵活变通, 比如用于循环中的 i, j, k 等变量
 *         <li>2.3.5. 代码中禁止使用硬编码, 应把一些数字或字符串定义成常用量, 如圆周率等
 *         <li>2.3.6. 对于废弃不用的函数, 为了保持兼容性, 通常添加 @Deprecated, 如 {@link #doSomething()}
 *     </ul>
 *
 * <h3>3. 注释</h3>
 *     请参考 {@link #SampleCode} 类的注释
 *     <ul>
 *     <li>3.1. 所有的注释, 不分编程语言(C, C++, Java, Objective-C 等), 均采用 Javadoc 格式
 *     <li>3.2. 在代码的关键函数部分, 逻辑处理部分, 复杂算法部分等, 必须添加注释
 *     <li>3.3. 代码中的注释尽量做到"宁多勿少", 必要的时候还必须配套相应的说明文档
 *     <li>3.4. 常量注释, 参见 {@link #PUB_VAR}
 *     <li>3.5. 变量注释, 参见 {@link #m_object0}
 *     <li>3.6. 函数注释, 参见 {@link #doSomething(boolean, double, String)}
 *     <li>3.7. 注释语言, 根据项目的要求来决定应该使用中文还是英文, 对于容易产生歧义的注释推荐使用英文
 *     <li>3.8. 标点符号, 如果使用中文进行注释, 为了保持对齐应该使用英文标点符号
 *     </ul>
 * 
 * <h3>4. Class 内部顺序和逻辑</h3>
 * <ul>
 *     <li>4.1. 每个 class 都应该按照一定的逻辑结构来排列成员变量, 方法, 内部类等, 从而达到良好的可读性
 *     <li>4.2. 总体上来说, 要按照先 private, 然后 protected, 最后 public, 先常量后变量
 *     <li>4.3. 函数的排布也应该有一个逻辑的先后顺序, 由轻到重, 或按照调用关系的先后顺序排列
 *     <li>4.4. 以下顺序可供参考:<p>
 *         定义 TAG, 一般为 private(可选)<br>
 *         定义 private 常量<br>
 *         定义 protected 常量<br>
 *         定义 public 常量<br>
 *         定义 private 变量<br>
 *         定义 protected 变量<br>
 *         定义 public get 方法<br>
 *         定义 public set 方法<br>
 *         定义 class 的构造方法<br>
 *         定义 private 方法<br>
 *         定义 protected 方法<br>
 *         定义 public 方法<br>
 *         定义 private 内部类, 参见 {@link #CodingRulerInternal}<br>
 * </ul>
 * 
 * <h3>5. 表达式与语句</h3>
 *     <h3>5.1. 基本原则: 采用紧凑型风格来编写代码</h3>
 *     <h3>5.2. 细则</h3>
 *     <ul>
 *         <li>5.2.1. 条件表示式, 参见 {@link #conditionFun()}
 *         <li>5.2.2. switch 语句, 参见 {@link #switchFun()}
 *         <li>5.2.3. 循环语句, 参见 {@link #circulationFun()}
 *         <li>5.2.4. 错误与异常, 参见 {@link #exceptionFun()}
 *         <li>5.2.5. 其它, 参见 {@link #doSomething(boolean, double, String)}
 *     </ul>
 */
@SuppressWarnings("unused")
public class CodingRuler
{
	/** TAG */
	private final String TAG = getClass().getSimpleName();

	/** 私有常量 MSG_NONE    的注释(同类型的常量可以分块并紧凑定义) */
	private static final int MSG_NONE    = 0; // 注意初始化值 0, 1, 2 的对齐
	/** 私有常量 MSG_SUCCESS 的注释 */
	private static final int MSG_SUCCESS = 1; // 运算符(+ - * / = | & 等)两端必须有空格
	/** 私有常量 MSG_FAILED  的注释 */
	private static final int MSG_FAILED  = 2;

	/** 保护常量的注释 */
	protected static final String PRO_VAR = "protected";

	/** 公有常量的注释 */
	public static final String PUB_VAR = "public";

	/** 私有成员变量 m_object0 的注释(同类型的成员变量可以分块并紧凑定义) */
	private Object m_object0 = null;
	/** 私有成员变量 m_object1 的注释 */
	private Object m_object1 = null;
	/** 私有成员变量 m_object2 的注释 */
	private Object m_object2 = null;

	/** 保护成员变量的注释 */
	protected Object m_object3 = null;

	/**
	 * 对于注释多于一行的, 采用这种方式<p>
	 * 定义该变量
	 */
	protected Object m_object4 = null;

    /**
     * get 方法描述...
     * @return
     */
	public Object getObject0()
	{
		return m_object0;
	}

    /**
     * set 方法描述...
     * <p>
     * 1. 如果是 get 或 set 函数, 函数体可以只有一行, 且可以不用写参数说明和返回值说明<p>
     * 2. 如果变量为 boolean(布尔) 型, 则 get 函数一般写为 is 前缀, 如 m_bHex 变量的函数写为 isHex()<p>
     * 3. 除了数组初始化之外, 其余用到花括号"{}"的, 必须另起一行<p>
     * 4. 比如不能使用类似 if (bClose) { 这样的代码行, 必须把 { 另起一行
     * @param obj
     */
	public void setObject0(Object obj)
	{
		m_object0 = obj;
	}

	/**
	 * 构造方法
	 */
	public CodingRuler()
	{
		// ...
	}

	/**
	 * if 条件表达式原则<p>
	 * 1. 通常 if 语句必须用花括号"{}"包括起来, 如果只有一句, 且为简单赋值或返回等, 可以使用不带 {} 的语句<p>
	 * 2. 在含有多种运算符的表达式中, 使用圆括号来避免运算符优先级问题<p>
	 * 3. 当判断条件很多时, 请将其它条件换行
	 */
	private void conditionFun()
	{
		boolean bCondition1 = true;
		boolean bCondition2 = false;
		boolean bCondition3 = false;
		boolean bCondition4 = false;
		boolean bCondition5 = false;
		boolean bCondition6 = false;

		if (bCondition1)
		{
			// Implementation...
		}

		if (bCondition1)
		{
			// Implementation...
		}
		else
		{
			// Implementation...
		}

		if (bCondition1)
		{
			// Implementation...
		}
		else if (bCondition2)
		{
			// Implementation...
		}
		else
		{
			// Implementation...
		}
		
		// 使用不带 {} 的语句
		if (bCondition1) bCondition3 = true;
		
		// 使用不带 {} 的语句
		if (!bCondition2) return; // 注意, 非运算符 ! 的两端不需要空格

		if ((bCondition1 == bCondition2) || (bCondition3 == bCondition4) || (bCondition5 == bCondition6))
		{
		}
	}

	/**
	 * switch 语句原则<p>
	 * 1. switch 语句中, break 与下一条 case 之间, 空一行<p>
	 * 2. 对于不需要 break 语句的, 请相连使用<p>
	 * 3. 请默认写上 default 语句, 保持完整性<p>
	 * 4. 在每一个 case 语句上写注释
	 */
	private void switchFun()
	{
		int nMsg = MSG_NONE;
		
		switch (nMsg)
		{
		// 无
		// 失败
		case MSG_NONE:
		case MSG_FAILED:
			break;

		// 成功
		case MSG_SUCCESS:
			break;

		default:
			break;
		}
	}

	/**
	 * 循环表达式原则<p>
	 * 1. 尽量使用 for each 语句代替原始的 for 语句<p>
	 * 2. 循环中必须有终止循环的条件或语句, 避免死循环<p>
	 * 3. 循环要尽可能的短, 把长循环的内容抽取到方法中去<p>
	 * 4. 嵌套层数不应超过 3 层, 要让循环清晰可读
	 * 5. for 之后的花括号"{}"必须另起一行, while, do-while 等与之类似
	 */
	private void circulationFun()
	{
		// 除了数组初始化之外, 其余用到花括号"{}"的, 必须另起一行
		int nArray[] = { 1, 2, 3, 4, 5 };
		
		for (int nData : nArray)
		{
			// Implementation...
		}

		int nLength = nArray.length;
		
		for (int i = 0; i < nLength; i++)
		{
			// Implementation...
		}

		boolean bCondition = true;
		
		while (bCondition)
		{
			// Implementation...
		}

		do
		{
			// Implementation...
		}
		while (bCondition);
	}

	/**
	 * 异常捕获原则<p>
	 * 1. 捕捉异常是为了处理它, 通常在异常 catch 块中输出异常信息<p>
	 * 2. 资源释放的工作, 可以放到 finally 块部分去做, 如关闭 OutputStream 等<p>
	 * 3. 一般在遇到 IO 操作, 控制硬件, 数组操作, 复杂运算等, 推荐在函数中增加异常处理<p>
	 * 4. 如果程序要求高度的稳定性, 即决不允许出现死机, 中断等情况, 则在函数中增加异常处理
	 */
	private void exceptionFun()
	{
		try
		{
			// Implementation...
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			// ...
		}
	}
	    
	/**
	 * 私有方法描述...
	 */
	@Deprecated
	private void doSomething()
	{
		// Implementation...
	}

	/**
	 * 保护方法描述...
	 * <p>
	 * 1. 参数间隔的逗号","之后必须有空格(Objective-C 语言为冒号":")<p>
	 * 2. 在 Eclipse 中, 注释函数时, 在函数行之前输入"/**"后, 回车, 即可自动生成注释样式<p>
	 * 3. 函数的注释, 不分编程语言(C, C++, Java, Objective-C 等), 均采用 Javadoc 格式<p>
	 * 4. @param 为参数说明<p>
	 * 5. @return 为返回值说明
	 * @param nParam1 参数 1 描述...
	 * @param fParam2 参数 2 描述...
	 * @return 返回值说明
	 */
	protected boolean doSomething(final int nParam1, final float fParam2)
	{
		// Implementation...
		
		return true;
	}

	/**
	 * 公有方法描述...
	 * <p>
	 * 1. 对于不许在函数内部改变的参数, 则必须使用 final 描述(C 语言 const), 如 bParam1 和 dParam2<p>
	 * 2. 对于可能在函数内部改变的参数, 则不能使用 final 描述, 如 strParamX
	 * @param bParam1   参数 1 描述...
	 * @param dParam2   参数 2 描述...
	 * @param strParamX 参数 X 描述... (注意: 请将参数, 描述都对齐)
	 * @return 返回值说明
	 */
	public String doSomething(final boolean bParam1, final double dParam2, String strParamX)
	{
		strParamX = "My values ​​changed!";

		// Implementation...
		
		return strParamX;
	}
	
	/**
	 * 内部类...
	 */
	private class CodingRulerInternal
	{
		// ...
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值