学习学习之鸿蒙&Android

android代码命名规范.md

2021-06-23  本文已影响0人  zivxia

基本代码的命名

image.png image.png

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/1102/6736.html

文件命名

命名的前提是见名知意

类命名:应该以驼峰式(UpperCamelCase),比如:LoginActivity、HomeFragment、ListView

资源命名:命名应该以lowercase_underscore(小写下划线的形式)。

1.Drawable files(图片文件)

作为选择器背景图片的命名:


image.png
image.png
image.png
2.Layout files(布局文件)

布局文件名应该对应的组件来命名

image.png
3.Menu files(菜单文件)

菜单文件的命名跟布局文件的命名也是一样,都应该与对应的组件名字保持对应。比如,我们定义了一个菜单文件用在UserActivity,所以这个菜单文件的名字应该叫做activity_user。不以menu开头是因为这个菜单文件本身就放在了menu目录下,就不需要加上menu以区分。

4.Values files

values目录下的文件名称都应该以复数的形式命名。例如:strings.xml、colors.xml、styles.xml。如果我们需要自定义view的自定义属性,则应该命名为attrs.xml

Java language rules

1.Don't ignore exceptions

// 字符串转 long 整型
public static long parseLong(String value, long defaultValue) {
long resultValue = defaultValue;
try {
resultValue = Long.parseLong(value);
} catch (Exception e) {
e.printStackTrace();
return resultValue;
}
return resultValue;
}

2.Don't catch generic exception

try {
someComplicatedIOFunction(); // may throw IOException
   someComplicatedParsingFunction(); // may throw ParsingException
   someComplicatedSecurityFunction(); // may throw SecurityException
   // phew, made it all the way
} catch (Exception e) { // I'll just catch all exceptions
   handleError(); // with one generic handler!
}

分别捕获每个异常

3.Fully qualify imports

import foo.*;   // bad

import foo.Bar; // good

Java style rules

1.Fields definition and naming

成员变量或常量应该被定义在文件的开头并遵循如下规则:


public class MyClass {
public static final int SOME_CONSTANT = 42;
public int publicField;
private static MyClass sSingleton;
int mPackagePrivate;
private int mPrivate;
protected int mProtected;
}

2.Treat acronyms as words(视缩写为单词)
image.png

代码段用4个空格缩进###User spaces for indentation(用空格缩进)


if (x == 1) {
x++;
}

用8个空格进行换行缩进


int i =        getIntegerExpression(that, wouldNotFit, on, one, line);

3.User standard brace style

使用标准的花括号样式


class MyClass {
int func() {
if (something) {
// ...
       } else if (somethingElse) {
// ...
       } else {
// ...
       }
}
}

如果判断语句一行就能写完,就没必要用花括号


if (condition) {       body(); // good}if (condition)
body(); // bad!

4.Limit variable scope(限制局部变量的范围)

局部变量的的范围应保持在最低限度的。这样做可以增加代码的可读性和可维护性,减少出错的可能性。最里面的块中声明的每个变量应该包含所有变量的使用。

5.Order import statements(导入包的排序)

一般IDE比如androidStudio,都已经自动遵守这个规则。具体排序如下

  1. Android imports(android 包)

2.第三方类库

3.java和javax包

4.项目内的包

并且为了匹配IDE的设置,还应遵守如下规则:

1.同一分组内,按字母顺序进行排序。

2.分组之间应该用空行分隔。

6.Logging guidelines

日志等级:

egg:


public class MyClass {
private static final String TAG = MyClass.class.getSimpleName();

public myMethod() {
Log.e(TAG, "My error message");
}
}

日志一般会在正式上线之后全部关掉。也可以在开发阶段控制log是否显示:


if (BuildConfig.DEBUG) Log.d(TAG, "The value of x is " + x);

7.Class member ordering(类成员的顺序)

主要是为了提高代码可读性

1.常量

2.成员变量

3.构造函数

4.重写的方法和回调函数(public or private)

5.public methods

6.private methods

7.Inner classes or interfaces

举个例子来说:


public class MainActivity extends Activity {

private String mTitle;
private TextView mTextViewTitle;

public void setTitle(String title) {
mTitle = title;
}

@Override
   public void onCreate() {
...
}

private void setUpView() {
...
}

static class AnInnerClass {

}

}

如果一个类是继承系统类,则重写的方法的排序都是很有可读性的


public class MainActivity extends Activity {

//Order matches Activity lifecycle
   @Override
   public void onCreate() {}

@Override
   public void onResume() {}

@Override
   public void onPause() {}

@Override
   public void onDestroy() {}

}

8.Parameter ordering in methods

android中如果一个函数的参数包括context,则context必须作为参数的第一位,回调接口一般放置在最后一位


// Context always goes first
public User loadUser(Context context, int userId);

// Callbacks always go last
public void loadUserAsync(Context context, int userId, UserCallback callback);

9.String constants,naming,and values

当使用android中 SharedPreferences,Bundle,Intent等键值对类型api时,键值必须使用常用,命名规则如下:

10.Line length limit

一行的代码最好不要超过120个字符,如果超过了一行则应该使用创建一个临时变量或者将一行写成多行。例子如下:


int longName = anotherVeryLongVariable + anEvenLongerOne - thisRidiculousLongOne // bad
       + theFinalOne;
int longName =
anotherVeryLongVariable + anEvenLongerOne - thisRidiculousLongOne + theFinalOne; // good
Picasso.with(context).load("http://ribot.co.uk/images/sexyjoe.jpg").into(imageView); // bad
Picasso.with(context)
.load("http://ribot.co.uk/images/sexyjoe.jpg") // good
       .into(imageView);
loadPicture(context, "http://ribot.co.uk/images/sexyjoe.jpg", mImageViewProfilePicture, clickListener, "Title of the picture"); // bad
loadPicture(context,
"http://ribot.co.uk/images/sexyjoe.jpg",
mImageViewProfilePicture,
clickListener,
"Title of the picture"); // good

XML styles

1.ID的命名
2.strings的命名:
3.Styles和Themes的命名

应该以驼峰的形式

4.values中排序

应该将相近的相似的属性放在一起

1.View ID

2.Style

3.Layout width and layout height

4.Other layout attributes, sorted alphabetically

5.Remaining attributes,sorted alphabetically

上一篇 下一篇

猜你喜欢

热点阅读