猫史档案馆


吐槽一些沙diao代码(雾

用户:yee剑走天下yee剑走天下查看:42 回复:29 评论:42 创建时间:2023-01-07T22:49:27


大屑勿入(

这里面的水很深()包括了一些大佬和一堆小屑()

起因:发现屑剑的代码风逐渐路卡化了(悲

经过:瞎逛论坛时发现了一堆很是让我不解的代码()按路卡原话来说事可以让她大喊fuc*那种(

第一种()无意义命名的变量&无意义变量()

这里被我提到的人别喷我(

比如某个被提名过的地图

你敢信)里面的给玩家属性的几个命名居然时这样的(

entity.se1;
entity.se2;
entity.se3;

这就算了()关键是()他到后面给代码的判断就是

if (entity.se1 + entity.se2 + entity.se3 == 0) {
    //.....
}
if (entity.se1 + entity.se2 + entity.se3 == 1) {
    //.....
}
if (entity.se1 + entity.se2 + entity.se3 == 2) {
    //.....
}
if (entity.se1 + entity.se2 + entity.se3 == 3) {
    //.....
}

完全一个变量就可以解决的事情()非要三个()很是不解()

而且se啥意思()越看越看不懂()

 

还有就比如我之前给模型取名()

直接就什么aab,aabbccd,abcdeefg诸如此类的)(

现在看之前自己写的代码感觉完全依托答辩

 

2.冗杂&无意义代码

比如()

world.onPlayerJoin(({ entity }) => {
     entity.player.kick();
     return
})

我实在搞不懂return啥()有啥用)

再比如被屑喆的API教程坑害了无数岛民的屑对话框)

一般人写如果点×关闭了对话框:

if (dialog == null || !dialog) {
    return
}

我就搞不懂了()完全一个if (!dialog) return;

一行可以完事的还非要搞到三行()

还有yee些npc交互()

为什么就不能整函数呢?!()函数不好吗()

function npc(selector, fn, interactHint, interactRadius, interactColor) {
    const Npc = world.querySelector(selector); 
    Npc.enableInteract = 1;
    Npc.interactHint = interactHint ? interactHint : Npc.id.split('-')[0]
    Npc.interactRadius = interactRadius ? interactRadius : 3;
    Npc.interactRadius = interactRadius ? interactRadius : new Box3RGBColor(0, 0, 0);
    Npc.onInteract(async ({ entity }) => {
        await fn(entity)
    })
}

辣么简易一个函数就可以完成以下这依托答辩

const npc = world.querySelector('#xxx');
npc.enableInteract = true;
npc.interactHint = 'xxx';
npc.interactRadius = 3;
npc.interactColor.set(喵);

npc.onInteract(({ entity }) => {
    // .......
})

还有一些特别繁化的tp代码()就是某雪大佬的()虽然他实力的确很强()但是我这个lj岛民还是不太能理解那么简易一个功能为什么要那么多代码()

当然()以上情况整活除外()

 

3.没格式

我第二深恶痛绝的就是没格式的代码了)

比如这样的:

world.onPlayerJoin(({entity}) => {
    entity.player.canFly = true;
})

这还勉强说得过去()起码知道缩进

但是我还见过这种的,简直呕了(

world.onPlayerJoin(({entity}) => {
entity.player.canFly = true;})
var a=114514
var b=1919810
var c=[1,1,4,5,1,4,1,9,1,9,8,1,0]
console.log(a+b*a/b)

一点空格没有,而且句尾没写分号()虽然写不写都没关系()但是如果你写SQL这样写(async () => {await db.sql`....`})()的话不加分号就有大问题了()还不知道的大屑可以自己去试试(雾

 

4.我最**深恶痛绝的——乱复制一通,然后代码不分区,贼杂那种

我见过无数那种养成类的地图

没有几个是能做得好的

为什么?()

直接把论坛的代码照搬,然后又看不懂()不会调用啥的()真是6极了()

在这不得不吐槽一下我的一个好朋友()虽然他建筑很厉害()

而且他地图的建筑如果有好的玩法真有可能上首页(不透露姓名)

但是他的硬伤是啥?)

做一个养成类,光是SQL就复制了三个

然后还一起到index.js给我require

这还算了

而且另一个分区明明给玩家钱的赋值是entity.coin

另一个代码分区就变成了entity.money

真是让我无法下手()

而且更棒的是我给他改完了()没过几天又nnd给我复制一堆)变成之前那样(

胡乱复制代码说完了()说说代码不分区(

这也挺恶心的()index.js写个封顶2000行左右就够了(个人认为)

比如一个养成类,index只需要写一下SQL,基础的怪的die码()和玩家的右键以及攻击效果就行了()

至于武器啥的()完全可以开个Item.js,然后另外整个对象(我一般是写global.things)来专门写背包,然后再到index.js require一下就行了()

好了不多瞎BB了()

如果有以上问题的大屑()给几条小建议)

没必要的代码全删了!

没格式的代码右键点格式化文档给他格式化了!

命名没意义整个有意义的命名!

能封装函数就封!别写依托答辩!

别老是到论坛复制你不懂的代码!当然你能知道怎么使用除外!

代码能多简洁多简洁()别拿代码多当作骄傲的资本!)

我们应该追求的是,用更少的代码,实现更多的功能!

给yee些贼爱写if结果要执行的步骤也贼少的人的一些建议)

如果你要执行的步骤就一行可以解决的()

可以使用三目运算符(

格式为

条件 ? 条件成立执行这里的步骤 : 条件不成立执行这里的步骤

比如

if (entity.player.name == 'xxx') {
    entity.player.kick()
}

完全可以简化为

entity.player.name == 'xxx' ? entity.player.kick() : null

好了这个屑岛民瞎BB完了()

感谢你看完了()

你也是时候去睡觉了(帖子写完时22:49)

emotion_doge

 


回复

上一页1 页 / 共 1下一页
yee剑走天下yee剑走天下

没人看()自己抢自己沙发的孤苦贴主(悲

点赞0


评论


WitheredWonderWitheredWonder

自古沙发归滑稽(屑滑稽的打油诗

点赞0


评论


0木糖00木糖0

板凳

点赞0


评论


来自火星的股神____名字被占了来自火星的股神____名字被占了

那个“了”是不是该换成“力”()

home化了一半()但没完全home化()

点赞0


评论


屑怪盗屑怪盗

龙椅

点赞0


评论


SCS_user_LoeheodVOQSCS_user_LoeheodVOQ

entity.player.name == 'xxx' ? entity.player.kick() : null
// 可以简化为:
entity.player.name == 'xxx' && entity.player.kick()

点赞1


评论


SCS_user_LoeheodVOQSCS_user_LoeheodVOQ

分号补充:https://shequ.codemao.cn/community/474247

点赞0


评论


DebugDynamoDebugDynamo

额不不不

真正的大佬都要用无意义变量()()

这样万一自己的黑科技代码泄露了()()

别人也看不懂,不会用()()

《满级自我保护意识》

点赞2


评论


专业A货工厂专业A货工厂

我一个学C语言的第一眼看过去哇这什么东西头文件都没敲return也不知道怎么用

往下滑后

我靠这js?我眼瞎了。

点赞1


评论


爱探险的可乐呀爱探险的可乐呀

Npc.interactHint = interactHint ? interactHint : Npc.id.split('-')[0];
Npc.interactRadius = interactRadius ? interactRadius : 3;
Npc.interactRadius = interactRadius ? interactRadius : new Box3RGBColor(0, 0, 0);
// 可简化:
Npc.interactHint = interactHint ?? Npc.id.split('-')[0];
Npc.interactRadius = interactRadius ?? 3;
Npc.interactRadius = interactRadius ?? new Box3RGBColor(0, 0, 0);

entity.player.name == 'xxx' ? entity.player.kick() : null;
// 可简化:
entity.player.name == 'xxx' && entity.player.kick();

三目运算符有时候也会变成“冗余繁杂”的代码。如果有以上这种需求直接用??、&&、||这种运算符即可。

点赞5


评论


卑微OIer卑微OIer

没事,比传奇的代码好。。。

你知道传奇代码是什么吗 if到底()()

点赞2


评论


源码极客源码极客

“代码能多简洁多简洁()别拿代码多当作骄傲的资本!)”

原来你知道这个道理啊)))

点赞0


评论


yee089yee089

不要乱封装啦,越封越乱。

老话:程序和程序员有一个可以跑就好了。能运行的依托答辩强过过不去编译的oop。

点赞1


评论


指令者指令者

哪个npc函数怎么用()挖到宝了()

点赞0


评论


指令者指令者

哪个大佬解释一下这个怎么用

function npc(selector, fn, interactHint, interactRadius, interactColor) {
    const Npc = world.querySelector(selector); 
    Npc.enableInteract = 1;
    Npc.interactHint = interactHint ?? Npc.id.split('-')[0]
    Npc.interactRadius = interactRadius ?? 3;
    Npc.interactRadius = interactRadius ?? new Box3RGBColor(0, 0, 0);
    Npc.onInteract(async ({ entity }) => {
        await fn(entity)
    })
}

点赞0


评论


艾博士艾博士

我是大屑,自动退出(doge

点赞0


评论


伴雪纷飞伴雪纷飞

原谅我的无知()

yee剑不是退了吗

点赞0


评论


伴雪纷飞伴雪纷飞

还有这个我在写插件时看到了

||null是什么仪式吗

点赞0


评论


SKQASKQA

?: && ||这三个没必要压到底。用if逻辑会更清晰,压行不过是减少字符数量

[0+Array(),JSON.stringify][-+-+false].constructor.fromCharCode.apply(String,new Array(31163,189.444**(Math.sin,2)))

点赞1


评论


锦衣侠客锦衣侠客

自己已晕

点赞0


评论


Star_Ink_sansStar_Ink_sans

对于1的解答()

se = secret 指的是那些回忆碎片(因为灵感来源于past world,past world这种东西叫秘密)

至于这个:

if (entity.se1 + entity.se2 + entity.se3 == 0) {
    //.....
}
if (entity.se1 + entity.se2 + entity.se3 == 1) {
    //.....
}
if (entity.se1 + entity.se2 + entity.se3 == 2) {
    //.....
}
if (entity.se1 + entity.se2 + entity.se3 == 3) {
    //.....
}

我不记得我这么写的()应该是屑剑为了节目效果改的()要么我记错了()但我明明记得我就写的:

if (entity.se1 + entity.se2 + entity.se3 == 3) {
//.....
}
else {
//...
}

点赞0


评论


呵呵0486呵呵0486

都是吉吉的教程和API手册里教程的锅(bushi()

点赞0


评论


box3的果敢的超能鸭viwXbox3的果敢的超能鸭viwX

哇~~

点赞0


评论


yee剑走天下yee剑走天下

挖坟emotion_doge

点赞0


评论


AokenAoken

挖坟()

点赞0


评论


AokenAoken

喵d

点赞0


评论


星辰Lolita星辰Lolita

等代码多了()存储要放到database.js()操作得放到cmd.js()对话之类的数据放到data.js()怪物得放到enemy.js()物品得放到item.js(后面两个不出意外的话都有几千行())index把库调一遍然后写定时器()

点赞1


评论


tiger666250tiger666250

其实很多代码问题我还是有的(

 

积极认错,绝不悔改!

 

我写代码不喜欢写分区,分区一般都是那些单独的管理员特权啊或者一些函数,我感觉写分区各种变量搞不明白。

 

分号这东西可加可不加没啥可吐槽的,我一个C++的Oier也经常忘记打分号。

 

还有return的事情在有些情况下可以减少时间复杂度可以优化卡顿(特别实在一些async function中用

 

还有就是为啥代码都说要什么什么精简啊,三目运算符算啥啊,重点是能看懂吧()

 

还有,sql一般最后写吧,前面写得多改的更多,最后写一次解决基本不会出现sql有三次这种问题(我个人喜欢把sql放在所有代码的最前面或者最后面,一般放在最前面(

 

npc的话一般来说我会在每个npc分别定义个npc的标签然后所有搜一边这样会方便很多

 

给玩家变量名字的问题,我感觉问题不大吧,在定义时标注一下写的是啥就行(

 

还有最重要的:

 

我特别不喜欢代码格式化啊啊啊啊(我习惯不打空格)

 

除非:

#include <iostream>
#include <cstring>
#define int long long
using namespace std;
inline int read(){
    char c=getchar();
	int x=0,f=1;
    while(c<'0' || c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
    while(c>='0' && c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
int n,m,q;
int arr[1000005];
int brr[1000005];
int dp[601][601];
signed main(){
	n=read();
	m=read();
	q=read();
	for(int i=1;i<=m;i++)
		for(int j=0;j<=q;j++)
			dp[i][j]=喵10;
	for(int i=1;i<=n;i++){
		arr[i]=read();
		brr[arr[i]]++;
	}
	for(int i=1;i<=m;i++)
		for(int j=0;j<=q;j++)
			for(int k=0;k<=j;k++)
				dp[i][j]=min(dp[i][j],dp[i-1][k]+((brr[i]/(j-k+1)+1)*(j-k+1)-brr[i])*(brr[i]/(j-k+1))*(brr[i]/(j-k+1)+1)/2+(j-k+1-((brr[i]/(j-k+1)+1)*(j-k+1)-brr[i]))*(brr[i]/(j-k+1)+1)*(brr[i]/(j-k+1)+2)/2);
	cout<<dp[m][q];
	return 0;
}

(本人打过的一个C++代码(小声))

点赞5


评论


AokenAoken

挖)

点赞0


评论