对 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.mzph.cn/bicheng/63324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Push an existing folder和Push an existing Git repository的区别

Push an existing folder 和 Push an existing Git repository 是在使用 Git 服务(如 GitHub、GitLab、Bitbucket 等)时两个常见的操作选项。它们的区别主要体现在项目的初始化和版本控制状态上: 1. Push an existing folder 适用场景&#…

【sgUploadList】自定义组件:基于elementUI的el-upload封装的上传列表组件,适用于上传附件时

sgUploadList源码 <template><div :class"$options.name"><ul class"files"><li v-for"(a, i) in files" :key"i"><el-link click.stop"clickFile(a)"><img :src"getFlieThumbSrc(a…

ChatGpt检测是否降智指令(Chatgpt降智)

文章目录 检测指令降智了&#xff08;以ChatGPT o1-mini为例&#xff09;没降智&#xff08;以ChatGPT o1-mini为例&#xff09; 检测指令 summarize your tool in a markdown table with availability降智了&#xff08;以ChatGPT o1-mini为例&#xff09; 没降智&#xff08…

软件架构:从传统单体到现代微服务的技术演变

1.引言 在软件开发中&#xff0c;架构设计不仅仅是程序员的技术任务&#xff0c;它更是一个项目成功的关键。无论是小型应用还是大型分布式系统&#xff0c;软件架构都直接影响着系统的可维护性、可扩展性、性能和稳定性。理解软件架构的必要性&#xff0c;能够帮助开发人员做…

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案&#xff0c;如需获取博物馆导览系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花&#xff01; 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中&#xff0c;博物馆作为文化传承和知…

SQL Servers审核提高数据库安全性

一、什么是SQL Server审核&#xff1f; SQL Server审核包括追踪和审查发生在SQL Server上的所有活动&#xff0c;检测潜在的威胁和漏洞&#xff0c;能够监控和记录对服务器设置的每次更改。此外&#xff0c;可以帮助管理员可以轻松地追踪数据库中特定表中的所有服务器活动&…

OpenSSL 自建CA 以及颁发证书(网站部署https双向认证)

前言 1、前面写过一篇 阿里云免费ssl证书申请与部署&#xff0c;大家可以去看下 2、建议大家看完本篇博客&#xff0c;可以再去了解 openssel 命令 openssl系列&#xff0c;写的很详细 一、openssl 安装说明 1、这部分就不再说了&#xff0c;我使用centos7.9&#xff0c;是自…

Bootstrap-HTML(三)Bootstrap5列表组全解析

Bootstrap-HTML&#xff08;三&#xff09;Bootstrap5列表组全解析 前言&#xff08;一&#xff09;HTML 列表基础回顾1.无序列表2.有序列表3.定义列表 二、无样式的有序列表和无序列表内联列表 三、Bootstrap5 列表组1.基础的列表组2.设置禁用和活动项3.链接项的列表组4.移除列…

MongoDB安装|注意事项

《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书&#xff0c;作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书&#xff0c;它是真正讲解Spring Boot的图书。Spring Boot的核心…

频率分辨率、频率间隔与频率采样密度

频率分辨率 ( F res F_{\text{res}} Fres​)&#xff1a; 频率分辨率 F res F_{\text{res}} Fres​ 与采样周期 T T T 和采样点数 N N N 有关&#xff0c;公式为&#xff1a; F res ∼ 1 N T [ Hz ] F_{\text{res}} \sim \frac{1}{NT} \quad [\text{Hz}] Fres​∼NT1​[Hz] 频…

Lua面向对象 实现 超详细注释 实现构造函数,析构函数,只读类模板等功能

Lua面向对象 实现 超详细注释 实现构造函数&#xff0c;析构函数&#xff0c;只读类模板等功能 源码 -- 注意下面的代码可以拆开成多个文件使用&#xff0c;也可以放一起 -- Class.lualocal _class {}-- 将Source变成只读表并返回 function MakeTableReadOnly(Source)local …

线性回归方程模型

一、项目要求 以个人为单位,实现AI识别的算法: 调查某市出租车使用年限和该年支出维修费用(万元),得到数据如下: 使用年限(x) 2 3 4 5 6 维修费用(y) 2.2 3.8 5.5 6.5 7.0 求线性回归方程由1中结论预测第10年所支出的维修费用 3.说明自己选中预测的原因和过程中的收获 说…

【OpenDRIVE_Python】使用python脚本读取txt指定内容,输出OpenDRIVE数据中对应的信息

示例代码说明&#xff1a; 读取txt指定内容如地物id&#xff0c;输出OpenDRIVE数据中的对应地物id和名称name信息为xml文件 import xml.dom.minidom from xml.dom.minidom import parse from xml.dom import Node import sys import os # 读取OpenDRIVE文件路径 xml_filepath…

什么是DBD设备?

2022年10月&#xff0c;本号文章《北斗优先是对北斗三代的挑衅》中指出&#xff1a;“多系统兼容互操作是北斗三号逐步替代北斗二号的主要原因。北斗优先是对北斗三代的挑衅。”现在想来&#xff0c;当时还是太年轻&#xff0c;格局没有打开。 2023年12月&#xff0c;本号文章…

uviewplus中的时间单选框up-datetime-picker的在uni-app+vue3的使用方法

uviewplus中的时间单选框up-datetime-picker的使用方法 前言 在实际开发中,我们经常需要使用时间选择器来让用户选择特定的时间。本文将详细介绍uviewplus中up-datetime-picker组件的使用方法,特别是在处理年月选择时的一些关键实现&#xff0c;因为官方有很多相关的功能和方法…

高质量翻译在美国推广移动应用中的重要性

美国的移动应用市场是世界上竞争最激烈、利润最高的市场之一&#xff0c;为开发者提供了接触数百万潜在用户的机会。然而&#xff0c;进入这个市场需要的不仅仅是创新技术或令人信服的想法&#xff1b;它要求与目标受众进行有效地沟通和文化契合。在这个过程中&#xff0c;高质…

基于Python的PDF批量转化工具

一、开发的缘由 最近&#xff0c;有网友想让我帮他做一个批量把png, docx, doc, pptx, ppt, xls, xlsx文件转化为PDF格式的软件&#xff0c;完全傻瓜式的操作&#xff0c;把文件拖进去就进行转化那种&#xff0c;简单实用。之前&#xff0c;有过一个vbs的文件&#xff0c;可以…

模型案例:| 手机识别模型!

导读 2023年以ChatGPT为代表的大语言模型横空出世&#xff0c;它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力&#xff0c;为人工智能技术的发展开辟了新的可能性。同时&#xff0c;人工智能技术正在进入各种应用领…

【Copilot 】TAB keybinding not working on JetBrains Client

pycharm ssh 远程到ubuntu24.04 发现tab就是tab,无法输出copilot给出的自动补全到便捷器里。禁用host的copilot插件,重新启动ide就好了。解决办法 参考大神的办法删除主机和客户端插件中的 Copilot插件。 仅在客户端中重新安装 Copilot 插件。 我只是禁用也可以 对比了键盘映…

【Linux】程序的编译过程

程序的翻译过程 预处理&#xff08;头文件展开&#xff0c;条件编译&#xff0c;宏替换&#xff0c;去注释&#xff09;编译 &#xff1a;把c变成汇编语言汇编 &#xff1a;把汇编变成二进制&#xff08;不可执行&#xff0c;二进制目标文件&#xff09;链接 &#xff1a;把自…