当前位置: 首页 > news >正文

对 JavaScript 说“不”

JavaScript编程语言历史悠久,但它是在 1995 年大约一周内创建的。

它最初被称为 LiveScript,但后来更名为 JavaScript,以赶上 Java 的潮流,尽管它与 Java 毫无关系。

它很快就变得非常流行,推动了 Web 应用程序革命,并得到了地球上几乎所有 Web 浏览器的支持。

如今,JavaScript 可能是世界上最常用的编程语言。

多年来,我一直说 JavaScript 之于 Web 浏览器就像汇编代码之于 CPU。

当然,汇编语言是一种强大的语言,就像 JavaScript 一样,但我们拥有高阶语言是有原因的。

鉴于如今浏览器才是真正的操作系统,JavaScript 应该——而且最终会——在开发人员的心中走上汇编语言的道路。 

我并不否认 JavaScript 的成功和有效性。Web 就是建立在它之上的,尽管它存在很多缺陷,但人们还是用它做出了许多了不起的事情。

但我就是无法将 JavaScript 视为一种我们应该编写的语言,就像今天只有极少数开发人员编写汇编语言一样。

在构建 Windows 应用程序时,我更喜欢让编译器编写我的汇编语言,在构建 Web 应用程序时,我更喜欢让编译后的 TypeScript 为我编写 JavaScript。

TypeScript则是另一回事。现在有了一种编程语言。

TypeScript 由伟大的Anders Hejlsberg设计,它具有 JavaScript 的所有优点(例如它们本身),同时还添加了一个富有表现力和强大的类型系统。坦率地说,我不明白为什么有人会更喜欢 JavaScript 而不是 TypeScript。

为什么不使用 TypeScript?

首先,您可以按照自己的节奏开始使用 TypeScript。这不是全有或全无。所有 JavaScript 代码都是 TypeScript 代码。我(主要)开玩笑说,我很乐意收取一笔不小的费用,将所有 JavaScript 开发团队转变为 TypeScript 开发人员,只需将所有 *.js 文件更改为 *.ts 文件即可。

通过这一更改,他们将成为一家 TypeScript 商店,他们根本不需要改变编写代码的方式。然后他们可以逐渐开始按照自己的意愿使用 TypeScript。 

我缺乏理解进一步源于开发人员对使用 TypeScript 的无力反对。 

“所有这些类型都只是碍事而已”

好吧,当然,他们可能会妨碍你。你也许可以快速解决一些问题,并且了解你编写的代码的一切。

但是,当那些可怜的人看到你六个月或一年前的代码时,他们不得不试图弄清楚你在想什么,那该怎么办呢?(别介意那个可怜的人可能是你……)

这就像说“我想在一年内遇到无法预见的问题,而我却记不起所有这些代码应该做什么。”

通过输入所有内容,您可以清楚简洁地声明代码意图,并在整个代码库中执行这些意图。对于拥有许多开发人员的应用程序,能够清楚明确地表达代码的功能,这比需要其他开发人员花费认知精力才能弄清楚的代码具有巨大的优势。

“JavaScript 非常适合快速制作原型”

好吧,这没问题,但请考虑一下:我们都知道“原型”的概念有点可笑。可悲的是,将原型扔到一边并重新启动“真正的”应用程序的情况很少见。

原型成为真正的应用程序,您将永远陷入在匆忙拼凑原型时做出的糟糕基础决策中,您曾说过您永远不会部署原型,但最终还是部署了它。快速拼凑某物的能力并不是一种美德。

“JavaScript 非常适合初学者”

当我听到这个时,我想,“我希望崭露头角的开发人员学会以坏习惯来编码,而不是学习真正的编程语言是如何工作的。” 

“打字打得太累了,我的手指都累了”

我的意思是,拜托。这是我听过开发人员给出的最糟糕的借口,我为那些认真提出这个借口的开发人员感到羞愧。

您可以在构建系统时键入内容,也可以在以后维护、重做和修复系统时进行更多键入。

因为键入内容太多而不想编写清晰、明确的代码是荒谬和懒惰的。

所有这些额外的键盘工作都可以让您充分表达代码的作用。您可以多键入一点。天哪。

“TypeScript 编译器只能发现小错误”

嗯,是的。完全正确。 

“所有这些类型都存在太多错误”

嗯,是的。完全正确。

好吧,最后两条评论有点轻率。但错误才是重点。

TypeScript 编译器会发现错误,如果未通过测试发现,这些错误可能会在部署时出现。

在开发周期的早期发现问题总是更好的,没有什么比在您输入错误时立即显示一个小红色波浪线更早的了。 

至于“错误太多”,嗯,这是一个功能。TypeScript 是精确的,编码时精确是好的和可取的。

使用 JavaScript 时,你可以用无数种方式来自讨苦吃。

我看到太多“猜猜这个 JavaScript 代码会输出什么!”的问题。如果一种语言中存在歧义和不精确,那么这种语言将导致有缺陷的代码。

如果您必须运行代码才能知道它的输出应该是什么,那么您的代码就是错误的。 

“我可以使用单元测试来确保我的代码正常运行”

这是一个让我犹豫的论点。我喜欢单元测试和测试驱动开发,我认为我们都应该以这种方式编写代码,所以这个论点很有说服力。但后来我想起你也可以用 TypeScript 进行单元测试,所以这个论点有点站不住脚。

糟糕的编程语言,糟糕的代码

当您说“我可以用 JavaScript 快速开发”时,我听到的是“这个项目将成为维护的噩梦。”

当您说“我不喜欢所有那些冗长的内容。JavaScript 更简单、更简洁”时,我听到的只是“我喜欢当我回头看代码时,代码是难以理解的。”

当您说“我只想解决问题,而不是处理所有这些类型”时,我听到的是“我只想以后给自己制造一大堆问题。”

当您说“很难将类型放在所有东西上”时,我听到的是“哇,哇,哇,哇。”

最终,JavaScript 成为了在正确时间出现的正确事物。它最终被折叠、扭曲和肢解,用于它并不适合的用途。

这就是 TypeScript 出现的原因。TypeScript 利用了 JavaScript 的普遍性,同时添加了现代类型系统的所有功能。这就是您应该使用 TypeScript 的原因。

http://www.lryc.cn/news/499268.html

相关文章:

  • spring下的beanutils.copyProperties实现深拷贝
  • 蓝桥杯二分题
  • 3D数字化革新,探索博物馆的正确打开新方式!
  • 工业检测基础-工业相机选型及应用场景
  • 通过 FRP 实现 P2P 通信:控制端与被控制端配置指南
  • 即时通信系统项目总览
  • QT获取tableview选中的行和列的值
  • GDPU 人工智能 期末复习
  • 编程之路,从0开始:补充篇
  • 使用缓存提升Web应用性能:从新手到高手的实践指南
  • 【数字电路与逻辑设计】实验一 序列检测器
  • 运动模糊效果
  • 养老护理员培训考试题库;免费题库;大风车题库
  • Python-配置模块configparser使用指南
  • C++的HDF5库将h5图像转为tif格式:szip压缩的图像也可转换
  • 【JAVA】Java第十三节:String类(String相关方法,以及StrinBuftrer , StringBulder相关方法)
  • WordPress安装或访问时出现数据库连接错误的处理方式
  • JAVA-面向对象基础
  • [Java]项目入门
  • opencv Mat To Heif
  • 二刷代码随想录第24天
  • Java设计模式之状态模式架构高扩展的订单状态管理
  • Yagmail邮件发送库:如何用Python实现自动化邮件营销?
  • 李宏毅深度学习-Pytorch Tutorial2
  • SaaS财务软件:赋能企业数字化转型
  • FPGA实战篇(按键控制LDE实验)
  • 在Ubuntu-22.04 [WSL2]中配置Docker
  • ACM:均分纸牌
  • ThreadFactory
  • WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门