偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

對于現(xiàn)代開發(fā)來說,JavaScript就是一種垃圾語言

開發(fā) 開發(fā)工具 前端
昨天 Reddit/Programming 頻道的頭條熱帖是一篇來自 julik live 博主的技術(shù)吐槽文,最初的英文標題是“For modern development Javascript indeed is a shit language”。

我很抱歉,但 Crockford 就是堅持這么寫的(I’m sorry, but the Crockford arguments do not cut it.)。

Javascript在很多方面都爛透了,而且還極其無趣,我就納了悶了,大家為啥都義無返顧,群情激奮的跳進Node學(xué)習(xí)的大軍里,是!Node 是比Ruby快,Node是基于事件模型處理的,但讓我無法理解的是,一些人動不動就想把自己的程序用Node重構(gòu)一下,過過腦子行嗎!

Javascript的繼承,深拷貝問題,不是定義一個新ECMA標準就能解決的,不是套個漂亮的語法外殼(比如CoffeeScript)就能搞 定的,不是用require實現(xiàn)個標準化或者引入classes就可以萬事大吉的,ECMA語言里不是有個引入classes的ActionScript 嗎!那玩意跟Javascript一樣屎,只要大家繼續(xù)用它,PHP框架的現(xiàn)狀就是JS的未來— 一堆一堆的人前赴后繼,日以繼夜的為這坨屎一樣的語言搭框架、寫工具。

我來說一下為什么Javascript糟糕,當(dāng)然了,它也有好的方面。 但是問題就是太不實用。比如說原型繼承(prototypal inheritance)就限制頗多-因為這玩意說白了就是function override,還有就是那句:“萬物皆function” 也是相當(dāng)?shù)膹U柴-因為一function不是一個對象,也不能當(dāng)做數(shù)據(jù)機構(gòu)來承載數(shù)據(jù)。

 

[[88550]]

其實真正的吐槽才剛剛開始,隨便列幾個吧:

JS的調(diào)用屬性

看這個屎一樣的設(shè)計,回顧過去,咱們很難苛責(zé)語言的設(shè)計人員,因為它們可能處于性能考慮,再者,如果不習(xí)慣消息-傳遞機制的語言的話,你會覺得怎么”一些屬性可以被調(diào)用而另外一些就不可以呢“!

哈希對象對于stable 鍵不可用

對象和哈希的混合不是一個好點子,因為它違反了對象可以擁有metadata的前提,metadata允許我們建立基本類型系統(tǒng)或者至少各種類型的introspection

函數(shù)對象對于類型系統(tǒng)不可用 因為一個對象不攜帶任何類型信息

這可是大事,Ruby的世界里也是這樣,感覺所有的東西都在像鴨子一樣快樂的嘎嘎叫,我們經(jīng)常用Object$class 來獲取對象信息,下面是給HTML元素加樣式的標準的流程:

  1. <div class='<%= model.class %>' id='<%= [model.class, model.id].join %>' >… 

在JS里是不可能的,因為只有’Object’,’function’和原始類型才有類型信息

到處是Null

不小心用錯了一個常量

  1. MyApp.SYNC <i>// should have been MyApp.SYNC_FETCH</i> 

任何事情都不會發(fā)生,因為對象是hashes,而且js給常量默認為0。 帶著錯誤key的常量將會是undefined,而且還會滲透到被調(diào)用函數(shù)中,等出了事,慢慢跟蹤debug去吧

回調(diào)的深淵

JS缺少合適的deferred功能,不是多線程,就得靠事件化執(zhí)行,你的調(diào)用會散落在各個事件回調(diào)中,代碼都完事了,回調(diào)還在那執(zhí)行呢,比如,JS干下面這個是就費勁

  1. var res = await AjaxReq.fetch('/long-request'
  2. // because you are waiting for a result, here the runtime would 
  3.  // schedule event handling, DOM redraws and whatever else it can 
  4.  // squeeze in while you await 
  5. res.name // this will be only executed once res is available 

因為你在等一個結(jié)果,就在等待的這會,runtime完全可以進行事件處理、DOM重繪、干啥都行

res.name // this will be only executed once res is available 等res可以使用的時候在去執(zhí)行res.name的操作

當(dāng)然了,JS社區(qū)做了跟PHP社區(qū)一直以來一樣的事情-給Javascript這坨屎擦屁股,怎么擦呢?用更多的回調(diào),好點的,就是回調(diào)鏈

  1. when(<ERMAGHERD RIDICULOUSLY LONG CALLBACK> 
  2.  // 48 lines of code down 
  3. ).then(<HOLYSHIT WHEN WILL THIS BE OVER> 
  4. // 23 lines down 
  5. ).then(<GIVE ME SOME COFFEE ALREADY>) 

一般情況下,加入一個wait primitive就在獲取結(jié)果的等待過程中控制events,

專業(yè)一點的做法就是啥玩意咱都異步,現(xiàn)實是你寫的代碼80%都是同步的,因為程序里80%干的都是一個操蛋的事情跟另外一個操蛋的事情一起搞,而且你需要它倆都它媽的完事了才行。

可怕的異常處理機制

異常處理在JS中機器可怕,一般形式-你可以查看調(diào)用堆棧(一堆匿名函數(shù)和好點的名字的函數(shù)),你可看到錯誤信息,我就提兩個經(jīng)常碰到的錯誤:

  1. undefined is not a function 
  2.     cannot call property 'xyz' of undefined 

這都拜javascript中“函數(shù)對(泥煤)象”所賜,根本沒有方法定義-它們只有屬性,JS運行時永遠沒有辦法知道函數(shù)對象有沒有方法可以被調(diào)用,或者某個屬性名稱 – 它就認為你的哈希鍵不存在,

我記得Ruby社區(qū)里的人抱怨Ruby的回溯和錯誤消息機制不好用,Rubinius就給解決了,在泥煤的javascript里,你知道錯誤消息 特別亂嗎?因為有你想得到和使用的兩個最最基本,最最重要的異常NameError和NoMethodError 都可能,這在其它語言里都是不能理解的,但javascript語言就這么馬馬虎虎的用起來了

不可否認,functions是亮點,原型也是好東西,但是如果你想建立一個稍微復(fù)雜的JS應(yīng)用,你就得這么寫:

  1. var cv = Marionette.CollectionView.extend({ 
  2.   itemView: MyApp.Views.WidgetView; 
  3. }); 

如果”MyApp.Views.WidgetView 還沒有定義“你會得到啥錯誤?”undefined is not a function”當(dāng)然!你什么時候會得到呢?當(dāng)CollectionView想要實例化你的視圖的時候,而不是當(dāng)你定義變量cv的時候,你會忐忑好幾分 鐘,直到你明白了這錯誤是哪里導(dǎo)致的

這是為啥呢?因為所有都是hash而且這個語言不能做任何形式的introspection

還有一個困擾我的事就是有些大哥居然從Ruby轉(zhuǎn)戰(zhàn)Node,還贊Node是個好東西。Node也許是好寶貝,但是想想它內(nèi)部運行著屎一樣的Javascript語言,我就由衷地想退避三舍。

這么說吧,JS一日不好用,我便一日不會用Node,謝謝

我理解有一些人想跳出MRI架構(gòu),投身Node,很簡單啊- -你不會說日語, 所以你舔個臉說日語很難學(xué),話撂這,你在MRI上的有精進的機會也它媽趨近于0.

JS是屎,但凡我們有那么一絲絲的擔(dān)當(dāng),就該盡自己的綿薄之力要么讓它壽終正寢,要么幫助它更上一層樓,天天在那沾沾自喜對它的發(fā)展沒有一點幫助,CoffeeScript做的還遠遠不夠。

原文鏈接:http://live.julik.nl/2013/05/javascript-is-shit

譯文鏈接:http://blog.jobbole.com/50671/

責(zé)任編輯:陳四芳 來源: 伯樂在線
相關(guān)推薦

2019-01-25 18:42:55

Java程序員編程語言

2013-05-15 13:14:30

游戲開發(fā)

2015-08-03 09:36:01

賽迪翻譯

2015-08-31 09:27:21

語言界面UI

2024-05-11 08:14:53

2024-05-24 08:54:18

2010-01-21 16:24:02

C++語言

2012-11-01 13:41:25

編程語言BasicPerl

2012-03-14 11:46:30

ibmdw

2012-03-19 10:45:44

ibmdw

2010-01-25 15:09:17

C++語言

2025-03-26 08:00:00

2023-07-18 18:10:04

2011-06-28 08:59:57

HTML 5JavaScript

2013-09-10 10:14:19

程序員

2012-06-25 14:12:44

2024-05-30 08:01:52

2021-04-05 14:44:20

JavaScript循環(huán)代碼

2022-02-25 14:42:09

OpenHarmon環(huán)境搭建鴻蒙

2010-11-04 10:55:24

編程語言
點贊
收藏

51CTO技術(shù)棧公眾號