您的位置:首页 > 编程语言

如何写出高效可读的代码

2018-02-28 23:00 417 查看

一.引子

     -为什么想要优化代码1.在学习选择排序时,发现下面代码写的很抽象思考一个问题:为什么用到 pivot 和 pos 两个变量
public class ChooseSort implements  Sorter {
public void sort(int[] arr) {
int pivot, pos = -1;

for (int i = 0; i < arr.length; i++) {
pivot = Integer.MAX_VALUE;
for (int j = i; j < arr.length; j++) {
if (pivot > arr[j]) {
pivot = arr[j];
pos = j;
}
}
arr[pos] = arr[i];
arr[i] = pivot;
}
}
}
带着这样的问题对于选择排序进行了拆解:
从最简单的开始分析,我们要在一个数组中找到一个最小值怎么写public class MinValue {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {5,8,2,10};
PrintMinValue(a);
}
public static void PrintMinValue(int[] arr) {
int min = Integer.MAX_VALUE;
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {//如果arr[i]如果数组中的值比最大值小,就把小的放到min变量中
min = arr[i];
}
}
System.out.println("最小值为:"+min);
}
}选择排序也只不过是把取最小值的方法进行了n次,并且每次取完最小值就把最小的值剔除数组。
通过pivot变量保存每个循环得到的最小值,并通过pos来保存最小值的下标,在一次排序后使用交换的方式把最小的放到排序数组第一位





这边就不得不感叹上面那段代码的精妙之处,空间上面应该使用的很小了= =

二.正文

分析下文的代码
大佬链接:https://droidyue.com/blog/2014/07/27/think-twice-when-coding/
public Bitmap getFavicon(final WebView webview) {
if (null != webview && null != webview.getFavicon()) {
return webview.getFavicon();//此处会在null != webview && null != webview.getFavicon()都成立时,再次调用一边循环不是很好。在逻辑判断中调用了一次又返回时又调用了一次
} else {
return BitmapFactory.decodeResource(getResources(), R.drawable.default_favicon);
}
}
public Bitmap getFavicon(final WebView webview) {
if (null != webview) {
Bitmap favicon = webview.getFavicon();//通过favicon变量保存对象,逻辑判断中就不需要引用了
if (null != favicon) {
return favicon;
} else {
return BitmapFactory.decodeResource(getResources(), R.drawable.default_favicon);//1
}
} else {
return BitmapFactory.decodeResource(getResources(), R.drawable.default_favicon);//2
}
}
返回默认值是存在两处相同的代码,如果需要修改代码时,有可能需要修改两次。还是不够好。
public Bitmap getFavicon(final WebView webview) {
Bitmap defaultFavicon = BitmapFactory.decodeResource(getResources(), R.drawable.default_favicon);//通过声明defaultFavicon变量保存返回值
if (null != webview) {
Bitmap favicon = webview.getFavicon();
if (nul
b6e0
l != favicon) {
return favicon;
} else {
return defaultFavicon;
}
} else {
return defaultFavicon;
}
}
webview不为null,并且webview.getFavicon()也不为null,
那么Bitmap defaultFavicon = BitmapFactory.decodeResource(getResources(), R.drawable.default_favicon);实际上是多余的。public Bitmap getFavicon(final WebView webview) {
Bitmap favicon = null;//申明空的favicon对象
if (null != webview && (favicon = webview.getFavicon()) != null) {//通过(favicon = webview.getFavicon()) != null进行赋值和判断
return favicon;
} else {
return BitmapFactory.decodeResource(getResources(), R.drawable.default_favicon);
}
}
public Bitmap getFavicon(final WebView webview) {
Bitmap favicon = null;//申明空的favicon对象
if (null != webview) {//先判断父类是否为空
favicon = webview.getFavicon();//父类不为空就,调用webview.getFavicon()赋值
}
return null != favicon ? favicon : BitmapFactory.decodeResource(getResources(), R.drawable.default_icon);//通过三目运算符判断favicon是否不为空,不为返回favicon的值,否则为默认的值

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: