THẢO LUẬN

thg 9 17, 2020 9:33 SA

👏👏👏 Edit lại link https://www.w3.org/TR/wai-aria/states_and_properties đi bạn ơi...

0
thg 9 17, 2020 9:24 SA

Thanks bạn

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 9 17, 2020 9:24 SA

Thanks bạn nhiều

0
thg 9 17, 2020 9:22 SA

Ừ hiện tại mình tạo hôm qua nên chưa fix được font, bạn chờ bản released tiếp theo nhé, hahahahaha

0

Mình cũng dự định thi vào tháng 12 =)) Bạn trẻ xúc 2 lần mới pass nghe cũng khá căng thẳng =))

0
thg 9 17, 2020 8:50 SA

@longvt1912 Cảm ơn bạn nhiều ạ ❤️ mình sẽ cố gắng tìm hiểu thêm ạ 👍

0

Đúng rồi, thấy bạn vừa học Kotlin vừa học Dart như vậy coi chừng nhầm lẫn print vs println nha 😄

Mình ban ngày là dev, tối là teacher, cuối tuần là Viblo writer 😄

0

Lần đầu tiên mình nhìn thấy code bên trong của fun forEach. Thật tuyệt vời. Có lẽ nhìu amateur như mình đều nghĩ nó là vòng lặp. Tks bạn đã dành time giải thích cho mình.

Thật tò mò với "địa vị" của bạn! Senior dev, profecsor, teacher?

Thật ra, mình ít làm việc thực tế nên ko nhạy bén với code. Mình ko hỉu là cái result in ra á. Nó in ra "1245 done ...". Đọc giải thích của bạn, nhìn lại code mới phát hiện là dùng lệnh print, ko phải println như trong đầu mình. Hahaa

Giờ thì hỉu rùi. Tks a lot!

+1
thg 9 17, 2020 7:54 SA

@tantaile421 nó là sự kiện của js nên kết hợp bình thường bạn nhé, mình update lại chút là dùng wheel event nhé. mousewheel không còn tương thích tốt nữa.

0

Đoạn code trên của bạn cũng tương đương 5 hàm action sau được chạy.

fun main() {
    // tạo biến action có kiểu hàm (Int) -> Unit
    val action: (Int) -> Unit = lit@{
        println("Run! run! Forest run!. Bắt đầu chạy hàm action($it)")

        if(it == 3) {
            println("Chạy đây cho thoát, nếu mi == 3 ta sẽ cho mi dừng chạy ở đây")
            return@lit // hàm return làm cho 1 hàm phải dừng thực thi
        }

        println("Hàm action($it) đã chạy về đích")
    }

    action(1) // thực thi hàm action(1)
    action(2) // thực thi hàm action(2)
    action(3) // thực thi hàm action(3)
    action(4) // thực thi hàm action(4)
    action(5) // thực thi hàm action(5)
}

Hoặc nếu mổ xẻ code bên trong hàm forEach của bạn ra thì nó sẽ thế này:

fun main() {
    val action: (Int) -> Unit = lit@{
        println("Run! run! Forest run!. Bắt đầu chạy hàm action($it)")

        if(it == 3) {
            println("Chạy đây cho thoát, nếu mi == 3 ta sẽ cho mi dừng chạy ở đây")
            return@lit // hàm return làm cho 1 hàm phải dừng thực thi
        }

        println("Hàm action($it) đã chạy về đích")
    }

//    action(1)
//    action(2)
//    action(3)
//    action(4)
//    action(5)

    // hoặc nếu dùng vòng lặp thì như thế này đây
    // bản chất code bên trong hàm forEach của bạn là dùng vòng lặp để chạy 5 cái hàm action
    // mà khổ cái ngay cái lần lặp thứ 3 tức là chạy hàm action(3), hàm action(3) nó bị return trước khi về đích :D
    val list = listOf(1, 2, 3, 4, 5)
    for (i in list) {
        action(i)
    }
}

Đây là output của 2 đoạn code trên. Bạn có thể thấy action(3) ko về đích đc.

Run! run! Forest run!. Bắt đầu chạy hàm action(1)
Hàm action(1) đã chạy về đích
Run! run! Forest run!. Bắt đầu chạy hàm action(2)
Hàm action(2) đã chạy về đích
Run! run! Forest run!. Bắt đầu chạy hàm action(3)
Chạy đây cho thoát, nếu mi == 3 ta sẽ cho mi dừng chạy ở đây
Run! run! Forest run!. Bắt đầu chạy hàm action(4)
Hàm action(4) đã chạy về đích
Run! run! Forest run!. Bắt đầu chạy hàm action(5)
Hàm action(5) đã chạy về đích
0
thg 9 17, 2020 7:45 SA

@tranxuanthang mình có gửi request r`, để test xem sao, cảm ơn ông nhé 😄

+1
thg 9 17, 2020 7:44 SA

@tranxuanthang khổ nổi ai cũng xài chrome, cảm ơn ông nhé 😄

+1
thg 9 17, 2020 7:43 SA

code này kết hợp được với ScrollReveal k bạn 😄?

0

Nếu bạn vào đọc code bên trong hàm forEach sẽ thấy nó thế này:

fun forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
}

Bên trong nó truyền vào 1 biến action có kiểu hàm (function type). Và nó chạy vòng lặp, mỗi lần lặp nó sẽ thực thi biến action đó. Như vậy bạn có thể tưởng tượng list của bạn có 5 phần tử 1,2,3,4,5 thì sẽ có 5 hàm action được chạy. Tương ứng với lần lặp đầu tiên là it == 1 nó sẽ chạy hàm action(1), it == 2 nó chạy hàm action(2), it == 3 nó chạy hàm action(3). Ở đây bạn có check nếu it == 3 thì return vậy nên cái hàm action(3) bị return (khi return một hàm thì hàm đó lập tức dừng thực thi). Vì hàm action(3) bị dừng trước khi nó kịp chạy đến lệnh print(it) nên số 3 ko được in ra. Tất nhiên 2 hàm còn lại là action(4) và action(5) vẫn chạy bình thường vì nó chả liên quan gì đến hàm action(3).

Như vậy nên số 3 ko đc in ra còn số 1, 2, 4 và 5 đc in ra. Còn dòng print(" done with explicit label") thì hiển nhiên được in ra sau khi chạy xong vòng lặp rồi.

Thêm 1 ý này nữa nếu bạn đang confuse giữa hàm forEach và vòng lặp for. Hàm forEach bản chất nó là 1 hàm, ko phải là vòng lặp for. Bên trong hàm forEach nó sử dụng vòng lặp for nên ta tưởng đó là vòng lặp for. Vì vậy mà break và continue sẽ ko dùng đc ở trong hàm forEach.

// dùng forEach
(1..5).forEach {
       if(it == 3) break; // Lỗi
}

// dùng vòng lặp for    
for (i in 1..5) {
       if(i == 3) break  // OK
}
0
thg 9 17, 2020 7:24 SA

thank bạn

0
thg 9 17, 2020 6:47 SA

Sao font bị lỗi hay sao mà blog tạo ra khó đọc vậy bạn?

0
thg 9 17, 2020 6:26 SA

Xin lỗi mình có bạn trai rồi 😃

0
thg 9 17, 2020 6:24 SA

hệ thống chạy nginx vs apache

Vậy là theo dõi hệ thống hay theo dõi nginx/apache vậy bạn ?

Một số hệ thống đã tích hợp sẵn Plugin thay cho exporter cài đặt thêm, nên bạn cần research xem service của bạn có hỗ trợ xuất ra metric timeline hay không?

Nếu có thì kết nối Datasource với Grafana và setup query thôi, nếu không thì bạn cần tìm 1 service exporter tương ứng hỗ trợ hệ thống của bạn. Về phần NGINX và Apache, theo mình chỉ cần check status up/down của webserver này là ổn.

Tham khảo NGINX exporter mà Gitlab đang dùng NGINX VTS exporter

server die thì email về

Gợi ý đoạn này nên để query ở Grafana với công thức delta() hoặc rate(), thì alert email nó không bị gửi nhiều quá. Die trên 2 phút mới gửi mail chẳng hạn.

Xem log thì vẫn phải vào server để xem nhé, hoặc muốn dùng giải pháp lớn thì bạn tham khảo thêm Kibana để filter log cho nhanh.

p/s: câu hỏi của bạn khá lớn nên research dần các keyword trong comment nhé 👍

0
thg 9 17, 2020 6:16 SA

tuyệt vời ạ

0
thg 9 17, 2020 6:11 SA

tức là bạn muốn hiển thị ảnh theo kiểu gellery rồi view to ảnh trên popup khi click vào từng ảnh 1 à? Như vậy thì bạn cần custom thêm khá nhiều hoặc k thì dùng library cho nhanh.

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí