回 帖 发 新 帖 刷新版面

主题:没有人曾想过可以“如此如此奇妙”的编程

这是一个用MYL中文代码实现的例文。
我想,“没有人”曾经想过可以“如此如此简单”“如此如此清晰明了”的编程,
该例文是“如此如此轻松”的实现了千千静听的设置对话框和设置菜单。

(注:MYS是MYL的脚本形式)

********************************************


//此例文只模仿了千千静听设置对话框和设置菜单的部分内容,意在说明MYL编程语言的简单明了。

// ——MYL语言,没有废话的编程语言

// 我想,没有人会想到还可以这样编程,没有人会想到可以这样轻而易举的创建如此功能强大的"设置对话框"和“设置菜单”,
// 而且,这种设置对话框和设置菜单能自动的保存设置数据,也能自动的装载设置数据,
// 而且的而且,这种编程方式也没有限制保存数据的文件格式,既可以是INI文件格式,
// 也可以是XML文件格式,还可以把数据保存在注册表中,等等。
// 再而且的而且,这种编程方式根本没有限制对话框和菜单的表现形式,该菜单在Windows中是一个样子,在Dos中又是一个样子,
// 在kde中是一个样子,在gnome中又是一个样子。
// 再而且的而且,这种编程方式是直接面向数据,直接面向事务的编程,没有半句废话,而且代码层次分明,可读性超强。
// 这种编程方式有可能产生一种新的与底层系统无关标准组件,一种就象当初的cin,cout一样简单好用的标准组件。
// 该组件专门用来创建“设置对话框”、“设置菜单”、“向导对话框”、“状态保存”、“应用程序主窗口界面”等等。


//************************** 使用标准引用 **********************

+[标准界面引用.中文.Myl]


//************************** 定义变量 **************************


对象 某值,视觉效果,窗口透明度        //定义为Object
对象 播放模式,窗口阴影


字符串 列表,播放优先级,自动升级      //定义为String
是否 启动最小化                    //定义为Boolean

是否 不显示
是否 激活时不透明
是否 显示程序图标
是否 显示快捷键
是否 弹出播放提示
是否 分多列
是否 滚动歌曲标题
是否 淡入淡出
是否 自动贴合
是否 自动切换
是否 自动关闭计算机
是否 清除列表
是否 自动播放
是否 继续上一
是否 出错暂停
是否 针对列表
是否 粗的频带
是否 在播放时
是否 在暂停时
是否 在交叉定位时
是否 在停止时
是否 在歌曲自动切换时
是否 显示命令提示
是否 发送歌曲标题


成员引用 暂无引用



//******************** 创建一个设置对话框 ****************************


设置 我的设置=        
            
设置[千千静听选项]{                //生成一个设置对话框,并进一步初始化

                                //** 在此必须解释一下:MYL语言创建新的对象可以不使用“New”关键字,
                                //** MYL语言的常量字符串的引用是用“[]”,
                                //** “设置[千千静听选项]” 等价的C#语法为“new Setting("千千静听选项")”

    条目[常规]{                    //生成设置对象的一页(或一项) 并对其进一步初始化

        群组[选项]{                //生成一个群组对象 并进一步初始化, 该对象自动被加入到这一页

            是否[启动播放器后最小化](@启动最小化)              //生成一个CheckBox                                  
            是否[在系统栏显示程序图标](@显示程序图标)        
            是否[在工具提示中显示快捷键](@显示快捷键)    
            是否[在屏幕右下角弹出播放提示](@弹出播放提示)
            是否[在菜单上显示命令提示](@显示命令提示)
            是否[分多列显示播放列表菜单](@分多列)
            是否[在任务栏滚动歌曲标题](@滚动歌曲标题)
            是否[向MSN7发送歌曲标题](@发送歌曲标题)
            是否[淡入淡出效果显示主要窗口(需要Window2000或更高)](@淡入淡出)
            
            是否[当窗口靠近时自动贴合](@自动贴合){        
                数值[选择距离(像素)](暂无引用)            
            }
            是否[标题栏自动切换歌曲信息](@自动切换){
                数值[选择延时(秒)](暂无引用)
            }
            是否[自动关闭计算机](@自动关闭计算机){
                数值[选择延时(分)](暂无引用)
            }
        }
        
        群组[命令行方式(从外部打开或添加文件)]{
        
            是否[从命令行方式打开文件时先清除当前播放列表](@清除列表)
            是否[从命令行方式操作时总是针对这个列表](@针对列表){
                文件[选择列表](@列表)
            }

        }
        
        选择[自动检查软件新版本的频率](@自动升级){
        
            条目[不检查]
            条目[每天]
            条目[每周]
            条目[每月]
            条目[自定]{
                数值[天数](暂无引用)            
            }

            按钮[立即检查]{{ 说[检查完毕!] }}
            
                //** 在此必须解释一下:
                //** 当按钮被点击时,双大括号中的代码将被执行。
        }

    }



    条目[播放]{                                //生成设置对象的第二页 并对其进一步初始化
    
        群组[播放]{
        
            是否[程序启动时自动播放](@自动播放)
            是否[继续上一次的播放进度](@继续上一)
            是否[出现错误时不再连续播放](@出错暂停)
            数值[连续播放文件的时间间隔(秒)](暂无引用)
            
            选择[播放模式](@播放模式,下拉风格){
                [单曲循环]
                [顺序播放]
                [循环播放]
                [随机播放]
            }   
            
            选择[播放优先级](@播放优先级,下拉风格){
                [最高]
                [普通]
                [空闲]
            }
            数值[全文件缓冲(kb)](暂无引用)
        }
        
        群组[声音的淡入淡出]{
        
            是否[在播放时](@在播放时){
                数值[毫秒](暂无引用) 
            }
            是否[在暂停时](@在暂停时){
                数值[毫秒](暂无引用)
            }
            是否[在交叉定位时](@在交叉定位时){
                数值[毫秒](暂无引用)
            }
            是否[在停止时](@在停止时){
                数值[毫秒](暂无引用)
            }
            是否[在歌曲自动切换时](@在歌曲自动切换时){
                数值[毫秒](暂无引用)
            }
        }


    }



    条目[视觉效果]{                        //生成设置对象的第三页 并对其进一步初始化
    
        群组[选项]{
            选择[视觉效果类型](@视觉效果,[下拉风格]){
                [不显示]
                [梦幻星空]
                [频谱分析]
                [示波显示]
            }
            数值[分析显示速度](暂无引用)
        }
        
        群组[频谱分析]{
            标签[配色方案:]
            
            颜色[高峰](暂无引用)
            颜色[顶端](暂无引用)
            颜色[中端](暂无引用)
            颜色[底端](暂无引用)
            
            是否[显示粗的频带(柱状)](@粗的频带)

        }
        
        是否[窗口阴影](@窗口阴影)
                
        
    }
    
    //**** 当用户点击确定按钮时显示一些成员值 ********
    
    当确定时{{
    
        说[
            视觉效果        =[视觉效果] 
            启动最小化    =[启动最小化]
            自动升级        =[自动升级]
            播放优先级    =[播放优先级]
            自动贴合        =[自动贴合]
            自动切换        =[自动切换]
            自动关闭计算机=[自动关闭计算机]
            清除列表        =[清除列表]
            
        ]        
                //** 在此必须解释一下:
                //** MYL语言的常量字符串的引用是用“[]”,
                //** MYL语言的常量字符串可支持多行字符串,
                //** MYL语言的常量字符串中可以使用“[]”插入变量的值。
        
            
    }}


}             //关闭我的设置的初始化,并在此时执行值的装载从硬盘。



//************************ 创建一个菜单设置 *************************


设置菜单 我的设置菜单=                    
设置菜单[千千静听内容菜单]{        

    主设置=我的设置

    条目[播放模式]{
    
        选择[播放模式](@播放模式){
            [单曲循环]
            [顺序播放]
            [循环播放]
            [随机播放]
        }   
        
        分隔条()
        
        命令[自动切换列表]{{ 说[自动切换列表] }}

    }
    
    条目[视觉外观]{
    
        选择[视觉效果类型](@视觉效果){
            [梦幻星空]
            [频谱分析]
            [示波显示]
            [不显示]
        }        
        
        分隔条()
        
        命令[选项]{{ 我的设置.显示[视觉效果] }}        
    
    }
    
    条目[窗口透明度]{
    
        选择[窗口透明度](@窗口透明度){
            [不透明]
            [10%透明]
            [20%透明]
            [30%透明]
            [40%透明]
            [50%透明]
            [60%透明]
            [70%透明]
            [80%透明]
            [90%透明]    
        }
        
        是否[激活时不透明](@激活时不透明)
        
        分隔条()
        
        是否[窗口阴影](@窗口阴影)
        
    }
    条目[其他]{
        打开文件[打开]{{ 说[你打开的文件是[值]] }}
        保存文件[保存]{{ 说[你保存的文件是[值]] }}
        命令[设置]{{ 我的设置.显示() }}
        命令[命令4]
        命令[命令5]
    
    }
        
    命令[显示一些成员值]{{
        说[
            视觉效果    =[视觉效果]
            窗口透明度    =[窗口透明度]
            窗口阴影    =[窗口阴影]
            播放模式    =[播放模式]
        ]
    }}
}


//****************** 创建一个窗口来测试 设置对话框 和设置菜单

窗口 测试窗口=
窗口[请查看右键菜单]{
    
    开始位置=窗口开始位置.手工;
        
    我的设置菜单;        
    
}


//****************** 创建一个状态保存用以保存测试窗口的状态 ***********


状态保存[我的状态保存]{
    @测试窗口.左边
    @测试窗口.顶边
    @测试窗口.高度
    @测试窗口.宽度

}


//******************* 使用应用程序的运行方法来运行程序 *****************
    
应用程序{

    当程序退出时{{ 
        //说[应用程序退出了];
    }}

    运行(测试窗口)
}


回复列表 (共5个回复)

沙发

(继续上)

以上程序的运行效果如下:

[img]http://blog.pfan.cn/upfile/200906/20090609152136.jpg[/img]
[img]http://blog.pfan.cn/upfile/200906/20090609151920.jpg[/img]
[img]http://blog.pfan.cn/upfile/200906/20090609165057.jpg[/img]
[img]http://blog.pfan.cn/upfile/200906/20090609152112.jpg[/img]
[img]http://blog.pfan.cn/upfile/200906/20090609152015.jpg[/img]
[img]http://blog.pfan.cn/upfile/200906/20090609165131.jpg[/img]

板凳

(继续上)

你看,MYL语言只需简单的几十行代码就可以实现以上功能强大的设置对话框和设置菜单,而且没有半句废话(如果谁还认为其中有垃圾代码,真心希望回复),再而且程序员无需编写设置数据的保存代码,也无需编写设置数据的装载代码,也无需关心对话框和菜单的表现形式,这使得这些代码看起来非常抽象,这也使得代码的移植性也变得非常容易。

这些代码直接针对我们所关心的事务,其实也应该这么简单,一个程序不就是“接受数据”“处理数据”“显示数据”吗?干嘛要搞的那么复杂啊?
以上代码不就是一个“接受数据”的编写过程吗?(当然其中也包括显示数据的代码)

就这样一个简单的设置对话框和设置菜单,用其他编程语言的编写情况怎么样呢?我想即使使用微软的Visual工具,也不那么容易,程序员需要在Visual工具和代码之间来回的切换,而且还要为建立的每一个对象定位,编辑属性,取名或取id,等等许多额外的工作,而且程序员还要编写设置数据的保存代码和设置数据的装载代码,这需要使用更多的WindowsAPI,这也使得这些代码在将来更难移植,也使代码更复杂难懂,更重要的是浪费了程序员的宝贵时间。

再从MYL代码的结构上看,MYL语言代码的结构是多么的清晰,层次分明,可读性可谓超强,无与伦比。

从创新来讲,MYL语言有许多创新,如:常量字符串的引用是用“[]”,字符串的“插入运算”,对象的进一步初始化运算用“{}”,简单的事件代码用“{{ }}”,容器对象中的“自动加入”,等等。

(初始化运算“{}”、事件代码“{{}}”、“自动加入”的内部实现机制且听下回分解...)

3 楼


这是一个用MYL中文代码实现的例文。
我想,“没有人”曾经想过可以“如此如此简单”“如此如此清晰明了”的编程,
该例文是“如此如此轻松”的实现了千千静听的设置对话框和设置菜单。
 

4 楼

我用C++Builder也可以啊,甚至更简单。。。

5 楼

首先感谢关注本人的帖子,其次本人对你的帖子很感兴趣,你不妨举个例子看看,我想研究一下。

我来回复

您尚未登录,请登录后再回复。点此登录或注册