对 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.rhkb.cn/news/485988.html

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

相关文章

Day7 苍穹外卖项目 缓存菜品、SpringCache框架、缓存套餐、添加购物车、查看购物车、清空购物车

目录 1.缓存菜品 1.1 问题说明 1.2 实现思路 1.3 代码开发 1.3.1 加入缓存 1.3.2 清除缓存 1.3.2.1 新增菜品优化 1.3.2.2 菜品批量删除优化 1.3.2.3 修改菜品优化 1.3.2.4 菜品起售停售优化 1.4 功能测试 1.4.1 加入缓存 1.4.2 菜品修改 1.5 代码提交 2.缓存套餐 2.1 Spring C…

【认证法规】安全隔离变压器

文章目录 定义反激电源变压器 定义 安全隔离变压器(safety isolating transformer),通过至少相当于双重绝缘或加强绝缘的绝缘使输入绕组与输出绕组在电气上分开的变压器。这种变压器是为以安全特低电压向配电电路、电器或其它设备供电而设计…

电子应用设计方案-44:智能电饭锅系统方案设计

智能电饭锅系统方案设计 一、引言 随着科技的不断进步和人们生活水平的提高,对电饭锅的功能和智能化要求也越来越高。智能电饭锅不仅能够实现自动烹饪,还能提供多种烹饪模式和个性化设置,满足用户对美食的多样化需求。 二、系统概述 1. 系统…

a8204 基于微信小程序的音乐播放器微信小程序的研究与实现 服务器端Java+Mysql+Servlet 文档 源码

音乐播放微信小程序 1.项目描述2. 绪论3.项目功能4.界面展示5.源码获取 1.项目描述 随着科技的发展,手机在我们生活中起到了重要的作用。软件作为手机重要的一部分,用户体验显得尤为重要。微信小程序一起操作便捷、用户基数大、分享便利、既用即走等特点…

SpringBoot 开源停车场管理收费系统

一、下载项目文件 下载源码项目文件口令: 【前端小程序地址】(3.0):伏脂火器白泽知洞座/~6f8d356LNL~:/【后台管理地址】(3.0):伏脂火器仇恨篆洞座/~0f4a356Ks2~:/【岗亭端地址】(3.0):动作火器智汇堂多好/~dd69356K6r~:/复制口令…

11.17【大数据】Hadoop【DEBUG】

列出hdfs文件系统所有的目录和文件 主节点上 子结点 是一样的 *为什么能登进 slave 02 的主机,但是 master 当中依然显示 slave 02 为 DeadNode?* hadoop坏死节点的重启_hadoop3 子节点重启-CSDN博客 注意hadoop-daemon.sh 实际上位于 Hadoop 的 sbin 目录中,而不…

ffmpeg转码与加水印

文章目录 转码 与加水印引入jar包代码ffmpeg安装错误解决方法 转码 与加水印 引入jar包 <dependency><groupId>net.bramp.ffmpeg</groupId><artifactId>ffmpeg</artifactId><version>0.6.2</version></dependency>代码 impo…

MongoDB复制(副本)集实战及原理分析

MongoDB复制集 复制集架构 在生产环境中&#xff0c;不建议使用单机版的MongoDB服务器。原因如下&#xff1a; 单机版的MongoDB无法保证可靠性&#xff0c;一旦进程发生故障或是服务器宕机&#xff0c;业务将直接不可用。一旦服务器上的磁盘损坏&#xff0c;数据会直接丢失&…

node.js中跨域请求有几种实现方法

默认情况下&#xff0c;出于安全考虑&#xff0c;浏览器会实施同源策略&#xff0c;阻止网页向不同源的服务器发送请求或接收来自不同源的响应。 同源策略&#xff1a;协议、域名、端口三者必须保持一致 <!DOCTYPE html> <html lang"en"> <head>&l…

无网通信 | 原理分析 / 应用

注&#xff1a;本文为“无网通信”相关几篇文章合辑。 到底什么是 “无网通信”&#xff1f; 原创 小枣君 鲜枣课堂 2024 年 10 月 30 日 18:18 江苏 最近智能手机市场迎来了一波发布热潮&#xff0c;在发布会现场&#xff0c;厂商们展示了令人眼花缭乱的各种参数和概念。其中…

PyQt事件机制及其应用

一、实例前置 一个小闹钟应用 创建主窗口类 首先我们创建了一个名为AlarmClock的类&#xff0c;它继承自QMainWindow。这个类将包含我们的GUI组件和逻辑。 from Alarm_clock import Ui_MainWindowclass AlarmClock(QMainWindow):def __init__(self):super().__init__()# 初始化…

福昕PDF低代码平台

福昕PDF低代码平台简介 福昕PDF 低代码平台是一款创新的工具&#xff0c;旨在简化PDF处理和管理的流程。通过这个平台&#xff0c;用户可以通过简单的拖拽界面上的按钮&#xff0c;轻松完成对Cloud API的调用工作流&#xff0c;而无需编写复杂的代码。这使得即使没有编程经验的…

Thonny IDE + MicroPython + ESP32 + 0.96寸OLED(IIC) 显示任意字符

四针脚0.96英寸OLED显示屏模块的具体参数如下表所示。 参数名称 参数特性 分辨率 128x64像素 通信方式 IIC 驱动芯片 SSD1306 屏幕颜色 白色、蓝色或黄蓝双色 元件&#xff1a; 四针脚0.96英寸OLED显示屏模块 ESP32 DEVKIT_C开发板 杜邦线USB Type-C 接线&#xf…

STM32HAL库入门教程——常用外设学习(1)

目录 学习外设前提——学习时钟树 一、时钟树是什么&#xff1f; 二、如何配置时钟树 三、时钟树的组成 3.1.时钟源 3.2.锁相环 PLL 3.3.系统时钟 SYSCLK 3.4.时钟信号输出 MCO 简单创建一个CubeMX工程&#xff08;STMF103常用&#xff09; 一、STM32HAL库开发&#…

方案拆解 | 打击矩阵新规频出!2025矩阵营销该怎么玩?

社媒平台的矩阵营销又要“变天”了&#xff1f;&#xff01; 11月18日&#xff0c;小红书官方发表了被安全薯 称为“小红书史上最严打击黑灰产专项”新规&#xff0c;其中就包括黑灰产矩阵号的公告。 ▲ 图源&#xff1a;小红书 实际上&#xff0c;不包括这次&#xff0c;今年…

系统思考—决策偏误

决策的质量&#xff0c;决定企业的未来。作为创办人&#xff0c;是不是也遇到过这样的困境&#xff1a;信息太多&#xff0c;团队收到的都是差不多的内容&#xff0c;甚至还有不少误导性的消息&#xff0c;结果一不小心做出了错误决策&#xff1f;尤其是在现在这个瞬息万变的环…

通过U盘启动盘安装Windows10操作系统步骤

主要包括以下几步&#xff1a; 1.U盘格式化&#xff0c;U盘容量要求不小于8G&#xff0c;如下图所示&#xff1a; 2.U盘启动盘制作&#xff1a; (1).进微软官网https://www.microsoft.com/zh-cn/software-download/windows10 下载MediaCreationTool_22H2.exe&#xff0c;以管理…

k8s-容器运行时接口分析

1、为了什么需要 CRI &#xff1f; 在 k8s v1.5 之前&#xff0c;Docker 作为第一代的容器运行时&#xff0c; kubelet 通过内嵌其中的 DockerShim 操作 Docker API 来操作容器。在 Kubernetes 1.5 中引入了 CRI&#xff0c;可以解耦了kubelet与容器运行时&#xff0c;该插件接…

【日常记录-Mybatis】PageHelper导致语句截断

1. 简介 PageHelper是Mybatis-Plus中的一个插件&#xff0c;主要用于实现数据库的分页查询功能。其核心原理是将传入的页码和条数赋值给一个Page对象&#xff0c;并保存到本地线程ThreadLocal中&#xff0c;接下来&#xff0c;PageHelper会进入Mybatis的拦截器环节&#xff0c;…

自回归模型(AR )

最近看到一些模型使用了自回归方法&#xff0c;这里就学习一下整理一下相关内容方便以后查阅。 自回归模型&#xff08;AR &#xff09; 自回归模型&#xff08;AR &#xff09;AR 模型的引入AR 模型的定义参数的估计方法模型阶数选择平稳性与因果性条件自相关与偏自相关函数优…