Typescript hay "React" mới là một ngôn ngữ lập trình thật sự ? Ai đúng ai sai ?



Lâu lắm rồi mới có thời gian tâm sự anh em vài dòng, blog CSS lỗi tí anh em    đừng có "dận" nha :D À với bài viết có thể khiến anh em kích động với một số anh em nên mình warning trước , nếu anh em không thích có thể nhấn back nhé, cảm ơn  vì đã ghé blog mình :D

Đầu tiên của đầu tiên, mình là fan ruột của Javascript !! Lúc trước gian hồ gặp cứ chê bai nào là JS performance không cao, viết OOP khó thấy mịa, ngôn ngữ script là làm ăn được gì ,.. Tự ti 5s . Tới hồi Typescript ra đời thì mình nghe thiên hạ khen chê đủ điều nhưng đa phần là khen, lúc đó fan Javascript như mình cũng được tiếng thơm lây từ Typescript . Mình tạm gọi tắt Typescript (TS)
và Javascript (JS) từ đây nhé, gõ nhiều cũng mệt bộ =)).



Chắc rằng, không riêng gì mình mà những anh em lần đầu tiếp xúc với TS cũng khá bỡ ngỡ và thốt lên "What the hell ? TS là cái quái gì , cớ sao JS lại sinh ra TS . Sinh ra làm gì mà dùng y chang JS có thêm cái gì lạ lạ mà giang hồ gọi là Type ". Hmm, sau một thời gian sử dụng em nó thì mình rút ra một số điều về


TS nó đã có ích cho mình như thế nào ?
  • Hỗ trợ Static Type trong quá trình phát triển là một điều cực kỳ tiện lợi,
  • đã giúp JS bớt cục súc đi rất nhiều
  • Hỗ trợ cơ chế code theo kiến trúc module,namespace,.. "sướng" hơn JS
  • Code có type đỡ "lo sợ" hơn khi viết cũng như debug , nhiều khi chỉ cần
  • "dot" một cái là có ngay property là điều mình hằng mong ước từ hồi JS.
  • Nó là framework ?
  • Nó là library ?
  • Nó là programing laguage
Axx, không.... đó không phải là điều mình muốn nhắc đến trong bài viết này anh em a. Cái mình muốn nhắc là gần đây đọc trên mấy cộng đồng thấy anh em luận bàn về TS khá nhiều ở chỗ "Nó là cái gì ? Một số anh em bảo là :

No no, nó là cái gì thì cùng mình "phân xử" trong bài viết này nhé !@@

Tài liệu gốc của Typescript nói gì ?




"an open-source programming language developed and maintained by Microsoft"..

typescriptlang.org cũng nói rằng Typescript là "an open-source language which builds on JavaScript"


Có thể anh em chưa biết, hằng năm stackoverflow có những survey liên quan Loved/Dreaded/Wanted Languages và trong đó ở vị trí top cũng có TS mà không có Angular, React, Vue, ... chà có khi đây là một dẫn chứng cho thấy TS là một language.

Tuy nhiên github repo lại nói rằng TS là "a superset of JavaScript that compiles to clean JavaScript output."

Hmm, bắt đầu rối @@ ..

Ngôn ngữ à ?



Nói tới đây mấy nhớ, loáng thoáng định nghĩa trên lại giống React, React nó có ngôn ngữ cấu trúc riêng của nó như JSX , sau khi anh em gõ "npm start" thì mọi thứ đều được transpiled ra JS thuần cũng giống như câu mà TS được miêu tả "clean JavaScript output" Nếu bạn là một người chưa dùng TS nhưng có dùng các "thứ" tương tự React thì bạn sẽ import một đống thứ cào file project , thỉnh thoảng debug hoặc exception thì bạn liền "Ồ, hóa ra nó viết bằng TS, file .ts rõ ràng kia kìa" .
Thật vậy, là một React Developer bạn chẳng cần quan tâm nó viết bằng TS hay gì , vì mặc dù bạn đang viết nó trong một môi trường "non-TS" nhưng khi bạn npm start or npm run build. npm đã hỗ trợ transpiled nó về JS hết cả rồi .Đó có phải là một sự "dễ dãi" chăng, tôi chưa bao giờ bỏ công để đi xuống các npm package để xem nó viết bằng C#, Python, hay Java hay C++ hay bất cứ gì .Bởi vì các ngôn ngữ đó không thật sự transpile về JS .. nhưng TS thì có đó các bạn a... từ chỗ này thật sự anh em mình cần phải phanh phui nó :D .






Thật sự mà nói, mình không cố khẳng định chuyện một ngôn ngữ phải transpile về ngôn ngữ khác để chạy là một tiêu chí để khẳng định nó là ngôn ngữ hay không ? Như PHP vậy , PHP cuối cùng được transpile về C nhưng có ai dám dơ tay bảo ràng "PHP không phải ngôn ngữ " ?. Từ ví dụ này, một ngôn ngữ được xây dựng dựa trên một ngôn ngữ khác là chuyện hết sức bình thường anh em ạ .


Một điều đáng buồn , không một ai trong anh em chúng ta viết trên ngôn ngữ "gốc" kể cả C, java,.. trừ khi anh em viết bằng ngôn ngữ máy ở cấp độ Byte, còn nếu có thì chắc là thiên thần đếm trên đầu ngón tay anh em nhỉ . Mặc dù vậy, khi gọi TS là ngôn ngữ, mình vẫn thấy có gì đó vướng vướng chưa hài lòng lắm anh em a.Trước hết, bạn có thể tin rằng dù TS là ngôn ngữ hay không thì cũng không ảnh hưởng đến project bạn đang làm nên hãy calm down và đọc tiếp bài viết nhé . Đừng hiểu lầm tôi . Type-certainty của TS thật sự rất mạnh mẽ và tuyệt vời thay vì JS thuần như hồi đó .


Nó rối vậy rồi, có ảnh hưởng gì tới cuộc sống anh em chúng ta??




Bạn có thể dễ dàng tưởng tượng ra một viễn cảnh, Bạn là một Pro C# và đã chiến C# rất nhiều năm, một hôm có cậu bạn lại nói rằng "Mày biết không ? Cái static type của C# nhiều lúc khiến tao điên đầu và cảm thấy bực bội trong quá trình dev lắm . Sau đó, tao đã viết ra một library mà nó có thể apply tất cả dự án mà tao đang handle và library đó giúp tao có thể sư dụng dynamic type trên C#, ghê chưa ?" . Tôi vội đáp rằng "Mày biết đấy, khi làm việc với các ngôn ngữ static type thì static type với tao và hầu hết developer không phải là bug mà là một tình năng, mày không nên nghĩ vậy đâu hé ". "Không giấu gì mày ở một vài khoảnh khắc nào đó tao cũng muốn thay đổi kiểu dữ liệu một cách tức thời và tao cũng khó chịu như mạy Nhưng về dần tao càng thấy static type có lợi nên nó xứng đáng để tao khó chịu đôi lúc thì không có vấn đề gì cả :D ".


Quay lại câu chuyện giữa mình với bạn (bạn đang đọc bài á ) giả sử nếu bạn đang sử dụng một ngôn ngữ được xây dựng trên nguyên lý X , vì một số lý do chủ quan hay khách quan gì đó khiến bạn không thích nguyên lý X thì hãy quên đi việc đập bỏ ngôn ngữ hay tìm cách để "lách luật" cho ngôn ngữ đó không còn nguyên lý X nữa . Trái lại, bạn nên "hòa đồng" tiếp thu nguyên lý X và vận dụng nó tối đa nhất có thể, cũng như thay vì cảm thấy "không vui" với static type xem nó là Bug thì hãy xem nó là tính năng và enjoy !

Đây là lý do tại sao đôi khi tôi bị ám ảnh về câu hỏi: TypeScript có thực sự là một ngôn ngữ không? Bởi vì, nếu TypeScript thực sự là ngôn ngữ và một trong những nguyên lý cốt lõi của ngôn ngữ đó là static type thì tôi sẽ khẳng định rằng "OK, chắc chắn. Đó là một ngôn ngữ "

Nhưng nếu TypeScript thực sự chỉ là ... JavaScript. Và nếu bạn đã khẳng định rằng dynamic type của JavaScript là một loại bug cần được khắc phục. Vậy thì, tôi sẽ coi bạn giống như ông bạn của tôi kể trên một C # Developer đã dành cả đêm và cuối tuần của mình để cố gắng phát triển một library khiến C # sử dụng được với dynamic type.

Javascript có phải là tội ác ?




Như đã nêu ở đầu bài viết này, đây không phải là một bài "tranh luận" gì . Mình không "phân bì" các TS Developer và thật sự mong muốn hiểu hơn về TS. Nhưng đôi khi mình cảm thấy hơi khó chịu bởi số đông sử dụng TS nói về việc "strong type" đã "rửa sạch các tội lỗi từ JS". Họ nói về dynamic type như một tội ác . Nhưng tôi tin chắc rằng dynamic type của JS không phải là một lỗi. Đó là một tính năng.





Chốt đề nhẹ
Nhưng tôi cho rằng sự phân biệt ý nghĩa giữa JS và TS sẽ rõ ràng hơn nếu chúng ta chấp nhận TypeScript là một ngôn ngữ chính thức . Bởi vì mỗi ngôn ngữ sẽ có bộ Nguyên tắc cốt lõi riêng. Và static type là nguyên lý cốt lõi của TypeScript, thì ... hiểu rồi đó TS là ngôn ngữ ư ư.. chắc vậy thôi chứ biết nói sao giờ ?
Viết đến đây mình cũng chưa thật sự "thoáng" trong đầu về câu hỏi "TS có là một ngôn ngữ thật sự ?" . Đầu tuần chém gió tí cho vui, đây cũng chỉ là góc nhìn cá nhân và một số ý kiến từ các bác chém gió trên stackoverflow ỏ dev.to Anh em gạch đá nhẹ thôi nhé , góp ý cùng nhau phát triển hè . Chúc anh em một tuần làm việc hiệu quả !! Đọc bài vui vẻ không quạo vì cái tựa nha nha =))))

Inspire from: https://dev.to/bytebodger/is-typescript-really-a-language-ep1?fbclid=IwAR2hoGOJ3-JT516xZMNtAcwTrclFZxHEfHlV2ROzZN017WX19e__ifAn_TU
Fanpage nhận bài mới : https://www.facebook.com/culicoder/

Github star chéo nè : https://github.com/quangpl





Nhận xét

Bài đăng phổ biến từ blog này

Bạn đã thử "thiết kế kiến" chưa ? ANT Design có thật sự tuyệt vời ? [ Review Ant Design]

Những CSS Selectors hay ho có thể anh em chưa hề biết ?