AI编程工具Copilot与Codeium的实测对比

csdn原创谢绝转载

简介

现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来.

  1. GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑,看它的价格就知道了,最开始是10美元1个月,后面好像涨到20美元了.

    我个人给它起了个嘴强王者的称号,就是动动嘴就能实现代码.

  2. Codeium是一款免费的Ai辅助编程工具,支持70多种编程语言,插件支持40多种编辑器.功能也挺强大的,关键免费的,

    我称赞它为白Piao党们的编程秘书.

    其他文章
    AndroidStudio上安装Codeium方法.
    Android Studio安装AI编程助手Github Copilot

环境

  1. 测试使用的是Android Studio, Codeium要在VsCode上支持对话,这里只简单对比编程的功能.
  2. 语言Java

代码对比

在同一个Android Studio上,书写相似的简单代码,得到补全代码.然后对比二者表现.

代码尽量挑选平常会用到的公共函数.

Copilot

java 复制代码
// 作者:帅得不敢出门
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

java 复制代码
// 作者:帅得不敢出门
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);
    }

}

结果

代码部分对比图

由于工具,语言,代码量都较单一,无法以偏盖全,只是做个简单比较,另外就是输入的代码也会干扰到补全,

个人输入的与工具本身理解不一样也会导致结果差异.

  1. 斐波那契数列 Copilot会更简洁些,二者都未有异常处理,比如溢出,输入负数.
  2. public void writeFile(String file, String content)差不多,Copilot少一行.
  3. public int dp2px(int dp)结果不同,一个是剩0.5,一个是0.3都有问题, 需要参数中手动输入Context context参数才行.
  4. public int dpToPx(Context context, int dp) 因为手动输入Context参数结果正确,个人更喜欢Codeium不需要关注运算.
  5. public String getTopActivity(Context context)二者都不正确.
  6. public boolean isAppForeground(Context context, String packageName) 二者都不正确.
  7. public boolean isAppSystem(Context context, String packageName)二者都不正确.
  8. public int getStatusBarHeight(Context context)Copilot表现比较好.
  9. public int getScreenWidth(Context context)结果一样.
  10. public String bytes2HexString(byte\[\] bytes)差不多.
  11. 获取时间的字符串的函数,format的格式需要自己微调.
  12. public boolean isPhoneNumber(String phoneNumber),Codeium需要手动输入部分实现,Copilot表现好.
  13. getTodayOfWeek() Copilot用到过期的函数,Codeium表现好些.
  14. public static boolean isChinese(String str)二都结果一样.
  15. 设备屏幕亮度setBrightness,获取AndroidId getAndroidId, Codeium都需要手动输入部分实现,否则补全不了,Copilot表现好.

单纯从以上对比,Copilot综合实力更强,收费的,开通麻烦点,原因你懂的.

Codeium也能解决大部分场景,它是免费的,免费的,免费的,重要的事情说三遍,开通方便.

最后说一下,土豪上Copilot,其他上Codeium.

作者:帅得不敢出门 CSDN原创谢绝转载

相关推荐
小虎AI生活16 小时前
反推任意图片的神技能,WorkBuddy和Loomy装上就能用
aigc·ai编程
金銀銅鐵16 小时前
带您看懂字节码指令(二):空循环里有什么
java·后端·ai编程
JAVA前线17 小时前
用《实践论》分析前沿部署工程师:AI时代听见炮声的人
架构·ai编程
传奇开心果编程17 小时前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
IT规划师20 小时前
Agent 总返工? Google 工程师把工程实践写成了技能库
ai编程·代码规范
慕容雪_20 小时前
Capacitor8-Android打包完整手册
android·打包·capacitor
OpsEye21 小时前
同一套用例跑两个大模型接口,差异到底出在哪
javascript·ai编程
程序员老刘21 小时前
Flutter 3.50更新,开发者应该关注什么?
flutter·ai编程·客户端
孟健1 天前
我用 REA 逆向自己的 Electron 桌面端,扒出 178 个 IPC 通道后我反而放心了
架构·开源·ai编程
熊猫钓鱼>_>1 天前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos