Return to Video

Nested For Loops (Video Version)

  • 0:02 - 0:04
    Một viên ngọc, viên ngọc tuyệt đẹp!
  • 0:04 - 0:08
    Nhưng bạn biết đấy, thứ còn tuyệt vời hơn một viên ngọc là cả một hàng ngọc!
  • 0:08 - 0:13
    Và dĩ nhiên, ta đã biết rằng cách tạo hàng ngọc hiệu quả nhất là sử dụng vòng lặp.
  • 0:13 - 0:16
    Vậy ta cùng sử dụng một vòng lặp for để vẽ 12 viên ngọc.
  • 0:16 - 0:20
    Đi từ trái sang phải màn hình.
  • 0:20 - 0:22
    Như thế đó. Ta có
  • 0:22 - 0:31
    for (var i = 0; i < 12; i++)
  • 0:31 - 0:36
    Sau đó ta sẽ lấy dòng này và chuyển vào trong đây.
  • 0:36 - 0:40
    Như vậy ta đã có 12 viên ngọc nhưng chúng lại đang chồng chéo lên nhau.
  • 0:40 - 0:43
    Hãy nhớ rằng ta đang muốn chúng trải ngang màn hình.
  • 0:43 - 0:46
    Điều đó có nghĩa là ta cần phải thay đổi x.
  • 0:46 - 0:50
    Và, hiện tại X = 36, nhưng mỗi lần lặp ta lại cần một giá trị khác.
  • 0:50 - 0:52
    Vậy tức là biến sẽ phải phụ thuộc vào i.
  • 0:52 - 0:56
    Ta chỉ cần nói rằng; i*36.
  • 0:56 - 1:03
    Như vậy viên ngọc đầu tiên nằm tại điểm 0, tiếp theo là 36, rồi 72, và v.v.
  • 1:03 - 1:05
    Tuyệt vời! Vậy là ta đã có một hàng ngọc.
  • 1:05 - 1:08
    Tự nhiên làm tôi nhớ đến cảnh trong phim Indiana Jones với Aladdin.
  • 1:08 - 1:11
    Nam chính phát hiện ra một kho báu dưới lòng đất chứa đầy đá quý
  • 1:11 - 1:14
    nhưng thường họ tìm được gấp mấy lần chỗ ngọc này.
  • 1:14 - 1:17
    Không phải một hàng ngọc mà cả đống ngọc luôn!
  • 1:17 - 1:22
    Vậy làm cách nào để chỗ ngọc này
  • 1:22 - 1:25
    trải dọc theo màn hình nữa?
  • 1:25 - 1:31
    Ta có thể bắt đầu bằng cách lặp lại vòng lặp for này, sao chép dán lại
  • 1:31 - 1:35
    rồi thay đổi y cho mỗi lần lặp.
  • 1:35 - 1:38
    Như vậy ta sẽ tăng lên 60 và sau đó là 90.
  • 1:38 - 1:42
    Vậy là ta đã có 3 hàng ngọc rồi, tuyệt vời.
  • 1:42 - 1:45
    Umm... nhưng tôi bắt đầu thấy chán rồi vì tất cả những gì tôi làm
  • 1:45 - 1:49
    chỉ là sao chép và dán và thay đổi có xíu xíu.
  • 1:49 - 1:53
    Thông thường trước đây khi nhận thấy cần phải viết những đoạn mã lặp đi lặp lại
  • 1:53 - 1:57
    tôi sẽ kiểu: “À chắc mình nên dùng vòng lặp thì hơn.”
  • 1:57 - 1:59
    Nhưng chúng ta đã đang sử dụng vòng lặp rồi.
  • 1:59 - 2:04
    Vậy làm thế nào để tránh được sao chép đi dán lại như vậy?
  • 2:04 - 2:10
    Cái đó chúng tôi hay gọi là “vòng lặp for lồng” – vòng lặp trong vòng lặp.
  • 2:10 - 2:12
    Ta sẽ tạo một vòng lặp ngoài trước.
  • 2:12 - 2:15
    Và vòng lặp đó sẽ đảm nhiệm việc trải ngọc dọc theo màn hình,
  • 2:15 - 2:19
    sau đó vòng lặp trong sẽ tiếp tục mang trọng trách hiện tại,
  • 2:19 - 2:22
    đó là trải ngọc theo chiều ngang màn hình.
  • 2:22 - 2:24
    Để tôi cho các bạn xem nhé.
  • 2:24 - 2:30
    Ta nhập for – lần này ta sẽ sử dụng một biến khác, gọi là j, vì ta đã sử dụng i rồi.
  • 2:30 - 2:37
    Vậy là for (var j = 0; j < 13; j++)
  • 2:37 - 2:42
    Được rồi, đó sẽ là vòng lặp ngoài của chúng ta, chịu trách nhiệm trải ngọc dọc màn hình.
  • 2:42 - 2:48
    Sau đó ta sẽ lấy một trong những vòng lặp for đã tạo từ trước và đưa vào bên trong,
  • 2:48 - 2:53
    chỉnh sửa bản sao, và xóa những vòng lặp cũ. Được rồi.
  • 2:53 - 2:59
    Hiện tại ta đã có một đống ngọc chồng hết lên nhau trong cùng một hàng.
  • 2:59 - 3:02
    Vấn đề là ta cần phải thay đổi y phải không?
  • 3:02 - 3:04
    Đó là biến mà ta đã thay đổi khi sao chép và dán,
  • 3:04 - 3:06
    hiện tại Y cố định là 90.
  • 3:06 - 3:09
    Ta muốn thay đổi y cho từng hàng.
  • 3:09 - 3:16
    Giống như x phụ thuộc vào i, ta cho y phụ thuộc vào j.
  • 3:16 - 3:25
    Ta có thể thay đổi thành, ví dụ như, j*30.
  • 3:25 - 3:30
    Tada! Nhiều ngọc quá! Được rồi đó!
  • 3:30 - 3:32
    Ta cùng quan sát lại một lượt nhé.
  • 3:32 - 3:38
    Vòng lặp ngoài tạo biến j và gia tăng biến tới 13.
  • 3:38 - 3:44
    Và, trong mỗi lần chạy vòng lặp ngoài, vòng lặp trong cũng sẽ chạy.
  • 3:44 - 3:49
    Vòng lặp trong tạo biến i được gia tăng lên tới 12.
  • 3:49 - 3:55
    Với mỗi lần chạy vòng lặp trong, ta sẽ có một hình ảnh có tọa độ x và y dựa trên “i” và “j”.
  • 3:55 - 4:00
    Và vì thế “i” thay đổi thường xuyên hơn “j”.
  • 4:00 - 4:05
    Để hiểu kỹ lưỡng hơn nữa, ta cùng thử hình dung các giá trị của “i” và “j”.
  • 4:05 - 4:09
    Tôi sẽ chú thích vào ảnh này
  • 4:09 - 4:12
    rồi thiết lập tô màu,
  • 4:12 - 4:17
    tôi sẽ sử dụng lệnh văn bản để thể hiện giá trị của “j” – ta nhập text j
  • 4:17 - 4:22
    rồi đặt vào vị trí thích hợp tại đây. Được rồi.
  • 4:22 - 4:26
    Ta có thể thấy “j” tăng từ 0 đến 12.
  • 4:26 - 4:32
    Về cơ bản đây cũng chính là vị trí của hàng ngọc.
  • 4:32 - 4:36
    Bây giờ ta sẽ hình dung”i” và xem nó thay đổi như thế nào nhé.
  • 4:36 - 4:43
    Đối với “i”, ta sẽ tô một màu khác.
  • 4:43 - 4:46
    Rồi ta sẽ đặt “i” ở đâu đó.
  • 4:46 - 4:50
    Và ta sẽ thay đổi x để hiển thị ngang màn hình.
  • 4:50 - 4:55
    Ta cũng thực hiện tương tự đối với y.
  • 4:55 - 5:00
    Ta có thể thấy rằng “i” đang tăng từ 0 đến 11.
  • 5:00 - 5:05
    Và “i”, như tôi đã nói, thay đổi thường xuyên hơn rất nhiều.
  • 5:05 - 5:09
    Dòng mã này sẽ được chạy nhiều lần hơn so với dòng mã này.
  • 5:09 - 5:14
    Vì dòng mã này được thực hiện với mỗi lần chạy vòng lặp for trong.
  • 5:14 - 5:20
    Trong khi dòng mã này chỉ được thực hiện khi chạy vòng lặp ngoài.
  • 5:20 - 5:22
    Hy vọng việc hình dung giá trị “i” và “j” này
  • 5:22 - 5:27
    có thể giúp các bạn hiểu hơn về vòng lặp for lồng.
  • 5:27 - 5:30
    Giờ hãy quay lại với số ngọc của chúng ta, vì trông chúng đẹp hơn rất nhiều!
  • 5:30 - 5:34
    Như vậy ta có thể thực hiện rất nhiều thứ với vòng lặp for lồng
  • 5:34 - 5:37
    nếu ta coi mọi thứ trên thế giới này
  • 5:37 - 5:40
    giống như một mạng lưới 2 chiều, ví dụ bàn cờ vua, cái chăn,
  • 5:40 - 5:45
    những ngôi sao trên quốc kỳ Mỹ, những hình nền và hoa văn hay ho.
  • 5:45 - 5:47
    Muốn kích thích trí tưởng tượng, trước hết hãy cứ nghịch chỗ mã này đã,
  • 5:47 - 5:50
    thay đổi hình ảnh chẳng hạn.
  • 5:50 - 5:54
    Tôi sẽ đổi nó thành hình trái tim!
  • 5:54 - 0:00
    Để cho các bạn thấy tôi thích vòng lặp for lồng như thế nào! Aww!
Title:
Nested For Loops (Video Version)
Description:

more » « less
Video Language:
English
Duration:
06:00

Vietnamese subtitles

Incomplete

Revisions