找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

查看: 66|回复: 0

[心得] aardio 模块化管理

[复制链接]
  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 74 天

    连续签到: 5 天

    [LV.6]常住居民II

    39

    主题

    79

    回帖

    1030

    积分

    钻石会员

    积分
    1030
    来自: 中国贵州贵阳
    发表于 2025-6-16 11:34:13 | 显示全部楼层 |阅读模式 来自: 中国贵州贵阳
    非业余 - aardio 编程语言 - 非官方问答社区
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA
    本帖最后由 XWCXF 于 2025-6-16 11:35 编辑

    今天学习aardio的模块化设计,感觉就像在用积木搭建程序世界,每个模块都是独立的功能块,组合起来就能实现复杂功能。这种将大问题拆分成小模块的思路,让编程变得清晰又有趣。

    一、模块的创建与基础使用

    (一)初次尝试模块编写

    试着写了个数学工具模块,把加法和减法封装在一起,将文件保存在用户库里:

    [AAuto] 纯文本查看 复制代码
    // mathUtils.aardio文件内容
    namespace mathUtils{
        class category{
            add=function(a,b){ return a + b; }
            subtract=function(a,b){ return a - b; }
        }
    }



    主程序里用import引入后,像这样调用:

    [AAuto] 纯文本查看 复制代码
    import mathUtils;
    import console;
    var calc = mathUtils.category();
    console.log(calc.add(2,4)); // 输出6
    console.log(calc.subtract(5,3)); // 输出2
    
    console.pause();


    第一次体会到模块的好处:把常用功能单独放一个文件,主程序只需要关注逻辑流程,代码一下子清爽了很多。就像把不同形状的积木分类存放,用的时候直接拿出来就行。

    (二)模块的结构理解
    这里的namespace就像模块的"名字空间",把相关的类和函数装在一起,避免命名冲突。class里的方法就是具体的功能实现,调用时要先创建类的实例,比如mathUtils.category()

    二、模块间的依赖管理

    (一)复杂模块的依赖实践

    尝试写了一个依赖数学模块的乘法功能:

    [AAuto] 纯文本查看 复制代码
    // advancedMath.aardio
    namespace advancedMath{
        import console;
        class multiplication{
            multiply = function(a,b){
                
                import mathUtils; // 在方法内引入依赖模块
                var add = mathUtils.category().add;
                var result = 0;
                for(i=1; b; 1){
                    result = add(result,a);
                }
                return result;
            }
        }
    }



    主程序测试时发现,虽然乘法是通过重复加法实现的,但因为封装在模块里,调用时完全不用关心内部细节:

    [AAuto] 纯文本查看 复制代码
    import advancedMath;
    
    console.log(advancedMath.multiplication().multiply(5,3)); // 输出15
    
    console.pause();


    三、模块的封装与接口设计

    (一)用户管理模块的封装练习

    写了一个用户管理模块,把用户数据存在模块内部,只暴露添加用户和获取数量的接口:

    [AAuto] 纯文本查看 复制代码
    // userManager.aardio
    namespace userManager{
        import console;
        var users = {}; // 模块内部数据,外部不能直接访问
        class userManagers{
            addUser = function(name){ ..table.push(users,name); }
            getUserCount = function(){ return #users; }
        }
    }



    主程序只能通过这两个方法操作数据:

    [AAuto] 纯文本查看 复制代码
    import userManager;
    var manager = userManager.userManagers();
    manager.addUser("Alice");
    manager.addUser("Bob");
    console.log(manager.getUserCount()); // 输出2
    
    console.pause();


    (二)封装的意义
    这种设计就像给积木盒加了盖子,只留几个开口让你拿积木。模块内部的users数组被隐藏起来了,外部只能通过addUser和getUserCount这两个"接口"操作数据,这样既安全又不会让使用者混乱。

    四、综合练习:文件工具模块开发

    (一)题目要求

    创建fileUtils模块,实现计算文件行数和读取内容的功能,在主程序中测试。

    (二)代码实现
    [AAuto] 纯文本查看 复制代码
    // fileUtils.aardio
    import fsys.file;
    namespace fileUtils{
        class fileUtil{
            countLines = function(filePath){
                var file = ..fsys.file(filePath, "r");
                if(!file) return 0;
                var lineCount = 0;
                while(true){
                    if(!file.read()) break;
                    lineCount++;
                }
                file.close();
                return lineCount;
            }
            
            readFirstLines = function(filePath, lineCount){
                var file = ..fsys.file(filePath, "r");
                if(!file) return {};
                var lines = {};
                for(i=1; lineCount; 1){
                    var line = file.read();
                    if(!line) break;
                    ..table.push(lines, line);
                }
                file.close();
                return lines;
            }
        }
    }
    
    
    // 主程序测试
    import fileUtils;
    var filePath = "D:/test.txt"; // 替换为实际文件路径
    var fileTool = fileUtils.fileUtil();
    console.log("文件行数: " + fileTool.countLines(filePath));
    
    var first3Lines = fileTool.readFirstLines(filePath, 3);
    for(i=1; #first3Lines; 1){
        console.log("第" + i + "行: " + first3Lines[i]);
    }





    五、总结
    • 模块的核心价值:把大程序拆成小功能块,每个模块只做一件事,就像积木各有形状,组合起来功能强大。
    • 关键知识点
      • namespace用于定义模块边界,避免命名冲突
      • 封装时隐藏内部数据,只暴露必要接口,保证模块安全
    • 实践感悟:模块化设计不仅让代码更整洁,还能提高复用性。比如今天写的mathUtils模块,以后做其他计算时都可以直接用。



    非业余 - aardio 编程语言 - 非官方问答社区
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA
    回复

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|非业余 - aardio 编程语言 - 非官方问答社区 知道创宇云防御

    GMT+8, 2025-6-27 18:28 , Processed in 0.125862 second(s), 30 queries .

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表