TRAE 写的笑话怎么样?

开篇

一切都源于那个无聊的下午。

我正在上班划水,用着最新的 Trae 进行编码工作,我本来是打算使用 Trae 写一个命令行工具的,写着写着,发现 Trae 还是很能够理解程序员的意图,它不仅能够自动的生成我们想要的代码,同时在修改的时候,也明白优化的目的,我的工作变得慢慢简单起来,就是不断给提示词优化代码。

我突发奇想,既然 Trae 这么了解我们,那是不是也能写出一些 Bug 代码?

于是我敲出了一段提示词:

请你写出 10 则你觉得最好笑的 Kotlin/Java 代码笑话

下面,就是 Trae 的笑话时刻。


无限递归的自我介绍

Kotlin 复制代码
fun introduceMyself() {
    println("我是一名程序员")
    println("想了解更多关于我的信息吗?")
    introduceMyself() // 无限递归,永远介绍不完自己
}

笑点分析

虽然这个看起来是个冷笑话,不过我相信很多开发者,尤其在编写算法类代码的时候,肯定写过类似的无限递归 Bug。

该 Bug 主要是因为没有设定停止条件。

除此之外,Kotlin 还支持一个递归优化------尾递归。

上述代码如果我们转译成 Java 代码,是这样的:

Java 复制代码
public static final void introduceMyself() {
   System.out.println("我是一名程序员");
   System.out.println("想了解更多关于我的信息吗?");
   introduceMyself();
}

而我们使用尾递归,

Kotlin 复制代码
tailrec fun introduceMyself()

转译的代码就是:

Java 复制代码
public static final void introduceMyself() {
   while(true) {
      System.out.println("我是一名程序员");
      System.out.println("想了解更多关于我的信息吗?");
   }
}

优化的代码没有多余的函数调用,同时也没有递归造成的栈溢出问题。

Kotlin 确实懂我们。

极度乐观的异常处理

Kotlin 复制代码
try {
    // 一些可能出错的代码
    riskyOperation();
} catch (Exception e) {
    // 假装什么都没发生
    System.out.println("这里没有bug,请继续");
}

笑点分析

如果代码出现异常,那么我们就 catch 一下。

我曾经在开发安卓 App 的时候,为了让应用发生不崩溃,就用了类似的方式,不过那个比这个麻烦一点。首先是捕获主线程的异常,然后让主线程的 Looper 继续运转,大概这个逻辑。

单说异常的处理,Kotlin 也有相关的内置组件,详情看这里

过度防御性编程

Kotlin 复制代码
fun isUserLoggedIn(): Boolean {
    if (user != null && user.isLoggedIn == true && user.session != null && 
        user.session.isActive == true && user.session.isExpired == false && 
        user.account != null && user.account.isBanned == false && 
        System.currentTimeMillis() < user.session.expiryTime && 
        !user.name.isNullOrEmpty()
    ) {
            return true
    } else {
        return false
    }
}

笑点分析

老实说,我觉得这段代码没有什么大毛病。

当然它依然是可以优化的:

Kotlin 复制代码
fun isUserLoggedIn(): Boolean {
    return user != null && user.isLoggedIn && user.session != null && user.session.isActive && !user.session.isExpired && user.account != null && !user.account.isBanned && System.currentTimeMillis() < user.session.expiryTime && !user.name.isNullOrEmpty()
}

简洁多了!当然,如果能把条件拆分,就更好了。

神秘的变量命名

Kotlin 复制代码
int a = 5;
int b = 10;
int x = a + b;
// 几百行代码后...
if (x > 10) { // 这里的x是什么来着?
    doSomething();
}

笑点分析

哈哈······

我承认,我笑了一下,这种类似的写法,很多开发者应该都写过。

代码段长度一旦超过一个屏幕,安能辨我是雌雄!

过度工程化的 Hello World

Kotlin 复制代码
class HelloWorldFactory {
    companion object {
        fun createHelloWorldPrinter(): HelloWorldPrinter {
            return HelloWorldPrinterImpl()
        }
    }
}

interface HelloWorldPrinter {
    fun printHelloWorld()
}

class HelloWorldPrinterImpl : HelloWorldPrinter {
    override fun printHelloWorld() {
        println("Hello, World!")
    }
}

fun main() {
    val printer = HelloWorldFactory.createHelloWorldPrinter()
    printer.printHelloWorld()
}

笑点分析

我确实笑了,但随即,我戴上了痛苦面具。

作为 Kotlin/Java 开发者,我知道 Java 在外的名声------过度抽象。我在一个开发者论坛上看过类似的帖子,内容就是你能一眼看出有 Java 代码经验的人的代码------起手就是一个抽象类!

个人来讲,确实 Java 有这个问题,哈哈。

过度抽象,俨然成为了 Java 开发者的刻板印象。

魔法数字大师

Kotlin 复制代码
public int calculateTotal(int quantity) {
    return quantity * 7 * 24 * 60 * 60 * 1000; // 什么意思?没人知道!
}

笑点分析

虽然我一眼就能看出这段代码的意思是返回 quantity 周的毫秒数,但是平时代码这么写,多半是要挨打的!

最好的方式就是放到一个常量中,给变量一个有意义的名字。

Kotlin 复制代码
const val WeekInMillis = 7  * 24 * 60 * 60 * 1000

永远不会执行的代码

Kotlin 复制代码
fun processData(data: List<String>) {
    if (1 == 2) { // 永远为false
        println("这段代码永远不会执行")
    } else {
        println("总是执行这里")
    }
}

笑点分析

这段代码多半是因为开发者喝假酒了!

令人困惑的布尔表达式

yaml 复制代码
val isEligible = !(!isAdult || !hasPermission) && !(isBlocked && 
!isSpecialCase) || isAdmin
// 祝你好运理解这个条件

笑点分析

这表达式,没有注释是真看不懂。

作为开发者,一定要避免这么写布尔表达式,通常布尔表达式条件超过三个后,可读性就大大降低了。

这里最好的方法是将每个条件单列出来,然后给一个有意义的变量名。

Kotlin 复制代码
val legalAdult = isAdult && hasPermission
val notBlocked = !(isBlocked && !isSpecialCase)

val isEligible = legalAdult && notBlocked || isAdmin

注释比代码多

kotlin 复制代码
// 这个函数用于将用户输入的字符串转换为整数
// 首先检查字符串是否为空
// 然后尝试将其解析为整数
// 如果解析失败,返回默认值0
// 参数: input - 用户输入的字符串
// 返回: 解析后的整数,或者在解析失败时返回0
// 作者: 某某某
// 创建日期: 2023-01-01
// 最后修改: 2023-02-15 - 添加了空检查
fun parseInteger(input: String): Int {
    return input.toIntOrNull() ?: 0
}

笑点分析

emmmm,TRAE 一天都是在分析什么代码?

但是不得不说,写注释,是划水的最好借口,你总不能说我没干活儿吧!

过度使用 Elvis 运算符

kotlin 复制代码
fun getUserInfo(): String {
    return user?.name?.firstName ?: user?.name?.nickname ?: user?.username ?: 
           user?.email?.split("@")?.get(0) ?: user?.phoneNumber?.toString() ?: 
           user?.id?.toString() ?: "未知用户" // Elvis运算符地狱
}

笑点分析

这个才是属于 Kotlin 独有的地狱笑话!

如果 Elvis 表达式实在是太长了,建议还是使用 if-else

总结

以上,便是 TRAE 给我写的十则笑话。

其实大部分都是我们平时会遇到的代码片段,曾经的我们写过,将来的他们,也依然会写。

代码写错并不可怕,不断学习,不断优化才最重要。

还有一则

在结束的时候,TRAE 又来了一则笑话!

相关推荐
海拥3 小时前
AI 编程实践:使用 Trae 快速开发HTML 照片滤镜编辑器
前端·trae
用户4099322502125 小时前
如何让Celery任务像VIP客户一样享受优先待遇?
后端·github·trae
用户992441031566 小时前
TRAE实战:让开发效率成倍提升的秘密武器
trae
自由的疯7 小时前
java程序员怎么从Python小白变成Python大拿?(九)
java·trae
FairyDiana7 小时前
解锁Node.js核心装备库:全局API通关指南
面试·node.js·trae
cpp加油站8 小时前
Trae加Chrome MCP实现浏览器自动化测试((玩转100个MCP系列第五弹)
ai编程·mcp·trae
Goboy8 小时前
迷宫逃脱:Trae 一句话生成的“烧脑冒险”
llm·ai编程·trae
Goboy8 小时前
飞刀游戏:Trae 一句话生成的精准挑战
人工智能·ai编程·trae