写了十几年程序,今天才第一天知道什么是屎山代码

可以说,我确实没在工作中用过Javascript,因为我从未见过如此"厚颜无耻"的代码

我曾经也是学过2~3年,还是JQuery的年代,但应该确实没在实战中用过,否则我怎么会不记得写过这些屎山代码的???

(当年,第一个吃到螃蟹的,赚到第一桶金的是DICUZ,PHP的;真还不是写JAVASCRIPT的)

一个看上去平平无奇,像模像样的类Js代码

代码1

cs 复制代码
            recipeSection.Add(recipeRow);
            //在上面套用 preset??:自己写的方法:VisualElementPresets.CreateStandardCategoryEditor(),作用是再套了个 MemberGroupControl()
            //就是用category 绘制
            ve.Add(new Label("Categories(强行套用Category 的[Inspector])").CenterContents());
            ve.Add(groupControl);//group == category ,就是用 categoriesCtl 做绘制。。。。。
            ve.Add(recipeSection);   
            return ve; 

结果某一天。。。。。

要是,你只是想在Unity VisualElement UI 添加一个按钮 Button

代码1-1

cs 复制代码
            recipeSection.Add(recipeRow);
            //在上面套用 preset??:自己写的方法:VisualElementPresets.CreateStandardCategoryEditor(),作用是再套了个 MemberGroupControl()
            //就是用category 绘制
            ve.Add(new Label("Categories(强行套用Category 的[Inspector])").CenterContents());
            ve.Add(groupControl);//group == category ,就是用 categoriesCtl 做绘制。。。。。
            ve.Add(recipeSection);
            //在这"再添加一个操作按钮吧,测试GridView"));
            var testButton = new Button(() => {
                //这是一个构造函数??(不是,TMD这是一个clickEvent,不是构造函数。。。。)
                // 下面的{text = "xxxxx"},这个描述语言,TMD才是构造函数,就问你惊喜不惊喜,意外不意外???
                // 下面这么写C# 构造函数,也是有不少的。。。。。
                ///
                ///
                //可以插入一万行代码,事实上 Init的代码就不会少。。。。
            }){ text = "测试GridView(ItemObjectEditor)" };//这里加的 text 描述。。。。
            ve.Add(testButton);
            return ve;

如果我什么都不说,一般人会不会看到这样的代码就给我扣帽子:"这样的代码,大牛写的真好啊,就是不同于常人,非常飘逸,肯定另有深意,简直的"

写JavaScript的都是什么人?面对这样的屎山代码,这些年,你们都是怎么过 的??

我好像曾经在2~3个团队,明令禁止这么写代码

而必须规范地写成如下:

但其实再多地外部规范,远不及代码本身底层规则 ,很快这些规范就不会被执行,也多此一举立规范,和立FLAG 是差不多的逻辑,根本不要立FLAG

"//--------------------"

当然,我的文章都写很多废话的

看,这又是一句废话

就问你,烦不烦

"//----------------------/"

"//----------------------// 又是一行废话,备注 //"

代码2

cs 复制代码
            recipeSection.Add(recipeRow);
            //在上面套用 preset??:自己写的方法:VisualElementPresets.CreateStandardCategoryEditor(),作用是再套了个 MemberGroupControl()
            //就是用category 绘制
            ve.Add(new Label("Categories(强行套用Category 的[Inspector])").CenterContents());
            ve.Add(groupControl);//group == category ,就是用 categoriesCtl 做绘制。。。。。
            ve.Add(recipeSection);
            //在这"再添加一个操作按钮吧,测试GridView"));
            var testButton = new Button(){ text = "测试GridView(ItemObjectEditor)" };//这里加的 text 描述。。。。
            testButton.addClick(OnClick);//
                                         //写成EventWarpper(testButton).click += XXXX 都好
                                         //写多少行都行,都比较好
                                         //就是一行就是一个功能
                                         //是一行就行,重点不在于行数太多,而是每一行需要意义明确
                                         //千万不要学Json 无意义的括号这种 {  | =》 | });         
            ve.Add(testButton);
            return ve;


//无论是调试,还是规范,还是可阅读性,还是编辑器friendly
//都比Javascript 要好
//而 Javascript 为什么越看越像屎山代码????
//这个世界上,其实没那么屎山代码
// 30%的JavaScript 容易产生屎山代码,而30%在比例用Js,这个比例就很恐怖了
//当然我不靠Js赚钱,所以怎么吐槽都行。。。。。
function OnClick(eve)
{

}

//------------------ /

最终改成这样,是不是舒服很多???

代码2-final

cs 复制代码
            //。。。。。。。。。。

            recipeSection.Add(recipeRow);
            //在这"再添加一个操作按钮吧,测试GridView"));
            var testButton = new Button(testButtonClick);
            testButton.text = "测试GridView(ItemObjectEditor)";//这里加的 text 描述。。。。

            //在上面套用 preset??:自己写的方法:VisualElementPresets.CreateStandardCategoryEditor(),作用是再套了个 MemberGroupControl()
            //就是用category 绘制
            ve.Add(new Label("Categories(强行套用Category 的[Inspector])").CenterContents());
            ve.Add(groupControl);//group == category ,就是用 categoriesCtl 做绘制。。。。。
            ve.Add(recipeSection);
            //在这"再添加一个操作按钮 baabababa"
            ve.Add(testButton);
            return ve;
        }
        void testButtonClick()
        { 
            
        }

一个乱套,而崩坏的世界:

代码3

cs 复制代码
using System;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.UIElements;
using Object = UnityEngine.Object;

namespace Polyperfect.Crafting.Edit
{
    public class OpenForEditManipulator : Clickable
    {
        /// <summary>
        /// ObjectEditWindow.cs 点击item事件;会创建一个 window
        /// </summary>
        /// <param name="getObject"></param>
        /// <param name="clickCount"></param>
        /// <param name="ve">这个 ve 会乱动,所以需要 refreshAction()兜底刷新</param>
        /// <param name="refreshAction"></param>
        public OpenForEditManipulator(System.Func<Object> getObject, int clickCount,VisualElement ve, Action<VisualElement,Object> refreshAction = null)
            : base(() =>ObjectEditWindow.CreateForObject(getObject(), ve,refreshAction))//又是一个强行闭包
            
        {
//            UnityEngine.Debug.LogError("fffff click??");//一个点击,触发了15次。。。一个compile刷新 ,又执行了45次。。。。。
            //一共触发了60次。。。。
            //一共触发了60次。。。。
            //一共触发了60次。。。。
            //一共触发了60次。。。。.......
            //一共触发了60次。。。。.......
            //一共触发了60次。。。。..............
            //而且是多次触发。。。。
            //而且是多次触发。。。。
            //而且是多次触发。。。。
            //这是 一个构造函数,你敢想像
            //这是 一个构造函数,你敢想像
            //这是 一个构造函数,你敢想像
            activators.Clear();
            activators.Add(new ManipulatorActivationFilter {button = MouseButton.LeftMouse, clickCount = clickCount});
        }
    }
}
相关推荐
x-cmd6 分钟前
[250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
前端·javascript·windows·npm·node.js
夏之小星星19 分钟前
el-tree结合checkbox实现数据回显
前端·javascript·vue.js
我喜欢山,也喜欢海27 分钟前
Jenkins Maven 带权限 搭建方案2025
java·jenkins·maven
明天更新33 分钟前
Java处理压缩文件的两种方式!!!!
java·开发语言·7-zip
crazyme_633 分钟前
前端自学入门:HTML 基础详解与学习路线指引
前端·学习·html
铁锚39 分钟前
一个WordPress连续登录失败的问题排查
java·linux·服务器·nginx·tomcat
撸猫79142 分钟前
HttpSession 的运行原理
前端·后端·cookie·httpsession
华颉科技43 分钟前
机架式服务器是什么?机架式/塔式/刀片式三大服务器类型区别与选型全解析
服务器·科技·服务器类型·刀片服务器·机架服务器·塔式服务器
yychen_java1 小时前
上云API二开实现三维可视化控制中心
java·无人机
理智的煎蛋1 小时前
keepalived+lvs
java·开发语言·集成测试·可用性测试