[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.70,0:00:07.26,Default,,0000,0000,0000,,Ta cùng tìm hiểu về vòng lặp nhé. Ở đây tôi có một vòng lặp while, và chỉ với một vài dòng mã, tôi có thể hiển thị thông báo này trên toàn bộ màn hình. Dialogue: 0,0:00:07.26,0:00:10.34,Default,,0000,0000,0000,,Nếu tôi tiếp tục thay đổi thông báo như thế này, bạn biết đấy, để trông nổi bật hơn ấy, Dialogue: 0,0:00:10.34,0:00:11.93,Default,,0000,0000,0000,,thì tất cả thông báo sẽ thay đổi theo. Dialogue: 0,0:00:11.93,0:00:15.83,Default,,0000,0000,0000,,Vậy bí quyết là gì? Chúng ta có thể xem lại đoạn mã này. Dialogue: 0,0:00:15.83,0:00:19.42,Default,,0000,0000,0000,,Nhưng trước hết ta cùng nhớ lại và nghĩ về cách viết chương trình này Dialogue: 0,0:00:19.42,0:00:22.47,Default,,0000,0000,0000,,chỉ với những gì ta đã biết cho tới hiện tại mà không sử dụng vòng lặp. Dialogue: 0,0:00:22.47,0:00:26.75,Default,,0000,0000,0000,,Vậy, để làm được điều đó, chúng ta sẽ phải viết đi viết lại một đống văn bản giống nhau, phải không? Dialogue: 0,0:00:26.75,0:00:32.59,Default,,0000,0000,0000,,Ta sẽ nhập text, message, tôi sẽ đưa vào vị trí đầu tiên, và giờ vấn đề chỉ còn là lặp lại văn bản này Dialogue: 0,0:00:32.59,0:00:36.34,Default,,0000,0000,0000,,đủ để thông báo xuất hiện cho tới cuối màn hình. Dialogue: 0,0:00:36.34,0:00:38.95,Default,,0000,0000,0000,,Và sẽ mất rất nhiều công sức, đúng không nào? Dialogue: 0,0:00:38.95,0:00:42.75,Default,,0000,0000,0000,,Vì cuối màn hình còn xa lắm. Và sẽ còn tệ hơn nếu Dialogue: 0,0:00:42.75,0:00:46.76,Default,,0000,0000,0000,,bạn nói với tôi rằng, này, khoảng cách không để 70 được, sát hơn nữa đi, để khoảng cách Dialogue: 0,0:00:46.76,0:00:50.71,Default,,0000,0000,0000,,60 đi. Và giờ thì ảnh hưởng đến cả chương trình nữa vì khoảng cách sẽ nhỏ hơn Dialogue: 0,0:00:50.71,0:00:55.04,Default,,0000,0000,0000,,và từ đó, ta sẽ phải gọi nhiều văn bản hơn. Dialogue: 0,0:00:55.04,0:00:58.26,Default,,0000,0000,0000,,Trên thực tế, cách này sẽ còn tốn nhiều thời gian hơn để có thể phủ kín màn hình. Dialogue: 0,0:00:58.26,0:01:02.18,Default,,0000,0000,0000,,Vì vậy sẽ rắc rối cực kỳ đấy, và may mắn thay chúng ta đã có vòng lặp hỗ trợ. Dialogue: 0,0:01:02.18,0:01:06.21,Default,,0000,0000,0000,,Từ nay trở đi, bất cứ khi nào ta thấy có mã lặp, suy nghĩ đầu tiên hiện lên phải là Dialogue: 0,0:01:06.21,0:01:10.09,Default,,0000,0000,0000,,“Mình có thể sử dụng vòng lặp không?” Vòng lặp cho phép ta lặp lại một đoạn mã Dialogue: 0,0:01:10.09,0:01:14.25,Default,,0000,0000,0000,,liên tục, và chỉ cần một chút thay đổi cho mỗi lần lặp. Và sau đây Dialogue: 0,0:01:14.25,0:01:17.87,Default,,0000,0000,0000,,là cách ta sử dụng vòng lặp để viết đoạn mã này. Trước hết, ta gõ “while”, Dialogue: 0,0:01:17.87,0:01:22.09,Default,,0000,0000,0000,,dấu ngoặc đơn, và dấu ngoặc nhọn. Ta sẽ gặp thông báo này, nhưng Dialogue: 0,0:01:22.09,0:01:26.30,Default,,0000,0000,0000,,đó là bởi ta chưa xong việc thôi. Đừng lo, thông báo sẽ biến mất khi ta hoàn thành. Dialogue: 0,0:01:26.30,0:01:30.81,Default,,0000,0000,0000,,Như vậy mỗi lần viết một vòng lặp ta phải trả lời 3 câu hỏi chính. Dialogue: 0,0:01:30.82,0:01:33.37,Default,,0000,0000,0000,,Đó là: Dialogue: 0,0:01:33.37,0:01:37.37,Default,,0000,0000,0000,,câu hỏi thứ nhất là, “Ta muốn lặp cái gì?” Và Dialogue: 0,0:01:37.37,0:01:41.47,Default,,0000,0000,0000,,tất cả những thứ ta cần lặp đều phải nằm trong ngoặc nhọn. Dialogue: 0,0:01:41.47,0:01:46.20,Default,,0000,0000,0000,,Vậy trong trường hợp này ta muốn lặp lệnh gọi “text”, ta sẽ đưa nó vào đây. Dialogue: 0,0:01:46.20,0:01:49.57,Default,,0000,0000,0000,,Nhưng có vẻ hơi kỳ cục phải không? Vì hiện tại ta sẽ chỉ lặp đi lặp lại Dialogue: 0,0:01:49.57,0:01:53.48,Default,,0000,0000,0000,,cùng một lệnh gọi text, không hiệu quả cho lắm, nên ta cần thứ gì đó Dialogue: 0,0:01:53.48,0:01:57.71,Default,,0000,0000,0000,,khác biệt. Từ đó ta có câu hỏi thứ 2, đó là “Mỗi lần lặp ta muốn thay đổi điều gì?” Dialogue: 0,0:01:57.71,0:02:01.42,Default,,0000,0000,0000,,Vậy ta muốn thay đổi vị trí “y” đúng không? Ta muốn khoảng cách là 60 rồi sau đó ta lại muốn nó Dialogue: 0,0:02:01.42,0:02:05.50,Default,,0000,0000,0000,,trở thành 80. Vậy thì ta sẽ đặt là một biến. Dialogue: 0,0:02:05.50,0:02:09.48,Default,,0000,0000,0000,,Gọi y, vì đó là vị trí y. Ta sẽ tiếp tục khai một biến Dialogue: 0,0:02:09.48,0:02:13.38,Default,,0000,0000,0000,,ở trên đây. Tôi sẽ bắt đầu với 40. Và cuối cùng, ta chỉ cần Dialogue: 0,0:02:13.38,0:02:17.20,Default,,0000,0000,0000,,thay đổi y. Ta có thể thay đổi ở dưới đây, nhập “ y = y + 20” Dialogue: 0,0:02:17.20,0:02:21.09,Default,,0000,0000,0000,,và mỗi lần lặp biến sẽ lại lớn hơn. Trên thực tế, ở đây ta có thể sử dụng Dialogue: 0,0:02:21.09,0:02:24.74,Default,,0000,0000,0000,,kiến thức từ bài học incrementing shortcut. Thật tuyệt vời, bây giờ ta cứ thế Dialogue: 0,0:02:24.74,0:02:29.09,Default,,0000,0000,0000,,mà áp dụng shortcut. Tuyệt vời, và bây giờ ta chỉ Dialogue: 0,0:02:29.09,0:02:32.70,Default,,0000,0000,0000,,cần trả lời câu hỏi thứ 3, đó là “Ta nên lặp trong bao lâu?” Dialogue: 0,0:02:32.70,0:02:36.53,Default,,0000,0000,0000,,Chúng ta muốn lặp đi lặp lại nhiều lần, nhưng lại không muốn lặp mãi mãi đúng không? Dialogue: 0,0:02:36.53,0:02:41.25,Default,,0000,0000,0000,,Nếu lặp mãi mãi thì, trước hết, ta sẽ phải đợi rất lâu, và thứ hai, trình duyệt có nguy cơ ngưng hoạt động nữa. Dialogue: 0,0:02:41.25,0:02:44.47,Default,,0000,0000,0000,,Nhưng hy vọng là không. Vì vậy, ta chỉ cần Dialogue: 0,0:02:44.47,0:02:48.37,Default,,0000,0000,0000,,lặp đến cuối trang thôi nhỉ? Điều đó có nghĩa là ta sẽ lặp Dialogue: 0,0:02:48.37,0:02:52.47,Default,,0000,0000,0000,,miễn sao y nhỏ hơn 400. Vậy ta sẽ đưa vào đây, và Dialogue: 0,0:02:52.47,0:02:56.43,Default,,0000,0000,0000,,thế là xong! Ta đã có thông báo hiển thị xuống tận cuối màn hình. Dialogue: 0,0:02:56.43,0:02:59.92,Default,,0000,0000,0000,,Và ta có thể thấy phương pháp này đơn giản hơn rất nhiều so với phương pháp trước, như các bạn biết đấy, Dialogue: 0,0:02:59.92,0:03:04.18,Default,,0000,0000,0000,,mất rất nhiều thời gian để viết, vậy mà thậm chí chưa xong nổi 1/4. Dialogue: 0,0:03:04.18,0:03:08.09,Default,,0000,0000,0000,,Ta có thể bỏ phương pháp đó đi và viết chương trình theo phương pháp mới này. Dialogue: 0,0:03:08.09,0:03:11.71,Default,,0000,0000,0000,,Bây giờ, ta cùng tìm hiểu sâu hơn một chút nhé. Với mỗi lần lặp Dialogue: 0,0:03:11.71,0:03:15.63,Default,,0000,0000,0000,,tôi sẽ lại xuất y. Ta nhập “y is now”, sau đó ở dưới đây Dialogue: 0,0:03:15.63,0:03:19.41,Default,,0000,0000,0000,,tôi sẽ ghim y vào cuối thông báo để các bạn có thể nhìn thấy. Dialogue: 0,0:03:19.41,0:03:23.34,Default,,0000,0000,0000,,Hiện tại, giá trị đang tăng dần theo 20 đơn vị, và ta có thể thay đổi Dialogue: 0,0:03:23.34,0:03:27.26,Default,,0000,0000,0000,,giá trị đó bằng cách thay đổi biến này. Các bạn có thể chuyển thành, ví dụ, Dialogue: 0,0:03:27.26,0:03:31.43,Default,,0000,0000,0000,,50 đơn vị. Và bây giờ, giá trị tăng dần theo 50 đơn vị. Tương tự, Dialogue: 0,0:03:31.43,0:03:35.58,Default,,0000,0000,0000,,ta có thể xuất và thay đổi những giá trị khác. Và Dialogue: 0,0:03:35.58,0:03:39.20,Default,,0000,0000,0000,,các bạn có thể thấy được điều đó ảnh hưởng như thế nào đến vị trí chương trình ngừng chạy. Dialogue: 0,0:03:39.20,0:03:44.01,Default,,0000,0000,0000,,Để hiểu được điều này, ta có thể coi nó như Dialogue: 0,0:03:44.01,0:03:47.34,Default,,0000,0000,0000,,một mệnh đề “if”. Ta có biểu thức boolean Dialogue: 0,0:03:47.34,0:03:52.01,Default,,0000,0000,0000,,hệt như các bạn đã được học. Sau đó, ta sẽ chạy phần thân của mệnh đề này, Dialogue: 0,0:03:52.01,0:03:55.47,Default,,0000,0000,0000,,chỉ khi biểu thức boolean đúng, nếu không ta sẽ nhảy luôn Dialogue: 0,0:03:55.47,0:03:59.09,Default,,0000,0000,0000,,đến cuối cùng. Nhưng điều thú vị là với một vòng lặp while ta có Dialogue: 0,0:03:59.09,0:04:03.86,Default,,0000,0000,0000,,một dòng bí ẩn ở dưới cùng với nội dung “go back to the start of the loop”. Dialogue: 0,0:04:03.86,0:04:07.20,Default,,0000,0000,0000,,Và ý nghĩa của câu chỉ dẫn bí ẩn này là Dialogue: 0,0:04:07.20,0:04:11.07,Default,,0000,0000,0000,,thay vì thoát và tiếp tục lặp, giống như mệnh đề “if”, Dialogue: 0,0:04:11.07,0:04:15.03,Default,,0000,0000,0000,,mỗi lần lặp ta sẽ quay lại từ đầu và kiểm tra xem Dialogue: 0,0:04:15.03,0:04:19.20,Default,,0000,0000,0000,,điều kiện có còn đúng nữa hay không. Nếu đúng, ta sẽ tiếp tục lặp thêm Dialogue: 0,0:04:19.20,0:04:23.24,Default,,0000,0000,0000,,một lần nữa. Và đúng như các bạn đoán, ta lại lặp lần 2, và cứ thế liên tục... Dialogue: 0,0:04:23.24,0:04:27.09,Default,,0000,0000,0000,,ta sẽ kiểm tra, các bạn biết đấy, quay lại từ đầu. Y có còn nhỏ hơn 279 không? Dialogue: 0,0:04:27.09,0:04:31.56,Default,,0000,0000,0000,,Nếu vẫn nhỏ hơn, ta sẽ lặp thêm một lần nữa và tiếp tục kiểm tra. Dialogue: 0,0:04:31.56,0:04:34.59,Default,,0000,0000,0000,,Nếu không, ta sẽ quay trở về đầu vòng lặp. Và cuối cùng, Dialogue: 0,0:04:34.59,0:04:38.48,Default,,0000,0000,0000,,ta sẽ thoát và tiếp tục chạy chương trình. Dialogue: 0,0:04:38.48,0:04:42.70,Default,,0000,0000,0000,,Vậy là tốt rồi, vẫn còn nhiều phương pháp sử dụng vòng lặp thú vị khác mà các bạn sắp được tìm hiểu, nhưng Dialogue: 0,0:04:42.70,0:00:00.00,Default,,0000,0000,0000,,hiện tại, đây đã làn một khởi đầu mỹ mãn rồi.