造个‘’轮子‘’!只要掌握了这几点,你也可以撸一个写在简历上

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

序言

最近公司的项目有点少,摸鱼的时间有点多,闲来无事就去程序员最大的交友论坛(Github)上看了看,发现上面好多轮子,简直可以说是车轮遍地爬!我也就好奇了?怎么那么多人不上班,每天忙着造人?啊不,造轮!

image.png

待我自己看了看,发现其实造轮子这件事也没有想象中的那么难,我也就尝试了一下在公司摸鱼的时间造了一个小小的独木轮。为什么叫他独木轮呢?因为我的想法很简单,就是要每一个模块甚至每一个类单独拎出来都可以直接测试,直接使用,用祖传的CV大法可以直接用在自己的项目中,不需要引入依赖,不需要搞花里胡哨的配置,最重要的是,官方文档,爷爷奶奶看了都能马上上手!

image.png

轮子简介

我给我的独木轮命名为:SweetCode,意味着你每天写代码就和吃Sugar一样甜蜜,哎呀妈呀,简直不要不要的。他的官方文档长这样,目前我就写了一个模块,都是自己在工作中常用到的一些小工具类,自己整理起来也是方便自己以后复用。

image.png

Arrays

我们来手撸一个Arrays的类,先来试试手。我目前常用到的对于数组的处理比较多的是:
  1. 显示字符串数组的内容,用,分隔.
  2. 取得数组的第一个元素.
  3. 把List转换成字符串数组.
  4. 判断字符串数组是否包含指定的字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
java复制代码package cn.linstudy.arrays;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
* @Author XiaoLin
* @Date 2021/7/7 15:15
* @Description 数组工具类
*/
public class ArrayUtils {

/**
* 显示字符串数组的内容,用,分隔
* @param args 字符串数组
* @return 字符串数组的内容
*/
public static String toString(String[] args) {
return toString(args, ",");
}

/**
* 显示字符串数组的内容
* @param args 字符串数组
* @param separator 分隔符
* @return 字符串数组的内容
*/
public static String toString(String[] args, String separator) {
if (args == null || args.length == 0) {
return null;
}
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < args.length; i++) {
if (i > 0) {
buffer.append(separator);
}
buffer.append(args[i]);
}
return buffer.toString();
}

/**
* 取得字符串数组的第一个元素
* @param stringArray 字符串数组
* @return 字符串数组的第一个元素
*/
public static String getFirst(String[] stringArray) {
if (stringArray == null || stringArray.length == 0) {
return null;
}
return stringArray[0];
}

/**
* 取得数组的第一个元素
* @param array 数组
* @return 数组的第一个元素
*/
public static Object getFirst(Object[] array) {
if (array == null || array.length == 0) {
return null;
}
return array[0];
}

/**
* 把List转换成字符串数组
* @param list 字符串List
* @return 字符串数组
*/
public static String[] toArray(List<String> list) {
return list.toArray(new String[list.size()]);
}

/**
* 把Set转换成字符串数组
* @param set 字符串Set
* @return 字符串数组
*/
public static String[] toArray(Set<String> set) {
return set.toArray(new String[set.size()]);
}

/**
* 判断字符串数组是否包含指定的字符串
* @param array 字符串数组
* @param str 指定的字符串
* @return 包含true,否则false
*/
public static boolean contains(String[] array, String str) {
if (array == null || array.length == 0) {
return false;
}

for (int i = 0; i < array.length; i++) {
if (array[i] == null && str == null) {
return true;
}
if (array[i].equals(str)) {
return true;
}
}
return false;
}

/**
* 判断字符串数组是否有不为Empty的值
* @param args 字符串数组
* @return 有true,否则false
*/
public static boolean hasValue(String[] args) {
if (args == null || args.length == 0 || (args.length == 1 && args[0] == null)) {
return false;
}
for (int i = 0, length = args.length; i < length; i++) {
if (args[i] != null || args[i].trim().length() > 0) {
return true;
}
}
return false;
}

/**
* 联合两个数组
* @param first 第一个数组
* @param last 另一个数组
* @return 内容合并后的数组
*/
public static Object[] combine(Object[] first, Object[] last) {
if (first.length == 0 && last.length == 0) {
return null;
}
Object[] result = new Object[first.length + last.length];
System.arraycopy(first, 0, result, 0, first.length);
System.arraycopy(last, 0, result, first.length, last.length);
return result;
}

/**
* 把数组转换成 列表,如果数组为 null,则会返回一个空列表。
* @param array 数组
* @return 列表对象
*/
public static List<Object> toList(Object[] array) {
ArrayList<Object> list = new ArrayList<Object>();
if (array == null) {
return list;
}

for (int i = 0; i < array.length; i++) {
list.add(array[i]);
}
return list;
}

/**
* 清除字符串数组中的null
* @param array 字符串数组
* @return 清除null后的字符串数组
*/
public static String[] clearNull(String[] array) {
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < array.length; i++) {
if (array[i] != null) {
list.add(array[i]);
}
}
return toArray(list);
}

}
大概写完的话就这些几个方法,其实也很简单,最重要的是你需要在写方法的时候统筹全局,知道这个方法是干什么的,为什么要写他?写他会不会出现耦合性很强的问题,我写代码的时候,首先会想一下这段代码我写的目的是什么?然后先开始写注释,将这个方法的作用、入参、返回值一一定义清楚,让后面的人看了这个代码有一种醍醐灌顶的感觉,不会说一头雾水,接着就要开始去写方法了,写方法的话就涉及到了代码规范,我在总结的时候讲,**总之这个项目我会一直维护下去和写下去的**!

心得(代码规范)

其实说是写轮子,最重要的还是代码规范和方法的一个抽取,什么样的代码是好代码,什么样的代码是屎山,想必这个很多程序员都是不知道的,下面我就来说一下我眼中的代码规范!
  1. 方法要见名知意,看到方法的入参、返回值、方法名都要知道他的具体含义,而不是要进入方法看逻辑才知道。
  2. 方法的耦合性要尽量低,不要这个方法依赖下一个方法,下一个方法又调用其他的方法,如果在公司写代码方法要拆分的足够细,需要想好这个方法后面会不会复用,人如果复用的话需要抽取出共同的一些语句,防止重复写代码。
  3. 方法不要有太多的魔法值,如果有魔法值,可以用枚举或者常量去代替,降低代码耦合度。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%