TypeScript 中的“自由形式函数”?

问题描述 投票:0回答:1

我正在阅读 Typescript 文档。

重新思考班级

C# 和 Java 就是我们所说的强制 OOP 语言。在这些语言中,类是基础 代码组织的单位,也是运行时所有数据和行为的基本容器。 强制将所有功能和数据保存在类中可能是解决某些问题的良好领域模型, 但并非每个域都需要以这种方式表示。

免费功能和数据

在 JavaScript 中,函数可以存在于任何地方,并且数据可以自由传递,而无需在内部 预定义的类或结构。这种灵活性是极其强大的。 “免费”功能 (与类无关的)在没有隐含 OOP 的情况下处理数据 层次结构往往是用 JavaScript 编写程序的首选模型。

使用 C 语言编程多年,这提醒我函数始终是可访问的(全局范围);我只需要包含头文件。此外,函数可以在任何文件中声明,这使得搜索代码变得很有趣。 (对于今天的编辑来说,这不是问题。)

OOP 语言为编码带来了结构/组织,但 TypeScript 似乎又回到了“美好的旧时光”。

我的解释正确吗?

typescript
1个回答
2
投票

OOP 语言为编码带来了结构/组织,但 Typescript 似乎又回到了“美好的旧时光”。

不。所表达的观点更为微妙:在 C# 和 Java 中,组织单位是类。特别是,标识符的可见性是相对于类进行控制的:私有成员对类可见,受保护成员对类及其子类可见,公共成员对所有类可见。

在 TypeScript 中,组织单位是模块(“源文件”),而不是类。特别是,标识符的可见性是相对于模块进行控制的,未导出的标识符仅在模块内可见,而导出的标识符在任何地方都可见。

也就是说,在C#和Java中,类是组织手段。在 TypeScript 和 JavaScript 中,组织方式与类无关。

拥有一个导出函数而不是类的模块并没有什么问题。特别是,这样写是完全可以的:

export function formatNumber(n: number) {
    // code to format a number for display
}

你不必写

export class NumberFormatter {
    formatNumber(n: number) {
        // code to format a number for display
    }
}

Java 是一种面向对象的编程语言。它希望您使用具有状态、行为和封装的对象来组织程序。

JavaScript 是一种多范式编程语言。它支持与 Java 非常相似的面向对象风格,但它也支持函数式或过程式风格。您可以选择最适合当前问题的样式。许多使用 OOP 语言的人都惊讶于 OOP 很少被证明是最合适的。

© www.soinside.com 2019 - 2024. All rights reserved.