Android là một nền tảng được phổ quát người ưa thích, miễn phí và dễ tùy biến nên đã mau chóng tăng trưởng và sở hữu mặt trên phổ quát loại trang bị di động như: điện thoại, máy tính bảng, đồng hồ thông minh, tivi, ô tô…
Sau sự ra mắt của AOSP và bản update Lollipop, Android đã mang đến cho người mua khá phổ quát kì vọng. phong cách ngoại hình Material hứa mang đến trải nghiệm thấp hơn.
sở hữu cả nghìn trang bị Android khác nhau kích thước màn hình, chip xử lý, cấu hình phần cứng và phiên bản phần mềm. Sự phổ quát đấy dẫn tới việc ứng dụng Android mà bạn viết sở hữu thể ko hoạt động được trên những trang bị khác nhau cho dù bạn sở hữu là 1 lập trình viên Android phổ biến kinh nghiệm.
Bỏ qua sự dị biệt kia, hồ hết lỗi mọi người biết đến lại là lỗi logic. các lỗi này mang thể thuận tiện xử lý nếu chúng ta khiến cho đúng trong khoảng các điều căn bản.
Dưới đây là danh sách 10 lỗi thường thấy ở các lập trình viên Android. Anh chị em mang thể tham khảo cách học android online
Lỗi đầu tiên: nỗ lực bắt chước giao diện iOS
hiện nay lỗi này đã trở nên ít phổ biến hơn (một phần vì người dùng đã nhìn thấy rằng Apple đã thiết lập các tiêu chuẩn mẫu mã trong khoảng lâu rồi). Nhưng dù mang thế thì chúng ta vẫn đang và sẽ tiếp diễn thấy các ứng dụng sao chép lại trong khoảng iOS.
người dùng Android đã quen thuộc mang nền móng Android, việc nỗ lực nhồi nhét các chuẩn mẫu mã của iOS vào Android sẽ rất tồi tệ. nếu bạn không có lí do cực kì đáng giá nào để phá vỡ các nguyên tắc thì đừng khiến cho thế.
Đây là 1 số tỉ dụ phổ biến cho lỗi này:
[list="padding-left: 40px; padding-right: 40px; font-family: sans-serif, Arial, Verdana, \"Trebuchet MS"; color: rgb(51, 51, 51); font-size: 13px;"]
[*]Bạn không nên tạo các tab nhất định mà chúng không ở phía dưới (ví dụ: Instagram).
[*]các Icon thông báo hệ thống không nên màu mè
[*]Icon của ứng dụng không nên mang khuông viền chữ nhật bo góc (trừ khi logo của bạn vốn đã mang nó, tỉ dụ như Facebook)
[*]Màn hình load ứng dụng (splash screen) chỉ nên sử dụng khi thiết lập lần đầu hoặc giới thiệu, không nền sử dụng trong các trường hợp khác.
[*]Danh sách không nên mang đánh dấu
[/list]
Trên đây chỉ là 1 số ít trong số hồ hết vấn đề nhỏ nhặt mang thể phá hỏng trải nghiệm người dùng.
Lỗi thứ hai: Lập trình viên chỉ thử ứng dụng trên đúng thiết bị Android mình mang
Trừ khi bạn muốn tạo ra 1 ứng dụng phổ biến cho riêng dòng thiết bị nào chậm triển khai, nếu không thì ứng dụng của bạn mang thể sẽ trông khá tệ trên các thiết bị khác. Bạn nên lưu ý các vấn đề sau:
cứng cáp bạn không mang cả ngàn thiết bị để thử, Android Emulator sẽ giúp giả lập gần đúng cấu hình thiết bị bạn muốn thử. Android Emulator mang thể chọn được kích thước màn hình, bộ nhớ, chức năng cảm biến…. Còn nếu bạn muốn 1 trình giả lập rẻ hơn nữa, hãy thử Genymotion, emulator chạy nhanh và mang phổ biến cài đặt giả lập phổ biến cho các thiết bị.
Lỗi thứ ba: không sử dụng Intent
Intent là 1 trong các thành phần cốt lõi của Android. Nó là 1 cách để truyền dữ liệu giữa các phần của 1 ứng dụng hoặc hơn thế nữa, giữa các ứng dụng khác nhau trong 1 hệ thống.
giả thử bạn mang 1 ứng dụng gallery ảnh cho phép san sẻ link download ảnh qua SMS. chọn lựa nào sau đây sẽ logic hơn?
chọn lựa 1:
chọn lựa 2:
?
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setData(Uri.parse("sms:" + telephoneNumber));
sendIntent.putExtra("sms_body", x);
startActivity(sendIntent);
nếu bạn còn lần chần thì câu trả lời là: cách thứ 2 là cách rẻ nhất.
cách này mang thể ứng dụng mang hồ hết mọi thứ, ví như: san sẻ nội dung, chụp ảnh, quay video, chọn các giao thông, thêm sự kiện, …
Lỗi thứ tư: không sử dụng Fragments
1 thời gian trước trên Honeycomb, Android giới thiệu định nghĩa Fragments. Bạn mang thể xem nó như là các khối được vun đắp biệt lập mang vòng đời riêng trong 1 Activity. Nó hỗ trợ hồ hết trong việc tối ưu cho các dòng màn hình, đồng thời thuận tiện được điều hành bởi activity cha, mang thể sử dụng lại, kết hợp và sắp đặt theo ý muốn.
Chạy từng activity riêng cho mỗi màn hình ứng dụng sẽ mang hiệu quả rất tệ khi hệ thống phải cố lưu trữ chúng trong bộ nhớ lâu hết mức mang thể. Tắt 1 dòng trong số chậm triển khai cũng không giải phóng các tài nguyên được sử dụng bởi các mẫu còn lại.
ví như bạn ko muốn đào sâu nghiên cứu về core Android hay phản đối việc tiêu dùng fragment thì bạn nên tiêu dùng fragments bất cứ lúc nào với thể. cơ bản thì fragments và cursor loaders với mục đích tốt nhưng phương pháp thực hiện thì tương đối thô.
Tìm hiểu về lập trình cơ bản : học php qua video
Lỗi thứ năm: Blocking Main Thread (tác vụ chạy lâu cản trở luồng thực thi chính)
Main thread (luống chính) với một mục đích duy nhất: phản hồi tương tác của quý khách và cập nhật giao diện.
mặc dù theo những phương pháp đo đếm một phương pháp kỹ thuật về tốc độ sườn hình (frame rate) thì mắt/não của chúng ta với khả năng cảm nhận rất phức tạp và chịu tác động của phổ thông yếu tố nhưng với một nguyên tắc chung là cứ mẫu gì dưới 24 fps (khung hình/giây) với độ trễ trên 100ms thì được coi là ko mượt mà.
với tức thị hành vi của quý khách sẽ với một khoảng trễ và vận dụng Android mà bạn lập trình sẽ ngừng việc phản hồi lại. Bỏ qua yếu tố phương pháp tiêu dùng của quý khách dẫn tới vận dụng chạy ko như ý, quý khách của bạn chỉ cần thấy vận dụng ko chạy như họ muốn là sẽ với những nhận xét tiêu cực.
Lỗi thứ sáu: tự code lại những thứ người khác đã làm cho
một số bạn muốn tự code phần giao tiếp với server trong một background thread, ngừng thi côngĐây chưa chắc là một tuyển lựa tốt. Gọi network, nạp ảnh, truy tìm cập hạ tầng dữ liệu, parse JSON hay đăng nhập mạng xã hội, ngừng thi côngĐây là những thứ vận dụng của bạn thường xuyên làm cho nhất. ko chỉ vận dụng của bạn mà số đông những vận dụng khác cũng thế. Vậy viết lại làm cho gì? Hãy nhớ là Android đã trở thành một nền tảng ổn định và với phổ thông thư viện với sẵn tương trợ cho bạn. Ví dụ:
Lỗi thứ 7: ko ví thử tác vụ thành công để xử lý sớm
Qua lỗi thứ sáu, chúng ta với thể tiêu dùng những thư viện với sẵn để xử lý những tác vụ phức tạp. Nhưng quý khách vẫn sẽ phải chờ đợi, ngừng thi côngĐây là điều không thể tránh khỏi. với phổ thông vấn đề với thể xảy ra: những gói ko được gửi đi, ko được xử lý hay nhận ngay. Cũng với thể là phải chờ những vòng lặp, lỗi network, mất gói dữ liệu, hàng loạt thứ làm cho quý khách phải chờ đợi rất lâu.
tuy nhiên, trong số đông trường hợp, những lỗi trên ít xảy ra và thời kỳ thực thi code thành công phổ thông hơn thất bại. Vậy sao lại phải chờ server phản hồi trước lúc request thành công? Sẽ tốt hơn phổ thông ví như bạn cứ ví thử như lời gọi ngừng thi côngĐây đã thành công và xử lý trường hợp thất bại sau ngừng thi côngĐây. ví dụ lúc quý khách like một bài viết, ta cho số like tăng luôn, ví như chẳng may sự kiện ngừng thi côngĐây bị lỗi thì ta sẽ thông tin cho quý khách.
Lỗi thứ 8: ko hiểu về Bitmap
quý khách say mê nội dung được hiển thị, đặc trưng là lúc nó được mô tả đẹp và gọn ghẽ. ví dụ, hình ảnh là một dạng nội dung thu hút, mỗi bức ảnh với thể truyền vận tải thông tin thay cho hàng nghìn câu chữ. Nó cũng là nội dung gây tốn bộ nhớ, tốn số đông.
?
một
memory_needed_in_bytes = 4 * image_width * image_height;
Trong công thức trên, vì sao lại là nhân 4? Thiết lập bitmap phổ thông nhất và được khuyến khích tiêu dùng làARGB_8888. tương tự với tức thị với mỗi điểm ảnh mà ta vẽ ra, ta cần 8 bit (1 byte) cho 4 kênh màu alpha, red, green, blue trong bộ nhớ để với thể hiển thị đúng hình ảnh. với một số thiết lập khác như RGB_565 yêu cầu ít bộ nhớ hơn ARGB_8888 một nửa, nhưng mất phần hiển thị trong suốt (transparent) và giảm độ xác thực về màu (có thể dẫn tới với thêm những tuyến đường kẻ màu xanh trên màn hình).
[list="padding-left: 40px; padding-right: 40px; font-family: sans-serif, Arial, Verdana, \"Trebuchet MS"; color: rgb(51, 51, 51); font-size: 13px;"]
[*]Tính toán sườn màn hình bạn muốn hiện hình.
[*]Co dãn ảnh hay crop ảnh cho thích hợp.
[*]Chỉ hiển thị mẫu gì với thể hiển thị.
[/list]
Lỗi thứ chín: tiêu dùng hệ thống view quá phổ thông cấp
Đối với Android, layout với thể được mô tả qua XML. Để vẽ ra những nội dung nhu yếu, XML cần được Tìm hiểu, màn hình cần tính toán kích cỡ và mọi thành phần đều phải được đặt ở vị trí thích hợp. ngừng thi côngĐây là một thời kỳ hao tốn thời kì và tài nguyên hệ thống để tối ưu mọi thứ.
Dưới đây là phương pháp ListView (hay mới hơn là RecyclerView) hoạt động.
.
với phương pháp này kết quả sẽ là một cảnh báo “nested weights are bad for performance”.
với một phương pháp nói trong giới lập trình Android rằng:
“Nếu ko quan tâm tới hiệu suất thì cấu trúc nào cũng như nhau”.
Trong trường hợp này RelativeLayout hoặc GridLayout sẽ thay thế được kiểu LinearLayouts lồng nhau một phương pháp hiệu quả.
Lỗi thứ mười: ko thiết lập trị giá minSdkVersion bằng 14
Đây thực ra cũng ko phải là lỗi nhưng lại là một thói quen xấu.
Android hai.x là một cột mốc quan yếu trong sự vững mạnh của nền tảng Android nhưng với một vài thứ nên bỏ đi. Việc tương trợ những vật dụng cũ gây phức tạp cho bảo trì code và tránh thời kỳ vững mạnh.
Kết luận
Android là một nền nảng mạnh mẽ và vững mạnh rất nhanh chóng. những lập trình viên Android nên thường xuyên tìm phương pháp tăng kỹ năng của mình và tránh sơ sót.
tuy nhiên Các bạn với thể Tìm hiểu thêm về https://vietpro.net.vn/hoc-lap-trinh-javascript-co-ban
Chúc Các bạn với thể tránh khỏi những lỗi trên và trở xây dựng thương hiệu trình viên tốt. Chúc Các bạn thành công.
Sau sự ra mắt của AOSP và bản update Lollipop, Android đã mang đến cho người mua khá phổ quát kì vọng. phong cách ngoại hình Material hứa mang đến trải nghiệm thấp hơn.
sở hữu cả nghìn trang bị Android khác nhau kích thước màn hình, chip xử lý, cấu hình phần cứng và phiên bản phần mềm. Sự phổ quát đấy dẫn tới việc ứng dụng Android mà bạn viết sở hữu thể ko hoạt động được trên những trang bị khác nhau cho dù bạn sở hữu là 1 lập trình viên Android phổ biến kinh nghiệm.
Bỏ qua sự dị biệt kia, hồ hết lỗi mọi người biết đến lại là lỗi logic. các lỗi này mang thể thuận tiện xử lý nếu chúng ta khiến cho đúng trong khoảng các điều căn bản.
Dưới đây là danh sách 10 lỗi thường thấy ở các lập trình viên Android. Anh chị em mang thể tham khảo cách học android online
Lỗi đầu tiên: nỗ lực bắt chước giao diện iOS
hiện nay lỗi này đã trở nên ít phổ biến hơn (một phần vì người dùng đã nhìn thấy rằng Apple đã thiết lập các tiêu chuẩn mẫu mã trong khoảng lâu rồi). Nhưng dù mang thế thì chúng ta vẫn đang và sẽ tiếp diễn thấy các ứng dụng sao chép lại trong khoảng iOS.
người dùng Android đã quen thuộc mang nền móng Android, việc nỗ lực nhồi nhét các chuẩn mẫu mã của iOS vào Android sẽ rất tồi tệ. nếu bạn không có lí do cực kì đáng giá nào để phá vỡ các nguyên tắc thì đừng khiến cho thế.
Đây là 1 số tỉ dụ phổ biến cho lỗi này:
[list="padding-left: 40px; padding-right: 40px; font-family: sans-serif, Arial, Verdana, \"Trebuchet MS"; color: rgb(51, 51, 51); font-size: 13px;"]
[*]Bạn không nên tạo các tab nhất định mà chúng không ở phía dưới (ví dụ: Instagram).
[*]các Icon thông báo hệ thống không nên màu mè
[*]Icon của ứng dụng không nên mang khuông viền chữ nhật bo góc (trừ khi logo của bạn vốn đã mang nó, tỉ dụ như Facebook)
[*]Màn hình load ứng dụng (splash screen) chỉ nên sử dụng khi thiết lập lần đầu hoặc giới thiệu, không nền sử dụng trong các trường hợp khác.
[*]Danh sách không nên mang đánh dấu
[/list]
Trên đây chỉ là 1 số ít trong số hồ hết vấn đề nhỏ nhặt mang thể phá hỏng trải nghiệm người dùng.
Lỗi thứ hai: Lập trình viên chỉ thử ứng dụng trên đúng thiết bị Android mình mang
Trừ khi bạn muốn tạo ra 1 ứng dụng phổ biến cho riêng dòng thiết bị nào chậm triển khai, nếu không thì ứng dụng của bạn mang thể sẽ trông khá tệ trên các thiết bị khác. Bạn nên lưu ý các vấn đề sau:
cứng cáp bạn không mang cả ngàn thiết bị để thử, Android Emulator sẽ giúp giả lập gần đúng cấu hình thiết bị bạn muốn thử. Android Emulator mang thể chọn được kích thước màn hình, bộ nhớ, chức năng cảm biến…. Còn nếu bạn muốn 1 trình giả lập rẻ hơn nữa, hãy thử Genymotion, emulator chạy nhanh và mang phổ biến cài đặt giả lập phổ biến cho các thiết bị.
Lỗi thứ ba: không sử dụng Intent
Intent là 1 trong các thành phần cốt lõi của Android. Nó là 1 cách để truyền dữ liệu giữa các phần của 1 ứng dụng hoặc hơn thế nữa, giữa các ứng dụng khác nhau trong 1 hệ thống.
giả thử bạn mang 1 ứng dụng gallery ảnh cho phép san sẻ link download ảnh qua SMS. chọn lựa nào sau đây sẽ logic hơn?
chọn lựa 1:
- đề nghị cấp quyền SEND_SMS
?
1 - Viết code gửi SMS theo cách của bạn, sử dụng SmsManager
- giải thích cho người dùng tại sao ứng dụng của bạn cần truy hỏi cập các dịch phụ mang thể tính phí và tại sao người dùng phải cấp quyền truy hỏi cập chậm triển khai cho ứng dụng của bạn.
chọn lựa 2:
- bắt đầu 1 SMS Intent và để việc gửi Sms cho 1 ứng dụng chuyên gửi Sms
?
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setData(Uri.parse("sms:" + telephoneNumber));
sendIntent.putExtra("sms_body", x);
startActivity(sendIntent);
nếu bạn còn lần chần thì câu trả lời là: cách thứ 2 là cách rẻ nhất.
cách này mang thể ứng dụng mang hồ hết mọi thứ, ví như: san sẻ nội dung, chụp ảnh, quay video, chọn các giao thông, thêm sự kiện, …
Lỗi thứ tư: không sử dụng Fragments
1 thời gian trước trên Honeycomb, Android giới thiệu định nghĩa Fragments. Bạn mang thể xem nó như là các khối được vun đắp biệt lập mang vòng đời riêng trong 1 Activity. Nó hỗ trợ hồ hết trong việc tối ưu cho các dòng màn hình, đồng thời thuận tiện được điều hành bởi activity cha, mang thể sử dụng lại, kết hợp và sắp đặt theo ý muốn.
Chạy từng activity riêng cho mỗi màn hình ứng dụng sẽ mang hiệu quả rất tệ khi hệ thống phải cố lưu trữ chúng trong bộ nhớ lâu hết mức mang thể. Tắt 1 dòng trong số chậm triển khai cũng không giải phóng các tài nguyên được sử dụng bởi các mẫu còn lại.
ví như bạn ko muốn đào sâu nghiên cứu về core Android hay phản đối việc tiêu dùng fragment thì bạn nên tiêu dùng fragments bất cứ lúc nào với thể. cơ bản thì fragments và cursor loaders với mục đích tốt nhưng phương pháp thực hiện thì tương đối thô.
Tìm hiểu về lập trình cơ bản : học php qua video
Lỗi thứ năm: Blocking Main Thread (tác vụ chạy lâu cản trở luồng thực thi chính)
Main thread (luống chính) với một mục đích duy nhất: phản hồi tương tác của quý khách và cập nhật giao diện.
mặc dù theo những phương pháp đo đếm một phương pháp kỹ thuật về tốc độ sườn hình (frame rate) thì mắt/não của chúng ta với khả năng cảm nhận rất phức tạp và chịu tác động của phổ thông yếu tố nhưng với một nguyên tắc chung là cứ mẫu gì dưới 24 fps (khung hình/giây) với độ trễ trên 100ms thì được coi là ko mượt mà.
với tức thị hành vi của quý khách sẽ với một khoảng trễ và vận dụng Android mà bạn lập trình sẽ ngừng việc phản hồi lại. Bỏ qua yếu tố phương pháp tiêu dùng của quý khách dẫn tới vận dụng chạy ko như ý, quý khách của bạn chỉ cần thấy vận dụng ko chạy như họ muốn là sẽ với những nhận xét tiêu cực.
Lỗi thứ sáu: tự code lại những thứ người khác đã làm cho
một số bạn muốn tự code phần giao tiếp với server trong một background thread, ngừng thi côngĐây chưa chắc là một tuyển lựa tốt. Gọi network, nạp ảnh, truy tìm cập hạ tầng dữ liệu, parse JSON hay đăng nhập mạng xã hội, ngừng thi côngĐây là những thứ vận dụng của bạn thường xuyên làm cho nhất. ko chỉ vận dụng của bạn mà số đông những vận dụng khác cũng thế. Vậy viết lại làm cho gì? Hãy nhớ là Android đã trở thành một nền tảng ổn định và với phổ thông thư viện với sẵn tương trợ cho bạn. Ví dụ:
Lỗi thứ 7: ko ví thử tác vụ thành công để xử lý sớm
Qua lỗi thứ sáu, chúng ta với thể tiêu dùng những thư viện với sẵn để xử lý những tác vụ phức tạp. Nhưng quý khách vẫn sẽ phải chờ đợi, ngừng thi côngĐây là điều không thể tránh khỏi. với phổ thông vấn đề với thể xảy ra: những gói ko được gửi đi, ko được xử lý hay nhận ngay. Cũng với thể là phải chờ những vòng lặp, lỗi network, mất gói dữ liệu, hàng loạt thứ làm cho quý khách phải chờ đợi rất lâu.
tuy nhiên, trong số đông trường hợp, những lỗi trên ít xảy ra và thời kỳ thực thi code thành công phổ thông hơn thất bại. Vậy sao lại phải chờ server phản hồi trước lúc request thành công? Sẽ tốt hơn phổ thông ví như bạn cứ ví thử như lời gọi ngừng thi côngĐây đã thành công và xử lý trường hợp thất bại sau ngừng thi côngĐây. ví dụ lúc quý khách like một bài viết, ta cho số like tăng luôn, ví như chẳng may sự kiện ngừng thi côngĐây bị lỗi thì ta sẽ thông tin cho quý khách.
Lỗi thứ 8: ko hiểu về Bitmap
quý khách say mê nội dung được hiển thị, đặc trưng là lúc nó được mô tả đẹp và gọn ghẽ. ví dụ, hình ảnh là một dạng nội dung thu hút, mỗi bức ảnh với thể truyền vận tải thông tin thay cho hàng nghìn câu chữ. Nó cũng là nội dung gây tốn bộ nhớ, tốn số đông.
?
một
memory_needed_in_bytes = 4 * image_width * image_height;
Trong công thức trên, vì sao lại là nhân 4? Thiết lập bitmap phổ thông nhất và được khuyến khích tiêu dùng làARGB_8888. tương tự với tức thị với mỗi điểm ảnh mà ta vẽ ra, ta cần 8 bit (1 byte) cho 4 kênh màu alpha, red, green, blue trong bộ nhớ để với thể hiển thị đúng hình ảnh. với một số thiết lập khác như RGB_565 yêu cầu ít bộ nhớ hơn ARGB_8888 một nửa, nhưng mất phần hiển thị trong suốt (transparent) và giảm độ xác thực về màu (có thể dẫn tới với thêm những tuyến đường kẻ màu xanh trên màn hình).
[list="padding-left: 40px; padding-right: 40px; font-family: sans-serif, Arial, Verdana, \"Trebuchet MS"; color: rgb(51, 51, 51); font-size: 13px;"]
[*]Tính toán sườn màn hình bạn muốn hiện hình.
[*]Co dãn ảnh hay crop ảnh cho thích hợp.
[*]Chỉ hiển thị mẫu gì với thể hiển thị.
[/list]
Lỗi thứ chín: tiêu dùng hệ thống view quá phổ thông cấp
Đối với Android, layout với thể được mô tả qua XML. Để vẽ ra những nội dung nhu yếu, XML cần được Tìm hiểu, màn hình cần tính toán kích cỡ và mọi thành phần đều phải được đặt ở vị trí thích hợp. ngừng thi côngĐây là một thời kỳ hao tốn thời kì và tài nguyên hệ thống để tối ưu mọi thứ.
Dưới đây là phương pháp ListView (hay mới hơn là RecyclerView) hoạt động.
.
với phương pháp này kết quả sẽ là một cảnh báo “nested weights are bad for performance”.
với một phương pháp nói trong giới lập trình Android rằng:
“Nếu ko quan tâm tới hiệu suất thì cấu trúc nào cũng như nhau”.
Trong trường hợp này RelativeLayout hoặc GridLayout sẽ thay thế được kiểu LinearLayouts lồng nhau một phương pháp hiệu quả.
Lỗi thứ mười: ko thiết lập trị giá minSdkVersion bằng 14
Đây thực ra cũng ko phải là lỗi nhưng lại là một thói quen xấu.
Android hai.x là một cột mốc quan yếu trong sự vững mạnh của nền tảng Android nhưng với một vài thứ nên bỏ đi. Việc tương trợ những vật dụng cũ gây phức tạp cho bảo trì code và tránh thời kỳ vững mạnh.
Kết luận
Android là một nền nảng mạnh mẽ và vững mạnh rất nhanh chóng. những lập trình viên Android nên thường xuyên tìm phương pháp tăng kỹ năng của mình và tránh sơ sót.
tuy nhiên Các bạn với thể Tìm hiểu thêm về https://vietpro.net.vn/hoc-lap-trinh-javascript-co-ban
Chúc Các bạn với thể tránh khỏi những lỗi trên và trở xây dựng thương hiệu trình viên tốt. Chúc Các bạn thành công.