标题: [教程] 中文版的TJS2文档
rednaxela
会员
Rank: 1



UID 17
精华 0
积分 24
帖子 6
阅读权限 5
注册 2006-12-23
 
发表于 2007-11-1 16:21  资料  短消息  加为好友 
赞美役不缺,来做吐槽役 ^ ^

还是想说,翻译得不错。看得出很用了心机来做这个翻译。虽然有些习惯和风格跟我习惯的不一样,不过内容都清晰的翻译出来了。
说起来,我比较喜欢直接说“getter/setter方法”,而不太习惯“读取函数/设置函数”;MSDN上的文档也是用前者的;但后者也的译法也确实存在,例如说《JavaScript高级程序设计》(人民邮电出版社出版的中文翻译版)里采用的是“获取函数/设置函数”。

下面是随意翻阅的时候看到的一些错误:

\tjs2doc\contents\class.html

QUOTE:
注意,在类的方法和属性里创建该类的对象或该类的超类的对象的时候,下面这样写是错误的。

无伤大雅,不过如果“像”字都统一到一种用法应该会更干净。

QUOTE:
已创建的对象的方法和属性是携带着“属哪个对象”的信息被注册到对象中的。

错字

QUOTE:
译者注:“オーバーライド”貌似应该翻译成 “override”,这在中文的C++相关资料中被称为“覆盖”。但是,在TJS2中没有虚函数和晚捆绑机制以及多态性,所以,以下将这一现象称为“隐藏”。感谢Bruce Eckel和他的《Thinking in C++》。

这里可以看出翻译时花的精力,不过我不太赞同这段注释。override在这里翻译为“覆盖”或者“重写”就已经是合适的了。
参考下面代码(startup.tjs):

class A {
    function foo() {
        foo2();
    }

    function foo2() {
        System.inform("A.foo2");
    }
}

class B extends A {
    function foo2() {
        System.inform("B.foo2");
    }
}

var v = new B();
v.foo();  // B.foo2
v.foo2(); // B.foo2
// ((A)v).foo(); // cannot cast in TJS2

如果是单纯的“隐藏”,那么函数实现与类型是静态绑定的。反映在上面的例子里,如果调用v.foo()时,弹出的对话框显示A.foo,则foo2在B中只是“隐藏”了A中的版本;但这里的表现并非如此,v.foo()与v.foo2()都得到了一样的结果。v.foo2()无论在“隐藏”还是“覆盖/重写”(override)都会有一样的表现,但v.foo()所表现出的特性与虚函数的特性是一致的。
Java中所有函数(准确说是方法)都默认是虚函数,不会有单纯的“隐藏”而只有覆盖/重写;C++的语法与TJS2相差较多;JavaScript在当前标准(ECMAScript v3)下仍然采用prototype-based的面向对象模型,跟这里模型不同。因而上面三种语言都不太好用于跟TJS2类比。个人倾向于用C#与TJS2在这个问题上类比:

class A
{
    public void foo() {
        foo2();
    }

    public void foo2() {
        System.Console.WriteLine("A.foo");
    }
}

class B1 : A
{
// warning CS0108: 'B1.foo2()' hides inherited member 'A.foo2()'.
//        Use the new keyword if hiding was intended.
    public void foo2() {
        System.Console.WriteLine("B1.foo");
    }
}

class B2 : A
{
    public new void foo2() {
        System.Console.WriteLine("B2.foo");
    }
}

sealed class Program
{
    public static void Main(string[] args) {
        B1 b1 = new B1();
        A a1 = b1;
        a1.foo();  // A.foo
        b1.foo();  // A.foo
        a1.foo2(); // A.foo
        b1.foo2(); // B1.foo

        B2 b2 = new B2();
        A a2 = b2;
        a2.foo();  // A.foo
        b2.foo();  // A.foo
        a2.foo2(); // A.foo
        b2.foo2(); // B2.foo
    }
}

上面这段C#代码展示了“隐藏”的情况。在C#中,函数(准确说是方法)默认不是虚函数,因而会与类型静态绑定;要“隐藏”(hide)一个非虚函数,需要显式使用new关键字来指定。由于C#是强类型语言,变量在声明的时候必须指定类型(使用var来声明变量仍然等同于指定了类型),所以在上面调用foo2()时可以看到几种不同的行为。需要指出的是,像B1那样定义foo2()是不合适的,编译器会发出警告并将方法声明看作用了new关键字来对待。

另一方面,来看看重写(override)的状况:

class A
{
    public void foo() {
        foo2();
    }

    public virtual void foo2() {
        System.Console.WriteLine("A.foo");
    }
}

class B1 : A
{
// warning CS0114: 'B1.foo2()' hides inherited member 'A.foo2()'.
//        To make the current member override that implementation, add the
//        override keyword. Otherwise add the new keyword.
    public void foo2() {
        System.Console.WriteLine("B1.foo");
    }
}

class B2 : A
{
    public override void foo2() {
        System.Console.WriteLine("B2.foo");
    }
}

sealed class Program
{
    public static void Main(string[] args) {
        B1 b1 = new B1();
        A a1 = b1;
        a1.foo();  // A.foo
        b1.foo();  // A.foo
        a1.foo2(); // A.foo
        b1.foo2(); // B1.foo

        B2 b2 = new B2();
        A a2 = b2;
        a2.foo();  // B2.foo
        b2.foo();  // B2.foo
        a2.foo2(); // B2.foo
        b2.foo2(); // B2.foo
    }
}

在C#中,用virtual关键字来修饰一个方法可以将方法声明为虚函数,这里A.foo2()就是一个虚函数;要覆盖/重写一个虚函数,需要显式用override关键字。上面的代码片段中,B1的声明是不合适的,编译器默认给方法加上了new关键字,因而其测试结果于上一个例子一样,体现的是单纯的“隐藏”。B2则体现了虚函数的特性,无论用超类还是子类的引用去调用一个方法,得到的都是实际对象类型的版本的方法。

在TJS2中,类的实现可以被想象为一个动态关联数组。即使如此,其中的成员函数(方法)仍然保持了一般意义上虚函数的特性。

\tjs2doc\contents\pp.html

QUOTE:
编译表达式的书写风格和 C 中的预处理指令不同,是在哪里都能写的自由风格。并不是像 C 中那样每行只能写一条指令。

漏字

QUOTE:
在“表达式”那个位置指定条件编译表达式。 @if ~ @endif 可以套。

错字

其它部分还没看……看了再说。
另外,剩余没翻的部分我这个周末可能会翻出来。到时候发给船长或者米粒吧~

(本来是想顺手把看到的错误修改好发为附件的,但是不巧现在我不在工作机上,没十六进制编辑器,碰到这样的东西觉得不该随便在文件上改...:

QUOTE:
<link href="browser.css" type="text/css" rel="stylesheet" title="吉里吉里相关标准参考样式" />

sorry...)

[ 本帖最后由 rednaxela 于 2007-11-1 17:33 编辑 ]

顶部
loki_zero
会员
Rank: 1



UID 1198
精华 0
积分 57
帖子 13
阅读权限 5
注册 2008-8-3
 
发表于 2009-2-7 13:14  资料  短消息  加为好友 
真是太感谢了

顶部
leyyee (~醉眠芍药荫~)
会员
Rank: 1


UID 1720
精华 0
积分 26
帖子 5
阅读权限 5
注册 2008-12-26
来自 太虚幻境
 
发表于 2009-6-8 13:09  资料  主页 短消息  加为好友  QQ
谢谢了...以此作为入门吧....

顶部
littlewater
会员
Rank: 1
水水在KRKR


UID 110
精华 0
积分 7226
帖子 1447
阅读权限 5
注册 2007-3-12
来自 浙江杭州
 
发表于 2009-8-30 17:18  资料  主页 短消息  加为好友  添加 littlewater 为MSN好友 通过MSN和 littlewater 交谈 QQ
FX大到处都能吐糟真美^^





水水在KRKR
顶部
 



清除 Cookies - 联系我们 - [Key Fans Club] the Council of Doujin-game Development and Promotion - Archiver - WAP
Powered by Discuz! 5.5.0 © 2001-2006 Comsenz Inc.
Processed in 1.018000 second(s), 8 queries , Gzip enabled
粤ICP备05060595号
[ 当前模板 - 天高云淡 v 设计制作 - 七星论坛 v 请使用1024*768或以上分辨率浏览本模板 ]
请勿删除或修改此处版权图示