开赛啦!各位朋友大家好,我想会点进这系列文章的人,可能是以下两种:
其实,笔者也没有什麽显赫的背景,更拿不出什麽吓吓叫的作品,只是一个偶然在大四选修计算机中心的网页课程,并且努力走了四五年的人,现在在一家新创公司担任全端工程师。
在学习的过程中,其实常常发现,比起周遭的同侪,自己的表现很平凡,往往是下了很多苦功,才做到旁人的举手之劳,但也正是因为成长很慢,我才特别看重「成长」这件事,而学习 Javascript 的过程中,让我非常深刻体会到,成长与蜕变的过程。
因为你有发现, Javascript 也在学习与蜕变吗?
Javascript 算是公认「易学难精」的语言,因为语言本身宽松的特性,要上手并且写出能够运作的程序,比起其他语言快很多,再加上网页就像是一张画布,我们透过 HTML、CSS、Javascript 调和上色,写出来的程序都像是一幅幅绚丽的画,让人充满成就感,觉得自己能够迅速掌握这门语言。
而同时,Javascript 也因为语言宽松的特性,往往在型别(type)上表现得模棱两可,让我们觉得自己好像很了解它,却仍不清楚下一秒它会不会炸掉。再加上 Javascript 许多奇怪的特性,往往在我们写得顺风顺水时,从背後来一记回马枪。
回到我们的主题,什麽叫做「好」程序?
看到这边,你不妨也好好想一下,什麽样的 code 会让你说很棒?什麽样的 code 是「好」的?
如果你心里有个答案,我们先换个角度,来看一下 Javascript 的非同步。
当 XMLHttpRequest 登场时,我们搭配 callback function 做到许多 AJAX 的操作,在那个时代已经是很厉害的机制,跳脱了死板板的同步,局部更新部分画面,使用者用起来超开心!
接着随着时代演进,程序规模成长,callback function 渐渐难以负荷多层(nested)的 AJAX 操作,写起来不知道右括号该放哪,读起来看不出程序流程,更别提 error handling 加上去立马变成义大利面!
於是它来了!Promise,这个 ES6 崭新的物件改变了我们这些凡人对非同步的想像,它给出了承诺,Promise
可以被串接(chainable),让原本多层的 AJAX 被摊平,大幅提升了维护性与可读性。
但时代的演进是飞速的,程序规模指数型成长,Promise
写起来仍然就是一个非同步的感觉,穿插在同步程序码之间,阅读起来其实也没那麽轻松,对於不熟悉非同步的新手们来说,更是难以判断程序流向。
於是它来了!async await,这一对摧毁非同步高墙的利器诞生,虽然其实也是基於 Promise
来的,但很好地简化了许多细节,将非同步的 function 同步化,穿插在同步程序码中一点也不突兀,程序码再度提升了可读性。
看到这里,你是否感受到非同步程序是如何朝向「好」的方向,随着时代前进,非同步也持续地在蜕变,你觉得会不会有下一个新技术来取代 async await
呢?
笔者没有特别研究,不知道是不是真的有,但可以肯定的是,Javascript 一定会继续进化!
我心中的「好」程序就是像这样,是因应时代不断进化、蜕变的。
我当然可以用 XMLHttpRequest
来写所有非同步程序,而且写出来的功能跟 async await
一模一样,使用者感受不出差异,但那就停留在把程序写「对」,而不算是写「好」。
写「对」程序是客观成果,我的功能正常、我的 PM 没贴我 ticket,我的 user 没打电话给我。
写「好」程序则是一种主观精神,我会尽我所能去尝试,磨练出让自己愈来愈满意,甚至团队成员愈来愈轻松的 coding 技能(more readable/maintainable/refactorable)。
因此,写 code 十年但每天做一样事的人,不一定能把程序写「好」,而刚开始学 Javascript 但天天都有所成长的人,才更能够将程序写「好」。
这系列的文章「不会」有:
这系列的文章「会」有:
没有最好的程序(best),只有不断进步的程序(better)
<<: [Day16] JavaScript - Promise 物件
>>: 【没钱买ps,PyQt自己写】Day 1 - 安装 PyQt,建立自己的第一支 PyQt5 程序
函式没办法使用其他函式中的变数 #include <stdio.h> #include ...
前言 今天要来介绍,Typescript 特有的类型 Tuple 、 Enum,到底会是什麽,有趣的...
Process Synchronization tags: IT铁人 由於电脑同时会执行许多程序,不...
在疫情爆发之前,一切的一切看似都非常的正常,但是在爆发之後,所有的一切都被疫情给打乱了,并且所有的秩...
前言 JS 30 是由加拿大的全端工程师 Wes Bos 免费提供的 JavaScript 简单应用...