@Chung Minh Tú, bạn có thể giải thích rõ hơn về 2 ví dụ kia không. Mình chạy thử thì thấy không khác nhau.
Ngoài ra, bạn có thể share một vài link bài viết nói về vấn đề này không?
Mình tìm nhưng chưa thấy bài viết nào để tham khảo.
mình xin bổ sung một chút cho bài viết.
forEach() là hàm async (toàn bộ các lệnh bên trong hàm được chạy đồng thời). Nghĩa là đối với mỗi phần tử của mảng cần thực thi, toàn bộ các giá trị trong mảng sẽ được thực thi cùng lúc => ưu điểm là chạy nhanh. Nhưng kết quả của từng giá trị nếu lần lượt phụ thuộc giá trị trước đó thì bạn sẽ tính toán bị sai. Bạn sử dụng hàm forEach theo kiểu sync thì phải lưu ý điều đó. Reactive Programming (ví dụ trong AngularJS, ReactJS, VueJS...) là kỹ thuật code các hàm async nhưng đoán biết được khi nào từng hàm chạy xong để đón đợi kết quả cho hàm tiếp theo, một kiểu gọi là "code async nhưng chạy kiểu sync".
Ví dụ nhỏ sau sẽ cho các bạn thấy forEach chạy async, toàn bộ các phần tử hiện ra cùng lúc:
Đối với hàm for() thì là thuần sync. Mọi thứ dễ dàng được bạn kiểu soát. Vì hàm này lần lượt từng phần tử được lấy ra để tính toán. Nếu phần tử chưa tính toán bên trong hàm xong thì phần tử tiếp theo sẽ không được gọi. Ví dụ sau khi chạy sẽ thấy lần lượt từng phần tử được in ra.
const myArray=[1,2,3,4,5,6,7,8];for(let i =0; i < myArray.length; i++){setTimeout(function(){ console.log(i);},1000);}
Ah. Cái đoạn cuối là em phải xóa thư mục installation khỏi thư mục joomla của em là được.
Nếu là người mới thì cài đặt qua Joomla để mình biết là một trang web sẽ hoạt động như thế nào ở frontend và backend thôi.
Em viết HTML và CSS xong nếu muốn chuyên sâu thì học thêm javascript, reactjs or vuejs or angular rôi mình chuyên về dev frontend luôn.
Hay học thêm code để làm backend, và như thế sau này full-stack dev luôn
Ban đầu, khi chuyển từ c/c++ sang học JavaScript, mình cũng thường xuyên sử dụng vòng lặp for, while. Code viết không khác gì c/c++. Về sau quen dần với forEach, map, filter,... thấy code gọn và sáng hơn hẳn. Còn về Reactive Programming thì mình chưa biết.
khác biệt cơ bản của forEach với dùng vòng lặp for là cách nghĩ của người code,
forEach là bạn nhờ hàm forEach làm, bạn chỉ quan tâm & cần kết quả. Dùng vòng for là bạn tự làm lấy hết (tự gán biến i, rồi cho nó chạy từ 1 -> n, rồi tự check điều kiện thoát, tự lấy phần tử thứ i trong collection)
forEach thì khó debug hơn, tuy nhiên có cách nghĩ code ko chơi với debug
forEach dẫn đến reactive programming gì đấy & người code phải đọc nhiều thứ trên mạng hơn
@ductuandt3 Xin chào bạn
Viblo có riêng một chuyên mục dành cho phần Hỏi & Đáp tại địa chỉ https://viblo.asia/questions, bạn có thể truy cập và đặt câu hỏi ở bên đó, thay vì tạo bài viết ở chuyên mục Posts nhé
Kiểm tra vé còn trống có lớn hơn số vé mà user đó đặt hay không
Em lấy ticket.total_ticket - (sum(order.amount_ticket ( chỉ tính những order mà có status = 0, 2 thôi ))) = remain_ticket
Sau đó so sánh remain_ticket vs số vé mà user muốn đặt
Nếu (1) thỏa mãn thì sẽ insert vào DB
Em insert số vé & status = 0 vào bảng order thôi ạ
THẢO LUẬN
@Chung Minh Tú, bạn có thể giải thích rõ hơn về 2 ví dụ kia không. Mình chạy thử thì thấy không khác nhau. Ngoài ra, bạn có thể share một vài link bài viết nói về vấn đề này không?
Mình tìm nhưng chưa thấy bài viết nào để tham khảo.
hay thế
mình xin bổ sung một chút cho bài viết. forEach() là hàm async (toàn bộ các lệnh bên trong hàm được chạy đồng thời). Nghĩa là đối với mỗi phần tử của mảng cần thực thi, toàn bộ các giá trị trong mảng sẽ được thực thi cùng lúc => ưu điểm là chạy nhanh. Nhưng kết quả của từng giá trị nếu lần lượt phụ thuộc giá trị trước đó thì bạn sẽ tính toán bị sai. Bạn sử dụng hàm forEach theo kiểu sync thì phải lưu ý điều đó. Reactive Programming (ví dụ trong AngularJS, ReactJS, VueJS...) là kỹ thuật code các hàm async nhưng đoán biết được khi nào từng hàm chạy xong để đón đợi kết quả cho hàm tiếp theo, một kiểu gọi là "code async nhưng chạy kiểu sync". Ví dụ nhỏ sau sẽ cho các bạn thấy forEach chạy async, toàn bộ các phần tử hiện ra cùng lúc:
Đối với hàm for() thì là thuần sync. Mọi thứ dễ dàng được bạn kiểu soát. Vì hàm này lần lượt từng phần tử được lấy ra để tính toán. Nếu phần tử chưa tính toán bên trong hàm xong thì phần tử tiếp theo sẽ không được gọi. Ví dụ sau khi chạy sẽ thấy lần lượt từng phần tử được in ra.
Ah. Cái đoạn cuối là em phải xóa thư mục installation khỏi thư mục joomla của em là được.
Nếu là người mới thì cài đặt qua Joomla để mình biết là một trang web sẽ hoạt động như thế nào ở frontend và backend thôi. Em viết HTML và CSS xong nếu muốn chuyên sâu thì học thêm javascript, reactjs or vuejs or angular rôi mình chuyên về dev frontend luôn. Hay học thêm code để làm backend, và như thế sau này full-stack dev luôn
bài viết hay
Ban đầu, khi chuyển từ c/c++ sang học JavaScript, mình cũng thường xuyên sử dụng vòng lặp for, while. Code viết không khác gì c/c++. Về sau quen dần với forEach, map, filter,... thấy code gọn và sáng hơn hẳn. Còn về Reactive Programming thì mình chưa biết.
Cảm ơn bạn nhiều. Mình đã làm được. Trong angular js mình sử dụng $location.hash('scrollToppage'); $anchorScroll();
khác biệt cơ bản của forEach với dùng vòng lặp for là cách nghĩ của người code,
forEach là bạn nhờ hàm forEach làm, bạn chỉ quan tâm & cần kết quả. Dùng vòng for là bạn tự làm lấy hết (tự gán biến i, rồi cho nó chạy từ 1 -> n, rồi tự check điều kiện thoát, tự lấy phần tử thứ i trong collection)
forEach thì khó debug hơn, tuy nhiên có cách nghĩ code ko chơi với debug
forEach dẫn đến reactive programming gì đấy & người code phải đọc nhiều thứ trên mạng hơn
@ductuandt3 Xin chào bạn Viblo có riêng một chuyên mục dành cho phần Hỏi & Đáp tại địa chỉ https://viblo.asia/questions, bạn có thể truy cập và đặt câu hỏi ở bên đó, thay vì tạo bài viết ở chuyên mục Posts nhé
mình chưa rõ trường hợp của b cụ thể thế nào, nhưng cũng có 1 vài người bị tương tự, b có thể tham khảo qua ở đây: https://laracasts.com/discuss/channels/laravel/log-permission-problem
(y)
Từ lúc ra trg t toàn code Java, đợt trc sv thì hay code PHP..:v
hay lắm bạn, nhớ viết 1 series nhé. lol
Bạn nên post câu hỏi trong phần Questions ấy nhé.
Cảm ơn bạn nhiều mình sẽ thử. *)
Bạn sử dụng scrollTop() là nó sẽ cuộn trang của bạn lên đầu trang
@thangtd90 Em có 2 bảng đơn giản như sau ạ
order.status
có các giá trịEm lấy
ticket.total_ticket
-(sum(order.amount_ticket ( chỉ tính những order mà có status = 0, 2 thôi )))
=remain_ticket
Sau đó so sánhremain_ticket
vs số vé mà user muốn đặtEm insert số vé & status = 0 vào bảng
order
thôi ạLike =))))
Bài viết hay lắm cảm ơn bạn nhé =)))
Bạn có thể làm rõ cho mình 2 điểm này được không
Bạn nào thế nào để có thể Kiểm tra vé còn trống có lớn hơn số vé mà user đó đặt hay không? (cấu trúc DB thế nào, bạn dùng câu lệnh gì để check)
Bạn insert thông tin gì, vào bảng gì?
tại cũng chưa biết cấu trúc DB, cũng như cách thức bạn query nên để suggest câu trả lời cụ thể cũng hơi khó