作者:梁利锋 标签:其它作品, TextExchange

4070天前 (阅读:4508)
  本软件用于将文本的字符串转换为 Text、Default、Unicode、UTF-8 之间的互相转换,用于文本查询。转换结果使用十六进制表示。

  D 语言版不需要特殊的运行库支持。相对于 VB5 版增加了允许输入十六进制的功能,相对于 .net 版减少了一些功能。

  对于我自己来说,这是练习使用 D 语言的一个副产品。

  程序使用 D 1.0, phobos 和 dfl 开发。

  在这一次练习中,发现 D 语言使用上可以和 c# 很类似,比如我写的 HexStringCoding 类,从 c# 复制过来,只修改了几个小地方(如增加 cast,去除 unsafe),就可以正常编译并且正常运行。另外,和 c/dll 的集成也不错,使用 WideCharToMultiByte 之类的系统函数还是很方便的。dfl 大体模仿 .net,所以使用起来很方便。

  不过,问题也不少。

  比如 bool 类型可以和任何可以转换为 0 和 1 的值进行隐式转换,就是一个语言方面的缺陷。

  另外,D 语言选择 char[] 当作字符串来处理,也是一个非常不可理解的事情。char[] 被定义为 utf8,所以如果要对它进行随机检索的话,就需要更多的代码和更差的运行效率,在我看来,utf8 根本不适合作为程序内部处理字符串的编码方案。utf16 才适合。另外,没有 string 类,而用数组来代替 string 的做法也问题多多,除了强类型检测之外,string 类还应该提供相应的字符串处理函数,而不是使用全局函数处理字符串。在我做这个程序的时候,是都使用 utf16 的 wchar[] 来做中间的字符串代替品的,不过,dfl 遵循使用 char[] 的方案,所以,和界面交互的部分也做了转换处理。也许以后可以修改一下 dfl 的代码,使之直接使用 utf16 吧。

  另一个问题是,无法使用 obj == null 来判断一个实例是否为空,这个问题不知道别人有没有遇到,或者有什么别的解决方案,我是通过 try catch 的方式处理了,不过感觉很不爽。

  另外,还遇到一个问题,基类定义了 abstract 的函数,子类实现了,但是没有使用 override 关键字,编译通过,但是运行结果莫名其妙,加上 override 之后就正常了。这个问题可能造成错误的几率要比上面说的问题大的多,本来,D 应该在这种情况下编译出错才是。

  对于 dfl,也稍微说一下,它使用了首字母小写的方式,在我看来,既然模仿 .net,就不如模仿个彻底,让大家把 .net 的程序复制过来后,做最少的修改就能编译运行才好 —— 所有首字母改成小写,也是一个不小的工程啊。

  Tango 的安装步骤很罗嗦,我还没有试过,不过,嗯,回头还是应该试一下的。


点睛文本编码查询 D 语言版下载

梁利锋 2008-1-1 14:40:38

又试了一下,判断 obj 是否为 null 可以使用 obj is null,只是不理解为什么 obj == null 不会造成编译错误。

Ant-man(非注册用户) 2008-1-7 20:26:05

obj == null
应该是
obj is null
D的文章里有提过

梁利锋 2008-1-8 1:00:13

@Ant-man:谢谢,这个问题已经知道了。不过不清楚为什么 obj == null 不会编译错误,有人它是指针比较,更迷惑了,指针比较不是应该用 &obj == null 么?

丹丹(非注册用户) 2009-5-12 16:26:06

梁先生你好,我想请问你能否知道瞿伦川的联系方式,或者能否帮我转告他一下,我们通过网上银行向他重庆的建设银行卡上转入得钱在银行记录很清楚,难道他的卡上就真的没有钱入账吗?我们发邮件他不回,因为我是顾客,我认为我应该享有顾客应用的权利,他作为商人也应该向顾客尽到他的职责,我到银行查清楚了,我也打电话咨询了

丹丹(非注册用户) 2009-5-12 16:26:24

云网,现在我不管是他员工态度的问题 ,还是他的问题,都不能否定 事实。如果再不给我们一个合理的说法。对不起,你应该知道还有法律!  谢谢你转告!

梁利锋 2009-5-13 9:40:24

@丹丹:不好意思,完全没听说过瞿伦川这个人。另外,点睛工作室和他的“点睛软件工作室”也没有任何关系。