--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Web nâng cao (1) - Mở đầu

 

Thông tin môn học

-        Mã số học phần: CT3231D

-        Tên học phần: Phát triển ứng dụng Web nâng cao

-        Số tín chỉ: 3 (2LT – 1TH)

-        Thuộc chương trình đào tạo trình độ: Đại học

-        Hình thức đào tạo: Chính quy

-        Loại học phần (bắt buộc, tự chọn): bắt buộc

-        Điều kiện tiên quyết:

o   Thiết kế Web

o   Phát triển ứng dụng Web

-        Giờ tín chỉ đối với các hoạt động:

o   Lý thuyết        : 30 tiết

o   Thực hành       : 30 tiết

o   Tự học : 60 giờ

-        Đánh giá môn học

o   Điểm quá trình: 50% (Chuyên cần 10% - Kiểm tra 20% - Lab/Dự án 20%)

o   Thi cuối kỳ: 50% (Trên máy)

-        Nội dung môn học

o   Front-end

§  React (hoặc tùy chọn khác)

o   Back-end

§  Laravel (hoặc tùy chọn khác)

o   Quản lý mã nguồn

§  Git (hoặc tùy chọn khác)

o   Môi trường triển khai

§  Local

§  Cloud

o   Dự án mẫu: Todolist (hoặc tùy chọn khác)

-        Phương pháp học

o   Xem các clip/đọc hướng dẫn chi tiết và làm theo

o   Đọc sách/ebook tiếng Việt và làm ra sản phẩm

o   Đọc sách/ebook tiếng Anh và làm ra sản phẩm

o   Làm một dự án lớn (làm theo clip)

o   Tự tải mã nguồn các dự án từ trên mạng (ví dụ github) về đọc hiểu và làm lại (rèn khả năng đọc và hiểu mã nguồn)

o   Đọc các bài viết về công nghệ chuyên sâu, sách chuyên sâu

o   Ghi chép mọi thứ vào sổ tay (word)

Tài liệu học

1         React

1.1       Tổng quan

1.1.1       React là gì?

Bạn hoàn toàn có thể phát triển phần front-end của một ứng dụng web bằng HTML, CSS và JavaScript; tuy nhiên, để có thể:

– Tái sử dụng các thành phần trong quá trình phát triển;

– Tăng tốc độ hiển thị khi cần cập nhật các thành phần giao diện;

– Giúp người dùng có trải nghiệm với ứng dụng tốt hơn;

– Thân thiện với SEO;

– Và dễ dàng cộng tác giữa các thành viên trong quá trình phát triển; thì bạn nên nghĩ tới việc sử dụng các thư viện, framework trong quá trình phát triển phần front-end cho các ứng dụng web.

Có rất nhiều các thư viện và framework có thể hỗ trợ quá trình phát triển phần front-end, ví dụ React, Angular, Vue, jQuery. Phần này sẽ giúp bạn tìm hiểu và sử dụng được React.

React (cũng được gọi là ReactJS, React.js) là một thư viện JavaScript mã nguồn mở do Facebook tạo ra năm 2013, được sử dụng để xây dựng giao diện người dùng (UI) cho các ứng dụng web (single page application-SPA) hoặc ứng dụng di động (mobile application).

React tạo ra giao diện từ các thành phần nhỏ hơn gọi là các component.

Vì React chỉ quan tâm tới việc kết xuất dữ liệu ra DOM, nên khi xây dựng front-end cần kết hợp React với các thư viện khác như Redux, React Router để quản lý trạng thái (state management) và điều hướng xử lý (routing).

Thư viện React chạy trên cả client và server.

1.1.2       Cài đặt React developer tool

Để kiểm tra một trang web có sử dụng React hay không, cần cài React Developer Tools cho trình duyệt Chrome. Làm như sau:

– Vào google.com, nhập từ  khóa: “chrome how to install react developer tools”

– Mở kết quả tìm kiếm đầu tiên, ví dụ “https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi”

– Trình duyệt sẽ mở trang có React Developer Tools, bấm vào nút Add to Chrome để cài đặt cho trình duyệt

– Nếu cài đặt thành công, biểu tượng của React Developer Tools (đừng nhầm với Developer Tools của trình duyệt) sẽ xuất hiện ở phía phải của thanh địa chỉ trình duyệt, và nó sẽ sáng lên khi trang web hiện tại có sử dụng React. Mở thử trang https://reactjs.org/ là cái biểu tượng nó sẽ sáng lên, bấm vào biểu tượng rồi đọc nội dung thông báo để biết thêm

– Mở Developer Tools sẽ thấy có thêm tab Components và Profiler giúp làm việc với React

1.1.3       Cài đặt Node.js

Khi học và làm việc với ngôn ngữ lập trình JavaScript, bạn sẽ cần phải có một trình dịch mã để dịch mã nguồn sang mã thực thi; sau đó thực thi mã nguồn và xuất ra kết quả. Để làm việc này, bạn có thể sử dụng trình duyệt web hoặc chương trình Nodejs.

Nodejs là một môi trường thực thi mã JavaScript, đa nền tảng, mã nguồn mở. Nó bao gồm V8 JavaScript engine của Google, libUV, và một số thư viện khác.

Với Nodejs bạn có thể thực thi mã JavaScript bên ngoài trình duyệt.

Nodejs cho phép nhà phát triển sử dụng JavaScript để viết các công cụ dòng lệnh và tạo ra các đoạn mã chạy tại server để sinh ra nội dung web động trước khi gửi về trình duyệt, điều này cho phép tạo ra một ứng dụng web chỉ sử dụng một ngôn ngữ lập trình duy nhất cho cả phía client và phía server.

– Tải Nodejs về máy: https://nodejs.org/en/

– Sau khi tải về, nhấp đúp vào tập tin vừa tải về để cài đặt Nodejs. Quá trình cài đặt Nodejs sẽ thiết lập luôn biến môi trường PATH, do vậy có thể sử dụng chương trình dòng lệnh (cmd) để nhập lệnh cho Nodejs thực thi ở mọi vị trí.

– Để kiểm tra cài đặt Nodejs được hay chưa, trong cửa sổ dòng lệnh nhập lệnh node –v để xem phiên bản của Nodejs. Hoặc vào thư mục C:\Program Files\ sẽ thấy thư mục nodejs.

D:\>node -v

v10.15.3

1.1.4       Xem và đọc thêm

– Sử dụng các từ khóa sau để tìm kiếm trên mạng, đọc và xem thêm: react, react developer tool, nodejs, biến môi trường trong Windows, single-page application (SPA), multi-page application (MPA), CSR (client-side rendering), SSR (server-side rendering).

– Nodejs là gì : https://vi.wikipedia.org/wiki/Node.js

– What is Nodejs : https://en.wikipedia.org/wiki/Node.js

– React: https://reactjs.org/

– Xem ReactJS là gì? Tại sao nên học ReactJS? của f8 [https://www.youtube.com/watch?v=x0fSBAgBrOQ&list=PL_-VfJajZj0UXjlKfBwFX73usByw3Ph9Q]

1.1.5       Bài tập và thực hành

Bài tập 1. Thực hiện các việc sau:

– Cài đặt React developer tool cho trình duyệt trên máy của bạn.

– Liệt kê 3 trang web không sử dụng React và 3 trang web có sử dụng React.

Bài tập 2. Thực hiện các việc sau:

– Cài đặt Nodejs trên máy của bạn.

– Phiên bản của Nodejs trên máy bạn là gì?

– Biến môi trường (PAHT) của chương trình Nodejs trên máy bạn được lưu ở đâu? Có nội dung gì?

– Bạn hãy xóa biến môi trường của Nodejs, chạy lệnh node – v ở cửa sổ dòng lệnh? chuyện gì xảy ra? tại sao?

– Bạn hãy thiết lập lại biến môi trường cho Nodejs, chạy lại lệnh node –v ở cửa sổ dòng lệnh? chuyện gì xảy ra? tại sao?

– Bạn có thể tìm thấy tiến trình Nodejs trong tiện ích Task Manager của Windows không? Giải thích.

1.1.6       Câu hỏi ôn tập

Câu 1. React được gọi là gì?

A. Framework

B. Library

C. Program

D. Extension

Câu 2. Nodejs được gọi là gì?

A. Extension

B. Framework

C. Platform

D. Library

Câu 3. React (also known as React.js or ReactJS) is a free and open-source front-end JavaScript library for building user interfaces based on _________.

A. library

B. framework

C. functions

D. UI components

Câu 4. Node.js is an open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside a __________.

A. server

B. web browser

C. extension

D. computer

Đáp án: 1 (B), 2 (C), 3(D), 4 (B)

--------

Cập nhật: 22/2/2022

-------

Đọc thêm: Web nâng cao (2) - JavaScript cho React (1)

Lập trình Web (2) - Nụ cười Stan Shih và nghề CNTT

Bài trước: Lập trình Web (1) - Lời nói đầu

-----

1. Nghề làm web

Trong phần này, bạn sẽ tìm hiểu một số chủ đề có tính gợi mở, giúp bạn có những tiếp cận ban đầu về nghề, chọn nghề, học gì để làm được nghề.

Một số chủ đề được trình bày gồm:

- Áp dụng Nụ cười Stan Shih vào nghề Công nghệ thông tin

- Muốn theo nghề lập trình bắt đầu từ đâu

- Làm web là làm gì

- Muốn làm web cần học những gì

1.1 Áp dụng Nụ cười Stan Shih vào nghề Công nghệ thông tin

Từ hoạt động thực tiễn, chủ tịch tập đoàn Acer, ông Stan Shih đã đưa ra Đường cong nụ cười, thường được gọi là Nụ cười Stan Shih. Qua đó, ông cho rằng: trong chuỗi giá trị, giá trị gia tăng tạo ra do sản xuất (manufacturing) luôn thấp nhất, nằm ở đáy của đường cong. Phần giá trị còn lại (cao hơn) thuộc về những công việc đòi hỏi nhiều kỹ năng và chất xám hơn, như: lên ý tưởng (concept/R&D), xây dựng thương hiệu (branding), thiết kế (design), phân phối (distribution), marketing, bán hàng/dịch vụ hậu mãi (sale/after service). Xem hình minh họa (đường cong màu xanh chính là nụ cười Stan Shih):

Từ ý tưởng của Đường cong nụ cười tạm rút ra được một số ý, liên quan đến nghề nghiệp trong lĩnh vực Công nghệ thông tin:

- Để có một sản phẩm phần mềm, một dịch vụ, hay một giải pháp công nghệ, cần phải trải qua rất nhiều công đoạn. Bao gồm: 

    lên ý tưởng, 

    nghiên cứu tính khả thi, 

    xây dựng thương hiệu, 

    phân tích hệ thống, 

    thiết kế, 

    cài đặt (lập trình), 

    vận hành, 

    phân phối, 

    marketing, 

    bán hàng, 

    bảo trì, 

    chăm sóc khách hàng. 

Do vậy, không nên nghĩ rằng, học Công nghệ thông tin hay học làm web chỉ là lập trình, mà thực tế còn có rất nhiều các công việc khác để bạn lựa chọn. Hãy tiếp cận từng loại công việc, trải nghiệm từng bước, và trải nghiệm càng nhiều càng tốt để xem bạn thực sự hợp với loại công việc nào. Nguyên tắc chung là trải nghiệm một công việc đủ lâu và đủ sâu để bạn nắm bắt được quy trình và cách thức làm việc; thời gian để trải nghiệm mỗi công việc không cố định, nó tùy thuộc vào khả năng và điều kiện của mỗi bạn. Với việc trải nghiệm đa dạng, bạn sẽ có được cái nhìn đa chiều, có tính hệ thống, thấy được mối liên quan giữa các công đoạn. Điều này rất có lợi cho bạn, trước khi bạn chọn một công việc thích hợp nhất cho bản thân để gắn bó.

- Vòng đời của một sản phẩm bất kì, bao gồm rất nhiều công đoạn, vậy thì một phần mềm, một dịch vụ hay một giải pháp công nghệ thông tin giúp ích được gì vào mỗi công đoạn đó? Giúp giảm chi phí, tăng hiệu quả, hỗ trợ quá trình sản xuất? Bạn hãy luôn suy nghĩ làm sao để ứng dụng công nghệ thông tin vào mỗi công đoạn, đây chính là động lực giúp bạn tạo ra được những sản phẩm hữu dụng. Chưa cần phải làm những hệ thống phức tạp, hãy bắt đầu bằng những tiện ích, những giải pháp, hoặc những phần mềm đơn giản nhất, miễn là có ích và áp dụng được vào trong công việc. Theo thời gian, bạn sẽ có kinh nghiệm và kiến thức để làm các hệ thống lớn hơn.

- Giá trị gia tăng (thu nhập) được phân bổ theo đường cong nụ cười, bạn hãy đối chiếu mỗi công đoạn của vòng đời sản phẩm vào trục đứng (trục Giá trị gia tăng) để biết được thu nhập của mỗi vị trí, từ đó lựa chọn công việc phù hợp với khả năng của bản thân để có thu nhập cao nhất. 

- Số lao động cần cho mỗi công đoạn được phân bổ theo đường cong nụ cười lật ngược (theo ý tưởng của tác giả Chu Hảo, đường cong màu đỏ). Dựa vào đường cong lật ngược này, bạn sẽ biết được công đoạn nào cần nhiều lao động hơn (do vậy dễ tìm việc hơn). Bạn cũng biết được công đoạn nào cần phải học nhiều hơn, thì mới có thể làm việc được.\

- Có thể dùng kiến thức trong lĩnh vực Công nghệ thông tin để phát triển sự nghiệp của bản thân hoặc khởi nghiệp theo các ngành nghề khác nhau.

Ngoài các ý tưởng của Đường cong nụ cười, bạn cũng nên tham khảo một vài nhận xét hữu ích về marketing hiện đại, để áp dụng vào nghề của mình:

- Bản chất của mọi giao dịch trao đổi trên thị trường hiện nay không còn là trao đổi của hàng hóa hữu hình mà là trao đổi dịch vụ (service). Dịch vụ ở đây được hiểu là quá trình sử dụng kỹ năng, kiến thức, công nghệ tác động lên các đối tượng hữu hình (con người, máy tính, nhà cửa, đất đai, hàng hóa hữu hình) để tạo ra giá trị mới. Như vậy, hàng hóa sẽ là vật trung gian để cung cấp dịch vụ.

- Kỹ năng và kiến thức là đơn vị trao đổi cơ bản, là nền tảng của lợi thế cạnh tranh. Do vậy, bạn cần không ngừng học hỏi để nâng cao giá trị của cá nhân và tổ chức.

- Khách hàng luôn là người đồng sản xuất

- Lấy dịch vụ làm trung tâm, hướng vào khách hàng

Lập trình Web (1) - Lời nói đầu

Lời nói đầu

Câu hỏi đầu tiên xuất hiện trong đầu, khi bạn thực sự muốn bước chân vào lĩnh vực làm web là “muốn theo nghề làm web bắt đầu từ đâu?”.

Bạn có thể bắt đầu theo 2 cách, cụ thể:

- [Cách 1] học bài bản theo chương trình của một trường đại học, cao đẳng, hay trung tâm (tạm gọi là chương trình chính quy)

- [Cách 2] tự học, bằng cách kết hợp các hướng dẫn, các bài học của rất nhiều thầy cô, anh chị trên mạng; cùng với các khóa học trực tuyến của các công ty, tổ chức, và cá nhân; học dưới sự trợ giúp của AI

Học bài bản theo chương trình chính quy có một số đặc điểm sau:

- Bạn phải vượt qua được các kì thi đầu vào, các đợt xét tuyển của các trường đại học và cao đẳng

- Học theo chương trình được thiết kế sẵn của các trường

- Chương trình học khá bài bản và chi tiết, cho phép bạn có thể lựa chọn và theo đuổi nhiều ngành nghề khác nhau

- Bạn cần phải chi trả một khoản tiền khá lớn cho học phí, học liệu, ăn ở, và đi lại

- Cần thời gian khá dài theo đúng tiến độ đào tạo của các trường

- Có nhiều môn học khó, đôi khi không thực sự cần thiết; có những môn học không phải là thế mạnh của bạn; hoặc bạn không thích, nhưng vẫn phải học

Trong phần tiếp theo (phần Tổng quan) sẽ trình bày cụ thể hơn về lộ trình học theo chương trình chính quy, để bạn có thêm một góc nhìn.

Tuy nhiên, nếu bạn không có nhiều tiền, nhưng có ý chí và muốn có một cái nghề; hoặc đơn giản bạn muốn tự tìm kiếm cho mình một con đường đi riêng, thì bạn vẫn hoàn toàn có thể tự học.

Để tự học, bạn cần phải chuẩn bị một cái máy tính; một ít chi phí để mua các khóa học, tài liệu; nếu tính toán hợp lý, thì chi phí này bằng khoảng một tháng lương thử việc của các lập trình viên. Chi phí lớn nhất chính là thời gian, ý chí và quyết tâm của bạn. Tài liệu này được viết cho các bạn chọn hướng tự học. Mời bạn cùng trải nghiệm.

Để có thể làm web, bạn cần đạt được các điều sau:

- Nắm được các kiến thức cơ bản, cần thiết, để tạo ra sản phẩm; làm cơ sở giúp bạn học được các chủ đề nâng cao

- Học kiến thức một cách bài bản, có “lớp lang”, để trả lời được các câu hỏi “tại sao lại làm như vậy?” hoặc “tại sao AI lại làm như vậy?” Thực tế, có nhiều bạn biết làm hoặc nhờ AI làm, nhưng không biết tại sao lại làm như vậy.

- Kỹ năng làm ra sản phẩm, làm nhiều thì sẽ quen, làm các sản phẩm từ dễ đến khó

- Kỹ năng tự học, tự đọc tài liệu (tiếng Việt, Anh) để có kiến thức áp dụng vào thực tế

- Thái độ đúng đắn khi làm nghề: yêu nghề, có đạo đức nghề nghiệp, tính kỉ luật, tinh thần trách nhiệm, khiêm tốn, không ngừng học hỏi

- Có khả năng đánh giá một sản phẩm do AI làm ra là đúng hay không

- Nếu sử dụng AI để tạo ra sản phẩm, thì bạn phải là người chịu trách nhiệm về sản phẩm đó

 “LẬP TRÌNH WEB, Tập 1 – HTML căn bản” là cuốn sách đầu tiên trong loạt các cuốn sách giúp bạn có thể tự tin bước vào nghề. Sách được viết theo kiểu dẫn dắt từng bước, bắt đầu với các kiến thức lý thuyết căn bản, đây được xem như những viên gạch nền móng, từ đó người học dễ dàng tiếp cận các kiến thức sâu hơn, khó hơn; tiếp đến có thể tự tìm tòi và thử nghiệm kiến thức đã biết vào việc tạo ra sản phẩm.

Tiếp sau phần kiến thức căn bản, tài liệu cũng cung cấp các từ khóa, liên kết tới các trang web, sách điện tử (ebook), và video khác trên mạng để bạn tự tìm hiểu, tự thực hành thêm, giúp bạn có thêm nhiều góc nhìn, nhiều thông tin và nhiều trải nghiệm hơn. Sau khi đã có những hiểu biết cơ bản về một chủ đề, tài liệu sẽ cung cấp các bài tập và bài thực hành nhằm giúp người đọc hiểu rõ hơn lý thuyết, từng bước nâng cao kỹ năng thực hành, có thể tạo ra các sản phẩm.

Ngoài ra, sách cũng có các bài tập, câu hỏi bằng tiếng Anh, giúp người đọc từng bước làm quen, để tiến tới sẽ đọc và làm việc với các tài liệu hoàn toàn bằng tiếng Anh. Bạn có thể sử dụng danh mục các từ tiếng Anh chuyên ngành tại đây: [https://docs.google.com/spreadsheets/d/1koyx85jh12QUat8FQxkVh8AI4Gr-E6NZkfXN84Fc1oE/edit?usp=sharing].

Cuối mỗi phần sẽ có các câu hỏi trắc nghiệm, giúp người học hệ thống và củng cố lại kiến thức.

Cuối cùng là hướng dẫn để làm một số dự án.

Nội dung của cuốn sách này:

- Giới thiệu một số chủ đề về chọn nghề, học làm nghề và phương pháp học

- Kiến thức căn bản về web, trình duyệt, URL, siêu liên kết, siêu văn bản

- Kiến thức tổng quan về HTML

- Cách hiển thị văn bản

- Tìm hiểu về liên kết

- Hiển thị hình ảnh

- Thiết kế form

- Nhúng nội dung vào trang web

- Các chủ đề mở rộng liên quan đến HTML

- Tập làm dự án

Đây là cuốn sách đầu tiên trong loạt các cuốn sách tự học làm web. Cuốn sách tiếp theo bạn nên có là “LẬP TRÌNH WEB, Tập 2 – CSS căn bản”.

Dù đã cố gắng, nhưng tài liệu này chắc chắn còn hạn chế về kiến thức, kĩ năng, nhận định. Mong bạn luôn đọc trong tâm thế hoài nghi.

-------

Bài tiếp: Lập trình web (2) - Nụ cười Stan Shih và nghề CNTT

Web back-end (8) - Lập trình đồng bộ, hàm ẩn danh trong JavaScript

Bài trước: Web back-end (7) - Local và Global, Dependencies và devDependencies

-----

8. Lập trình đồng bộ, hàm ẩn danh trong JavaScript

Tính tới thời điểm này, bạn đã:

- Cài đặt được nền tảng (platform) Nodejs

- Trên nền tảng Nodejs, cài đặt framework Express

- Sử dụng Express để dựng và cấu hình web server (trong tập tin index.js)

- Chạy được web server

- Dùng trình duyệt, truy cập được vào web server

Chúng ta cùng quay trở lại ứng dụng web TeoShop.

Quan sát tập tin mã nguồn của index.js.

[index.js]

'use strict'

const express = require('express')

const app = express();

const port = process.env.PORT || 9000

 

// xu ly khi nguoi dung gui request toi web server

app.get("/", (req, res) => {

    res.send('Chao ban den voi TeoShop!');

})

// khoi dong web server

app.listen(port, () => {

    console.log(`server dang chay tren cong ${port}`);

})

Để hiểu được mã JavaScript trong tập tin index.js và có kiến thức để lập trình các phần tiếp theo, chúng ta cùng tìm hiểu một số chủ đề về lập trình JavaScript.

8.1 Lập trình đồng bộ trong JavaScript

Chúng ta sẽ bắt đầu với khái niệm lập trình đồng bộ.

Trong JavaScript, lập trình đồng bộ (synchronous programming) là kỹ thuật lập trình mà các lệnh (statements) được thực thi tuần tự, theo thứ tự từ trên xuống dưới. Mỗi lệnh phải hoàn thành trước khi lệnh tiếp theo được thực thi. Điều này có nghĩa là nếu một tác vụ mất nhiều thời gian (như đọc tập tin, gọi API, giao tiếp client-server), thì toàn bộ chương trình sẽ bị "chặn" (blocked) cho đến khi tác vụ đó hoàn tất.

Đặc điểm của lập trình đồng bộ

- Thứ tự thực thi rõ ràng: các lệnh chạy theo thứ tự được viết trong mã nguồn

- Chặn luồng (blocking): một lệnh chưa xong thì lệnh tiếp theo không thể chạy

- Phù hợp với tác vụ đơn giản: các tác vụ không cần chờ đợi (như tính toán cơ bản) thường được xử lý đồng bộ

Chúng ta cùng lập trình và quan sát một số ví dụ

Ví dụ 1. Một tính toán căn bản

- Tạo tập tin tinhToanCanBan.js bằng phần mềm viết mã bất kỳ

- Nhập vào đoạn mã sau

[tinhToanCanBan.js]

function cong(a, b) {

    return a + b;

}

 

console.log("Bắt đầu");

let kq = cong(6,8); // thực thi đồng bộ

console.log("Kết quả:", kq);

console.log("Kết thúc");

Mở cửa sổ dòng lệnh, sử dụng node để chạy tập tin tinhToanCanBan.js.

E:\TeoShop_Test\bat-dong-bo>node tinhToanCanBan.js

Bắt đầu

Kết quả: 14

Kết thúc

Bạn sẽ thấy các lệnh chạy theo thứ tự: in chữ "Bắt đầu" ra màn hình > tính cong(6, 8) > in "Kết quả: 14" > rồi in "Kết thúc". Không có hiện tượng xáo trộn các lệnh khi thực thi, mọi thứ diễn ra tuần tự.

Ví dụ 2. Vòng lặp đồng bộ

[vongLap.js]

function xuLyDaySo(){

    console.log("Bắt đầu xử lý ...");

    for(let i = 1; i <= 5; i++){

        console.log("Số:", i);

    }

    console.log("Xử lý xong!");

}

 

xuLyDaySo();

console.log("Tiếp tục công việc khác");

Kết quả khi chạy:

E:\TeoShop_Test\bat-dong-bo>node vongLap.js

Bắt đầu xử lý ...

Số: 1

Số: 2

Số: 3

Số: 4

Số: 5

Xử lý xong!

Tiếp tục công việc khác

Bạn sẽ thấy: vòng lặp for chạy đồng bộ: in từng số, từ 1 đến 5 trước khi tiếp tục công việc khác. Chỉ khi hàm xuLyDaySo() hoàn tất, dòng "Tiếp tục công việc khác" mới được in.

Ví dụ 3. Giả lập tác vụ có tình huống chặn luồng chương trình (khóa chương trình) (blocking)

[chanLuong.js]

// chặn luồng

function chanLuong(){

    console.log("Bắt đầu tác vụ cần nhiều thời gian xử lý");

    let batDau = Date.now();

    while(Date.now() - batDau < 5000){

        // Giả lập chờ 5 giây bằng vòng lặp

    }

    console.log("Tác vụ chạy 5 giây hoàn tất")

}

 

console.log("Trước khi chạy tác vụ");

chanLuong() // chặn luồng 5 giây

console.log("Sau khi chạy tác vụ");

Kết quả khi chạy:

E:\TeoShop_Test\bat-dong-bo>node chanLuong.js

Trước khi chạy tác vụ

Bắt đầu tác vụ cần nhiều thời gian xử lý

Tác vụ chạy 5 giây hoàn tất

Sau khi chạy tác vụ

Bạn sẽ thấy: hàm chanLuong() giả lập một tác vụ mất 5 giây bằng cách chặn luồng. Dòng thông báo "Sau khi chạy tác vụ" chỉ được in, sau khi chayLuong() hoàn tất, vì mọi thứ chạy đồng bộ, mặc dù chương trình dừng lại rất lâu nhưng không có xử lý khác được chèn vào.

8.2 Hàm ẩn danh

Hàm ẩn danh (anonymous function) là một hàm không có tên (không được đặt tên) khi định nghĩa. Thay vì khai báo với từ khóa function đi kèm với tên như hàm thông thường, hàm ẩn danh thường được gán trực tiếp vào biến, truyền làm tham số, hoặc thực thi ngay lập tức mà không cần gọi hàm.

Đặc điểm của hàm ẩn danh:

- Không có tên: được định nghĩa mà không cần đặt tên sau từ khóa function

- Tính linh hoạt: thường được dùng ngay tại nơi khai báo hoặc gán vào biến

- Phạm vi: có thể truy cập biến trong phạm vi bao quanh (closure)

- Không hoisting: không được "nâng lên" (hoisted) như hàm khai báo (function declaration)

Hàm ẩn danh được dùng để xử lý các tác vụ ngắn gọn, trong callback, sự kiện, hoặc khi không cần tái sử dụng hàm.

Cú pháp

Hàm ẩn danh thông thường:

function() {

// thân hàm

}

Hàm ẩn danh kiểu mũi tên:

() => {

// thân hàm

}

Một số ví dụ về cách dùng hàm ẩn danh

Ví dụ 1: gán hàm ẩn danh cho một biến. Vì JavaScript coi hàm cũng là đối tượng, nên bạn có thể dùng biến để chứa nội dung của hàm.

const cong = function(x,y){

    return x + y;

}

 

console.log(cong(2,4)); //6

Hàm ẩn danh function(x,y) được gán vào biến cong. Sau đó được gọi thực thi như một hàm thông thường.

Ví dụ 2: dùng hàm ẩn danh như là tham số để truyền vào hàm khác (callback)

setTimeout(function() {

    console.log("Đã hết 3 giây! (sau 3 giây)");

}, 3000);

 

console.log("Đang chờ");

Kết quả chạy:

Đang chờ

Đã hết 3 giây! (sau 3 giây)

Ví dụ 3: định nghĩa hàm ẩn danh bằng cú pháp mũi tên (arrow function)

setTimeout(() => {

    console.log("Đã hết 4 giây! (sau 4 giây)");

},4000);

console.log("Đang chờ");

Kết quả chạy:

Đang chờ

Đã hết 4 giây! (sau 4 giây)

Ví dụ 4: sử dụng trong phương thức của mảng. Hàm ẩn danh được dùng làm tham số, để truyền cho phương thức của mảng.

const numbers = [1, 2, 3, 4];

numbers.forEach(function(num) {

    console.log(num + 1);

});

// Kết quả: 2, 3, 4, 5

Viết lại theo kiểu arrow function:

const numbers = [1, 2, 3, 4];

numbers.forEach(num => console.log(num + 1));

// Kết quả: 2, 3, 4, 5

Ví dụ 5: hàm ẩn danh có thể thực thi ngay sau khi định nghĩa. (Immediately Invoked Function Expression - IIFE).

Cú pháp:

(function() { ... })()

Ví dụ:

(function() {

    console.log("Hàm chạy ngay sau khi định nghĩa, không cần thao tác gọi hàm!");

})();

Tuy nhiên, hàm ẩn danh cũng có một số hạn chế như:

- Khó gỡ lỗi (debug); vì không có tên, việc xác định lỗi trong stack trace có thể khó khăn hơn.

- Không tái sử dụng được: nếu cần dùng lại, bạn phải gán nó cho một biến hoặc đặt tên

8.3 Bài tập

Bài tập 8.1 Cài đặt các ví dụ trong bài học.

Câu 8.2: Lập trình đồng bộ trong JavaScript là gì? Phát biểu nào sau đây không đúng?

A. Lập trình đồng bộ không chặn luồng, cho phép các lệnh tiếp theo chạy ngay cả khi tác vụ chưa hoàn tất.

B. Các lệnh được thực thi tuần tự, theo thứ tự từ trên xuống dưới.

C. Mỗi lệnh phải hoàn thành trước khi lệnh tiếp theo được thực thi.

D. Phù hợp với các tác vụ đơn giản như tính toán cơ bản không cần chờ đợi.

Câu 8.3: Hàm ẩn danh (anonymous function) trong JavaScript là gì? Phát biểu nào sau đây không đúng?

A. Hàm ẩn danh có thể truy cập biến trong phạm vi bao quanh nhờ closure.

B. Hàm ẩn danh là hàm không có tên khi được định nghĩa.

C. Hàm ẩn danh thường được gán vào biến hoặc truyền làm tham số cho hàm khác.

D. Hàm ẩn danh được "nâng lên" (hoisted) giống như hàm khai báo (function declaration).

-----

Bài sau: Web back-end (9) - Hàm mũi tên, lập trình bất đồng bộ trong JavaScript