JavaScript – Chàng hiệp sĩ toàn năng

Khởi nguồn từ giữa những năm 1990, qua 20 năm tồn tại và phát triển, Javascript đã có những thay đổi lớn để thích nghi với thời cuộc, và bây giờ trở thành một ngôn ngữ toàn năng, thiết yếu và phù hợp đối với bất cứ một nhà phát triển nào. Với ý tưởng ban đầu là tạo ra một ngôn ngữ thông dịch tích hợp vào trình duyệt nhằm tăng tính tương tác của người dùng với trang web, với sự mềm dẻo của mình thì ngày nay Javascript đã làm được nhiều điều hơn thế, chúng ta thử điểm lại những miếng võ mà chàng hiệp sĩ này có thể triển khai nhé.

1. Ngôn ngữ client-side.

Ở vị trí client-side thì Javascript chiếm vị trí độc tôn. Hiện nay, không một ngôn ngữ nào có thể cạnh tranh với Javascript trong vai trò là một ngôn ngữ tương tác cho các trang web. Điều gì đã làm cho Javascript được chấp nhận rộng rãi và trở nên phổ biến như vậy? Khó có thể có một câu trả lời thỏa đáng, nhưng chúng ta có thể kể ra những đặc điểm của Javascipt để thấy được các ưu điểm của nó.

Về cú pháp, cũng giống như nhiều ngôn ngữ khác, Javascript thừa kế nhiều cú pháp từ ngôn ngữ C nhưng đã được thêm bớt nhiều để trở nên linh hoạt hơn. Các cấu trúc lập trình cơ bản thì hầu như không có sự thay đổi nào, ví dụ if, while, switch…; Một thay đổi lớn mà ít người để ý đến đó là cơ chế tự chèn dấu chấm phẩy (;), việc này giúp cho chúng ta có một cú pháp ít chặt chẽ hơn nhưng “dễ thở” hơn trong khi viết code.

Kiểu dữ liệu là một trong những khái niệm quan trọng trong các ngôn ngữ lập trình. Thường thì có hai cách để thể hiện kiểu dữ liệu, đó là gắn vào biến hay gắn vào giá trị. Với các ngôn ngữ biên dịch (như C, Java,…) thì kiểu dữ liệu được gắn vào biến, có nghĩa là khi chúng ta khai báo một biến thì nhất thiết phải chỉ rõ biến đó thuộc kiểu dữ liệu nào, và nó chỉ có thể được gắn với các giá trị của kiểu đó. (Tại sao lại thế? Việc này mang lại những lợi ích gì? Chúng ta có thể tranh luận thêm). Trong Javascript (và phần lớn các ngôn ngữ kịch bản – scripting language – khác) thì kiểu dữ liệu được gắn với giá trị, có nghĩa là chúng ta có thể khai báo một biến, gán cho nó một giá trị kiểu chuỗi, rồi sau đó lại thay đổi để nó gắn nó với một giá trị số. Điều này thật dễ dàng (Tại sao?).

Javascript là một ngôn ngữ lập trình hướng đối tượng (OOP) mềm dẻo, đây là một thế mạnh nữa của Javascript. Tôi phải thêm chữ “mềm dẻo” đằng sau bởi vì cách mà nó hỗ trợ OOP thật là tuyệt vời. Bản thân mỗi đối tượng trong Javascript là một mảng, cộng thêm việc dựa trên cơ chế prototype làm cho quá trình tạo và sử dụng trong Javascript thật là “nhẹ như lông hồng”. Có hai cú pháp để sử dụng thuộc tính của một đối tượng: obj.name = ‘Bob’ và obj[‘name’] = ‘Bob’. Ngoài ra, ta có thể thêm, bớt, thay đổi các thuộc tính của đối tượng một cách tùy thích tại thời điểm thực thi (điều này thì các ngôn ngữ khác đã kể ở trên khó mà có được). Các thuộc tính cũng có thể được duyệt qua bằng cách sử dụng vòng lặp for…in. (Nhân tiện nói đến vòng lặp, mời các bạn xem thêm bài về mảng trong Javascript để thấy được nó linh hoạt như thế nào)

Hàm eval() trong Javascript giúp chúng ta làm được một việc to lớn bằng một cách rất dễ dàng. Tại thời điểm thực thi, nếu chúng ta muốn thực thi một đoạn mã mà trước đó chưa hề có, vậy phải làm sao? Thật đơn giản, chỉ cần cung cấp đoạn mã đó dưới dạng một chuỗi, chỉ là chuỗi, hàm eval() sẽ giúp ta chuyển chuỗi đó thành mã thực thi ngay tức khắc. Linh hoạt đến thế là cùng.

Còn nhiều, nhiều đặc điểm khác nữa của Javascript, nhưng chúng ta sẽ không kể hết ra đây. Tôi chỉ muốn nhắc đến một thứ cuối cùng, thứ đã tạo nên một thế giới Javascript thật đa dạng và phong phú. Đó chính là danh sách hàng triệu triệu nền tảng và thư viện Javascript được xây dựng và cung cấp hoàn toàn miễn phí (và cả có phí) cho chúng ta sẵn dùng. Các nền tảng này, kèm thêm các phần mở rộng của chúng, đã tạo nên một hệ sinh thái mà ở đó tất cả chúng ta đều hưởng lợi.

2. Ngôn ngữ server-side.

Mặc dù trước đây chúng ta đã có thể sử dụng Javascript làm ngôn ngữ lập trình cho server-side, nhưng nhìn chung thì nó vẫn không được biết đến nhiều lắm cho tới khi Nodejs ra đời. Mặc dù chỉ mới xuất hiện gần đây (năm 2009) nhưng thực sự Nodejs đã làm nên một cuộc cách mạng, làm cho Javascript trở nên mạnh mẽ, đa năng, hiệu quả hơn bao giờ hết. Với cơ chế bất đồng bộ vốn có của mình, Nodejs là lựa chọn số một cho các ứng dụng network thời gian thực với quy mô lớn. Có thể kể tên những “khách hàng” nổi tiếng của Nodejs: Facebook, Microsoft, Yahoo, Paypal,… và một loạt các đại gia cùng tiểu gia khác.

3. Ứng dụng desktop.

Với việc Microsoft chính thức hỗ trợ việc phát triển các ứng dụng Metro từ Windows 8 thì Javascript đã có thêm một mảnh đất lớn để dụng võ. Với cách làm này, các nhà phát triển sẽ nhanh chóng tạo ra được các ứng dụng desktop “đẹp lung linh” mà không phải mất quá nhiều công sức. Tất nhiên, về phía người dùng, họ không thể nhận ra một sự khác biệt nào giữa một ứng dụng loại này so với một ứng dụng viết bằng C#, VB.NET hay một ngôn ngữ khác. (Đọc thêm ở đây nhé). Nếu bạn thấy thú vị, tôi xin giới thiệu với bạn một nền tảng là TideSDK, nó sẽ giúp cho bạn phát triển các ứng dụng desktop nhanh, đẹp cho hầu hết tất cả các hệ điều hành phổ biến hiện nay.

4. Ứng dụng mobile

Sử dụng Javascript để viết ứng dụng cho các thiết bị di động không còn là một điều gì đó quá mới mẻ, các bạn có thể đọc thêm một bài viết ở đây. Tạo ra các ứng dụng dạng này cũng không quá khó khăn, tại sao ư? Bởi vì hiện nay có từ vài chục (cho đến vài trăm) nền tảng giúp cho chúng ta làm được việc này dễ dàng, thử liệt kê ra một số: jQuery Mobile, PhoneGap, Sencha Touch,… Hãy xem bảng so sánh ở đây và đọc thêm bài này để có được một cái nhìn toàn cảnh hơn về các nền tảng này.

5. Game

Unity, Construct 2, ImpactJS… là những cái tên không còn quá xa lại đối với những nhà phát triển game (Có thể tham khảo danh sách khá đầy đủ ở đây). Sử dụng các nền tảng này sẽ giúp chúng ta nhanh chóng tạo được những game đa nền tảng với đồ họa “đẹp như mơ”. Đa nền tảng ở đây không chỉ là nói đến các nền tảng PC truyền thống, mà còn là các nền tảng di động nữa. Đặc biệt, đối với hệ điều hành di động FirefoxOS mới ra đời thì việc sử dụng Javascript (và các nền tảng hỗ trợ) là một điều bắt buộc khi bạn muốn phát triển ứng dụng hay game. Hãy bắt đầu bằng việc xem một video dài chưa đến 2 phút trình diễn việc viết game sử dụng một nền tảng nó dễ dàng như thế nào nhé.

6. All-by-One

Còn gì tuyệt vời hơn khi chỉ cần một ngôn ngữ mà bạn lại có thể tạo ra được chừng ấy thứ? Nếu là lập trình viên, bạn sẽ không mất nhiều thời gian để làm quen với nhiều ngôn ngữ. Nếu là ông chủ, bạn sẽ không phải bỏ tiền để thuê nhiều đội phát triển cho những nền tảng khác nhau. Nếu là người dùng, tôi sẽ không quan tâm tới ngôn ngữ đằng sau, miễn sao ứng dụng phù hợp với tôi, đem lại cho tôi một trải nghiệm nhất quán không phụ thuộc nền tảng. Với một thế giới toàn màu hồng như vậy, còn chần chừ gì nữa mà không kết thân ngay với chàng Hiệp sĩ Javacript toàn năng ngay từ bây giờ!

Chắc chắn sẽ còn một số các đặc điểm cũng như ứng dụng khác quan trọng (và ít quan trọng hơn một chút) của Javascipt mà chưa được đề cập trong bài viết cùng với các khiếm khuyết của nó. Chúng ta cùng thảo luận nhé.

Một số bài viết liên quan đến Javascript được liệt kê ở đây.

8 comments on “JavaScript – Chàng hiệp sĩ toàn năng

  1. Pingback: Javascript – Ch | PlayerNam

  2. Pingback: Javascript – Chàng hiệp sĩ toàn năng | Mai Chân Chính

  3. Hehe em chào thầy,thầy có thể giới thiệu cho em một số tools hoặc ngôn ngữ thích hợp viết ứng dụng cho windowxp,window7 không ạ?em có nghiên cứu viết ứng dụng cho windows vs c++ hoặc visual studio mà còn mơ màng quá.c++ thì không hỗ trợ đồ họa nhiều(kéo-thả),visual studio của microsoft thì yêu cầu dotnet.Do hiểu biết có giới hạn lên em nhận xét bừa như vậy không biết đúng hay sai,mong thầy có bài viết nào giới thiệu chi tiết về lập trình cách ứng dụng bussiness cho 2 hệ điều hành trên giống như những phần mềm download về xong rồi double click rồi cài đặt là chạy đc.

  4. Pingback: Javascript – Chàng hiệp sĩ toàn năng | LvDuit Developer

  5. Pingback: JavaScript – Basic | Programmer's notes

Leave a Reply

Your email address will not be published. Required fields are marked *