csdn原创谢绝转载
简介
现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来.
-
GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑,看它的价格就知道了,最开始是10美元1个月,后面好像涨到20美元了.
我个人给它起了个嘴强王者的称号,就是动动嘴就能实现代码. -
Codeium是一款免费的Ai辅助编程工具,支持70多种编程语言,插件支持40多种编辑器.功能也挺强大的,关键免费的,
我称赞它为白Piao党们的编程秘书.
其他文章
AndroidStudio上安装Codeium方法.
Android Studio安装AI编程助手Github Copilot
环境
- 测试使用的是Android Studio, Codeium要在VsCode上支持对话,这里只简单对比编程的功能.
- 语言Java
代码对比
在同一个Android Studio上,书写相似的简单代码,得到补全代码.然后对比二者表现.
代码尽量挑选平常会用到的公共函数.
Copilot
// 作者:帅得不敢出门
public class Copilot {
// 用递归实现斐波那契数列
public static int fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
public void writeFile(String file, String content) {
try {
FileWriter fw = new FileWriter(file);
fw.write(content);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 手动输入参数int dp后实现
public int dp2px(int dp) {
return (int) (dp * 3.0f + 0.5f);
}
// 手动输入Context参数
public int dpToPx(Context context, int dp) {
return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);
}
// 实现获取最前端的Activity名称的函数
// 输入上面这行,copilot无任何提示
public String getTopActivity(Context context) {
return context.getClass().getSimpleName();
}
public boolean isAppForeground(Context context, String packageName) {
return packageName.equals(getTopActivity(context));
}
public boolean isAppSystem(Context context, String packageName) {
return context.getPackageManager().getLaunchIntentForPackage(packageName) == null;
}
public int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height",
"dimen", "android");
if (resourceId > 0) result = context.getResources().getDimensionPixelSize(resourceId);
return result;
}
public int getScreenWidth(Context context) {
return context.getResources().getDisplayMetrics().widthPixels;
}
public String bytes2HexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte aByte : bytes) {
String hex = Integer.toHexString(aByte & 0xFF);
if (hex.length() < 2) sb.append(0);
sb.append(hex);
}
return sb.toString();
}
public boolean isPhoneNumber(String phoneNumber) {
return phoneNumber.matches("^1[3-9]\\d{9}$");
}
public String getDate() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date());
}
public String getCurrentTime() {
return new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());
}
public static int getTodayOfWeek() {
return new Date().getDay();
}
public static int getDayOfWeek(Date date) {
return date.getDay();
}
public static boolean isChinese(String str) {
return str.matches("[\\u4e00-\\u9fa5]+");
}
/*
这个会编译不过
public boolean isScreenOn(Context context) {
return context.getSystemService(Context.POWER_SERVICE).isScreenOn();
}
*/
public void setBrightness(Context context, int brightness) {
android.provider.Settings.System.putInt(context.getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS, brightness);
}
public String getAndroidId(Context context) {
return android.provider.Settings.Secure.getString(context.getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);
}
}
Codeium
// 作者:帅得不敢出门
public class Codeium {
// 用递归实现斐波那契数列
public int fib(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return fib(n - 1) + fib(n - 2);
}
}
// 输入到writeFile(会自动提示出参数及实现
public void writeFile(String fileName, String content) {
try {
File file = new File(fileName);
FileWriter fw = new FileWriter(file);
fw.write(content);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public int dp2px(int dp) {
return (int) (dp * 0.5f + 0.5f);
}
// 要手动输入Context参数
public int dpToPx(Context context, int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
public String getTopActivity(Context context) {
return "com.benew.testm";
}
public boolean isAppForeground(Context context, String packageName) {
return false;
}
public boolean isAppSystem(Context context, String packageName) {
return packageName.equals("com.android.systemui");
}
public int getStatusBarHeight(Context context) {
return 0;
}
// 这个要手动输入Context参数
public int getScreenWidth(Context context) {
return context.getResources().getDisplayMetrics().widthPixels;
}
public String bytes2HexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
public boolean isPhoneNumber(String phoneNumber) {
// 默认是提示return false
//return false;
// 要手动先输入phoneNumber.matches(
return phoneNumber.matches("^[1][3,4,5,7,8][0-9]{9}$");
}
public String getDate() {
return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
}
public String getCurrentTime(){
return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date());
}
public static int getTodayOfWeek(){
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.DAY_OF_WEEK);
}
public static int getDayOfWeek(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_WEEK);
}
public static boolean isChinese(String str){
return str.matches("[\\u4E00-\\u9FA5]+");
}
public boolean isScreenOn(Context context){
return false;
}
public void setBrightness(Context context, int level){
// 这里如果不主动输入codeium会无提示, 需要手动输入android.provider
android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, level);
}
public String getAndroidId(Context context){
// 这里codeium要手动输入return android.provider 才会提示, 否则会提示成return null
return android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
}
}
结果
代码部分对比图
由于工具,语言,代码量都较单一,无法以偏盖全,只是做个简单比较,另外就是输入的代码也会干扰到补全,
个人输入的与工具本身理解不一样也会导致结果差异.
- 斐波那契数列 Copilot会更简洁些,二者都未有异常处理,比如溢出,输入负数.
- public void writeFile(String file, String content)差不多,Copilot少一行.
- public int dp2px(int dp)结果不同,一个是剩0.5,一个是0.3都有问题, 需要参数中手动输入Context context参数才行.
- public int dpToPx(Context context, int dp) 因为手动输入Context参数结果正确,个人更喜欢Codeium不需要关注运算.
- public String getTopActivity(Context context)二者都不正确.
- public boolean isAppForeground(Context context, String packageName) 二者都不正确.
- public boolean isAppSystem(Context context, String packageName)二者都不正确.
- public int getStatusBarHeight(Context context)Copilot表现比较好.
- public int getScreenWidth(Context context)结果一样.
- public String bytes2HexString(byte[] bytes)差不多.
- 获取时间的字符串的函数,format的格式需要自己微调.
- public boolean isPhoneNumber(String phoneNumber),Codeium需要手动输入部分实现,Copilot表现好.
- getTodayOfWeek() Copilot用到过期的函数,Codeium表现好些.
- public static boolean isChinese(String str)二都结果一样.
- 设备屏幕亮度setBrightness,获取AndroidId getAndroidId, Codeium都需要手动输入部分实现,否则补全不了,Copilot表现好.
单纯从以上对比,Copilot综合实力更强,收费的,开通麻烦点,原因你懂的.
Codeium也能解决大部分场景,它是免费的,免费的,免费的,重要的事情说三遍,开通方便.
最后说一下,土豪上Copilot,其他上Codeium.
作者:帅得不敢出门 CSDN原创谢绝转载